Hallo zusammen,
ich möchte mit meinem Raspberry Pi mit Hilfe von Python folgendes realisieren:
In meinem Haus befinden sich 10 Raumthermostate die per RS485 miteinander verbunden sind. Der Master, ein Raspberry Pi B+ mit Raspbian OS, soll die einzelnen Slaves ( Raumthermostate ) der Reihe nach abfragen. Die Slaves reagieren auf folgenden String der über RS485 geschickt wird:
ST,01,GV,SP
ST=Start
01 = Slave Adresse ( geht von 01 bis 10 )
GV = Get Value
SP = Stop
Jeder Slave empfängt das Telegramm und schaut ob die Slave Adresse seine eigene ist. Wenn dem so ist, schickt er den Temperatur Wert zurück zum Master. Das funktioniert auch prima mit einem Windows PC + Terminalprogramm + RS485 USB Wandler. Jetzt versuche ich seit ein paar Tagen das ganze über den Raspberry Pi laufen zu lassen. Folgendes Script habe ich versucht mit Anfängerkenntnissen zu programmieren:
import serial
import time
import RPi.GPIO as GPIO
directionPin = 22
GPIO.setmode(GPIO.BCM)
GPIO.setup(directionPin, GPIO.OUT)
print ('Opening device /dev/ttyAMA0')
try:
ser = serial.Serial(port='/dev/ttyAMA0', baudrate=9600)
except:
print('failed')
exit()
print ('successful')
time.sleep(3)
GPIO.output(directionPin, GPIO.HIGH)
ser.write('ST,01,GV,SP \n')
GPIO.output(directionPin, GPIO.LOW)
while 1:
x=ser.readline()
print x
Alles anzeigen
Am GPIO 22 hängt der Direction Pin für die Umschaltung Sende / Empfange des RS485 Bausteins. Zum Senden muss dieser auf High sein, zum empfangen auf Low. Ich bekomme mit dem Script allerdings keine Ausgabe. Das einzige was erscheint ist die Ausgabe "successful". Danach tut sich nichts mehr. Die Anfrage wird aber zum Slave geschickt und dieser schickt auch was zurück. Allerdings kommt am Raspberry scheinbar nichts an.
Ist meine Abfrage auf x=ser.readline überhaupt korrekt ?
Danke im Voraus
Gruß Kay Pohl