Seite 1 von 1

Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Freitag 31. März 2017, 20:49
von sisamiwe
Hallo,
ich bin neu hier uns auch Python Anfänger und damit auf Eure Hilfe angewiesen.

Zum Vorhaben. Ich möchte mit einem Python3.X Script und dem pyserial Modul 2.6 via RPi3 mit Jessie und einem USB IR-Schreib-Lesekopf meinen Stromzähler (eHZ) auslesen. Der IR-Schreib-Lesekopf ist an ttyUSB2 verbunden.

Um die Kommunikation mit dem Zähler aufzunehmen, muss als INIT folgendes senden:
HEX: 2F3F210D0A
ASCII: /?!<CR><LF>

Der Zähler antwortet mit:
ASCII: /ITF5FRP-SMV320090704<\r><\n>

Ich sende innerhalb von 2 Sekunden:
HEX: 063035300d0a
ASCII: <ACK>050<CR><LF>

Der Zähler antwortet mit seinen Daten.

Nun habe ich mich an den Code versucht, scheitere aber schon an ser.write.
Ich habe keine Ahnung, wie ich die ASCII oder HEX Zeichenfolge eingeben muss.
Könnt ihr hier helfen?

Code: Alles auswählen

#!/usr/bin/python
#
#

import sys
import serial
import time
import string

logger.info("Logik ITF : by :" + trigger['by'] )

# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial(
    port='/dev/ttyUSB2',
    baudrate=9600,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.SEVENBITS
)

#ser.open()
#ser.isOpen()

ser.write(b'2F3F210D0A')
#ser.write('2F3F210D0A'.enode('utf-8'))
#ser.write("/?!<0D><0A>")


# let's wait a short time before reading the responses
time.sleep(1)
out = ser.read()

logger.info(out)
	
ser.close()

DANKE

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Freitag 31. März 2017, 21:05
von __deets__
Hex kannst du zB so schreiben: b"\x48\x41\x4c\x4c\x4f"

Sprich im String einfach mit "\x" auszeichnen.

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Freitag 31. März 2017, 21:34
von sisamiwe
Danke. Du meinst

Code: Alles auswählen

ser.write(b"/x2F/x3F/x21/x0D/x0A")
Richtig?

Ich ich das so teste, bekomme ich als Antwort

Code: Alles auswählen

>>> print(ser.read())
b'\x1f'
Irgendwas stimmt nicht.
Hast Du noch eine Idee?

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Freitag 31. März 2017, 21:46
von BlackJack
@sisamiwe: / ist etwas anderes als \. Ich hoffe das war jetzt nicht zu subtil. ;-)

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 12:33
von sisamiwe
Hallo,
danke für den Hinweis. Machmal sieht man den Wald vor lauter Bäumen nicht.

Leider geht es trotzdem nicht oder nur teilweise.
Ich schreibe mit

Code: Alles auswählen

ser.write(b"\x2F\x3F\x21\x0D\x0A")
auf die Schnittstelle und bekomme nicht die richtige Antwort.

Wenn ich eine Console (Putty) öffne und mit

Code: Alles auswählen

cat /dev/ttyUSB0
die Schnittstelle "abhöre", kommt das richtige Ergebnis.

Wie bekomme ich nun auch in Python das richtige Ergebnis?
Hast Du noch einen Tipp?
DANKE.

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 12:59
von BlackJack
@sisamiwe: Was für eine Antwort bekommst Du denn? Und Du verwendest dafür auch die richtige Methode und nicht `read()` wie im Beispiel oben das solange liest und blockiert bis *alles* gelesen wurde was die andere Seite sendet bevor sie die Verbindung schliesst. Was die Gegenseite aber nicht machen wird, also hängt das ewig.

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 13:05
von sisamiwe
Hab noch ein bisschen probiert und mit

Code: Alles auswählen

ser.read(24)
liest er auch das Richtige ein. ser.read() liest nur 1 byte und nicht alles.
DANKE

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 13:25
von BlackJack
@sisamiwe: `read()` ist aber trotzdem falsch, denn da braucht sich ja nur geringfügig etwas in der Antwort ändern und schon stimmt die 24 nicht mehr und das gesamte Protokoll kommt aus dem tritt.

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 14:50
von sisamiwe
@BlackJack.
Was wäre den richtig?

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Samstag 1. April 2017, 15:00
von BlackJack
@sisamiwe: Bei einem zeilenorientierten Protokoll orientiert man sich normalerweise an den Zeilen. ;-)

Re: Kommunikation via USB und RPi mit Stromzähler eHZ

Verfasst: Sonntag 30. April 2017, 19:21
von DeaD_EyE
Vielleicht mit ser.readline() ?