PySerial vreemde output

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Lawrentium
  • Registratie: Oktober 2005
  • Laatst online: 16-01 22:36
Ik heb mijn RPi aangesloten op mijn slimme meter om deze uit te lezen en op te slaan in een DB.

De output zou als volgt moeten zijn (in totaal 20 regels lang):
code:
1
2
3
4
5
6
7
8
/ISk5\2ME382-1003
0-0:96.1.1(4B414C37303035313039)
1-0:1.8.1(00180.724*kWh)
1-0:1.8.2(00001.416*kWh)
1-0:2.8.1(00000.000*kWh)
1-0:2.8.2(00000.000*kWh)
[...]
!


Helaas ziet de output er vaak als volgt uit:

code:
1
2
3
4
5
6
7
8
/ISk5\2ME382-1003
0-0:96.1.1(4B414C37303035313039)
1-0:1.8.1(00180.724*kWh)
1-0:1.8.2(00001.416*kWh)
b'\x00\n'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00
[...]


De RPi ontvangt dus wel wat correcte data, maar vaak wordt dit afgebroken door wat volgens mij null characters zijn?

Mijn voorlopige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ser = serial.Serial()
ser.baudrate = 9600
ser.bytesize=serial.SEVENBITS
ser.parity=serial.PARITY_EVEN
ser.stopbits=serial.STOPBITS_ONE
ser.xonxoff=0
ser.rtscts=0
ser.timeout=None
ser.port="/dev/ttyUSB0"

ser.open()
count=0
while count < 20:
    p1_raw =  str(ser.readline())
    print(p1_raw)
    count=count+1

ser.close()
exit


Wat heb ik geprobeert:
- Kabel op een Macbook aangesloten
- Python2
- Python3

Helaas blijft het probleem zich voor doen.

Wanneer ik de seriele poort lees met cu of Minicom heb ik geen problemen.

Iemand een idee wat het probleem is? Mijn code? Of een PySerial bug?

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:26

Hero of Time

Moderator LNX

There is only one Legend

De programma's die jij gebruikt hebt om te testen (minicom) negeren NULL data, maar je python programmatje doet dat niet. Die dumpt gewoon alles wat 't ontvangt. Je zal dus een filter moeten maken dat alle NULL data trasht, ipv naar je output te sturen.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Lawrentium
  • Registratie: Oktober 2005
  • Laatst online: 16-01 22:36
Na wat gepuzzel ben ik er achter gekomen dat dat niet de oplossing is. Door ser.xonxoff=1 in te stellen lijkt het probleem te zijn verholpen. Er is dus geen filtering nodig.

Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Je had het volgende geprobeerd?
code:
1
2
3
4
5
6
while count < 20:
    p1_raw =  str(ser.readline())
    if p1_raw == "\x00":
        continue
    print(p1_raw)
    count=count+1


Ah, zelfs een topic op StackOverflow: http://stackoverflow.com/...al-receiving-strange-data :P

[ Voor 27% gewijzigd door webfreakz.nl op 14-07-2013 01:41 ]

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!