我可以连接到电能表(波特率300!),带有228行的日志文件慢慢进入。
line = ser.readline(eol='!')
print line
如果我使用上面的代码,则会显示完整的日志文件。 如果我用match匹配分离保存的日志文件,它会将正确的值排序到sqlite中。 因此,两个“部分”分开工作。
但是我的脚本无法移交输出来解析它。它没有抛出错误,只给出了0个值。
我错过了什么?首先我想,脚本是为了快速输入(需要一分钟),但脚本在完成之前会等待很长时间。
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import serial
import time
import re
import sqlite3
ser = serial.Serial()
ser.baudrate = 300
ser.port = '/dev/ttyUSB0'
ser.timeout = 20
ser.parity = serial.PARITY_EVEN
ser.stopbits = serial.STOPBITS_ONE
ser.bytesize = serial.SEVENBITS
ser.open()
ser.isOpen()
#initiating logfile-output with /?!
time.sleep(2)
ser.write("/?!")
#time.sleep(0.001)
ser.write("\r\n")
time.sleep(2)
connection = sqlite3.connect('/var/www/zaehler/test1.db')
cursor = connection.cursor()
extrakt = []
#line = ser.readline(eol='!')
#print line-would work
for line in ser.readline(eol='!'):
match = re.search(r'(0\.0\.0|0\.9\.1|0\.9\.2|1\.6\.1|1\.8\.1)\(([0-9\.]+)', line)
if match:
version,value = match.groups()
extrakt.append(value)
cursor.execute('INSERT INTO energielog (sernr, time, date, peak, kwh) values (?, ?, ?, ?, ?)', extrakt)
connection.commit()
ser.close()
cursor.close()
connection.close()
我尝试过没有成功:
ser.readline(eol='!') = z
for line in z:
match..
引发错误SyntaxError:无法分配给函数调用
答案 0 :(得分:1)
我建议您使用WHILE循环而不是FOR循环。 readline函数不是可迭代的,因此您无法循环其值。这条线不符合您的意图:
for line in ser.readline(eol='!')
相反,试试这个:
ss = r'(0\.0\.0|0\.9\.1|0\.9\.2|1\.6\.1|1\.8\.1)\(([0-9\.]+)'
while (True):
line = ser.readline(eol='!')
if (len(line) == 0):
break
match = re.search(ss, line)
if match:
version,value = match.groups()
extrakt.append(value)