我是新手并编写了一个脚本,该脚本通过串行 USB 端口启动与电能表的通信(“/?!”)并读出传入的电能日志。它从输出中提取不同的值并将它们写入本地 sqlite-db。假设每 15 分钟运行一次 cronjob。一个 php 网站会将 sqlite 存储的能量读数可视化为图表。
目前我无法使用电表,那里非常偏远和寒冷,所以我需要在去那里之前立即获得它。
如果我尝试执行脚本,则会引发错误:ser.readlines(eol='!') = z
SyntaxError: can't assign to function call
我使用串行输出的 ser.readlines 读取并分配给值 z 是否错误?
如果我打开一个包含类似值的日志文件,则脚本(正则表达式和插入数据库)可以工作:例如 with open ("log") as z:..
#!/usr/bin/env python
import serial
import time
import re
import sqlite3
ser = serial.Serial('/dev/ttyUSB0', 300, bytesize=serial.SEVENBITS, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=2)
ser.open()
ser.write("/?!")
time.sleep(0.001)
ser.write("\r")
connection = sqlite3.connect('/path/to/dbname.db')
cursor = connection.cursor()
extrakt = []
ser.readlines(eol='!') = z
for line in z:
match = re.search(r'(0\.0\.0|1\.6\.1|1\.8\.1)\(([0-9\.]+)', line)
if match:
version,value = match.groups()
extrakt.append(value)
cursor.execute('INSERT INTO energielog (sernr, peak, kwh) values (?, ?, ?)', extrakt)
connection.commit()
ser.close()
cursor.close()
connection.close()