Hallo,
ich habe auf meinem Raspberry ein Programm zru Solaranlagensteuerung laufen.
Das in Python geschriebene Programm läuft eigenständig.
Jetzt versuche ich in der FHEM Oberfläche den Status der GPIO Ausgänge anzeigen zu lassen.
Ich habe dafür die GPIO's als Ausgänge definiert und dachte dass sich der Rest, die Statusanzeige ob "H" oder "L", dann automatisch ergibt. Tut's aber leider nicht.
Der "Pinlevel" ändert sich nur wenn ich die Seite neu aktualisiere.
Kann ich in FHEM eine automatische Abfrage der Ausgänge einschalten so dass ich immer den Status aktuell bekomme?
Zitat von: TobiasR am 26 April 2019, 10:08:01
Das in Python geschriebene Programm läuft eigenständig.
dann würde ich es um ein paar Zeilen erweitern und direkt nach dem Python schalten des GPIO via telnet einen entsprechenden FHEM Dummy umschalten.
So ersparst du dir ein Polling der GPIOs und hast sofort nach dem schalten den aktuellen Status
Das hört sich gut an.
Ich habe mal gegoogelt und ein Codebeispiel gefunden:
#!/usr/bin/python
import telnetlib
send_cmd = '{"Test")}'
fhemhost = '172.0.0.1'
fhemport = 7072
try:
tn = telnetlib.Telnet(fhemhost, int(telnetPort))
tn.write(send_cmd + "\n")
tn.write("quit\n")
ret = tn.read_all()
tn.close()
except:
print "telnet exception."
print ret
leider bekomme ich aber nichts angezeigt. Weder print im Programm noch der Logfile im FHEM zeigt mir etwas an.
tn = telnetlib.Telnet(fhemhost, int(telnetPort))
Muss ich diese Zeile vielleich für den Empfänger anpassen?
Internals:
CONNECTS 12
DEF 7072 global
FD 6
NAME telnetPort
NR 3
NTFY_ORDER 50-telnetPort
PORT 7072
STATE Initialized
TYPE telnet
Attributes:
room System
Zitat von: TobiasR am 26 April 2019, 16:39:55
fhemhost = '172.0.0.1'
Sicher oder Zahlendreher von 127.0.0.1 ?
Wenn Du MQTT schon im Einsatz hast, kannst Du es mit diesem Client probieren.
https://github.com/flyte/pi-mqtt-gpio (https://github.com/flyte/pi-mqtt-gpio)
Hallo,
@Wzut: vielen Dank, aber an dem Zahlendreher lag es leider nicht
@majorshark: Mit MQTT habe ich bisher nicht gearbeitet. Danke aber für das umfangreiche Programmbeispiel. Ich möchte es bei mir ganz schlank halten
Leider habe ich keinen Erfolg.
Muss ich im FHEM noch etwas einrichten?
Ich ging bisher davon aus dass ich meinen "Test" im Event Monitor sehen würde.
Im Programm selbst lande ich immer wieder im except. :'(
Klappt es denn aus der bash mit einem echten Telnet Client ?
Ich habe leider sehr wenig Ahnung von Python , dein Beispiel erzeugt bei mir leider auch nur eine telnet exception
Nur Test würde ich dann auch nicht senden sondern eher "set Test on" wenn du bereits einen dummy mit Namen Test angelegt hast.
kannst du mir sagen was ich in der bash eingeben muss?
Ich habe es von Windows aus mit "telnet 192.168.0.119 7072 "test" versucht. Leider kenne ich mich damit gar nicht aus
Ich habe deine Fehler gefunden , folgendes läuft bei mir ohne Fehler :
#!/usr/bin/python
import telnetlib
send_cmd = "set Button1 on"
fhemhost = '127.0.0.1'
fhemport = 7072
try:
tn = telnetlib.Telnet(fhemhost, int(fhemport))
tn.write(send_cmd + "\n")
tn.write("quit\n")
ret = tn.read_all()
tn.close()
except:
print "telnet exception."
mein dummy nennt sich halt Button1 und er schaltet um :)
Hallo Wzut,
vielen Dank. Aber leider kommt noch immer nichts durch:
Zitat>>> ================================ RESTART ================================
>>>
telnet exception.
>>>
Muss ich hier etwas anpassen?
Zitattn = telnetlib.Telnet(fhemhost, int(fhemport))
(das war copy-paste)
ich habe den Fehler vermutlich gefunden.
Ich habe ein Passwort hinterlegt dass ich mit einbauen muss.
Wie muss ich das hier einbauen?
a. entweder vor der Zeile tn.write(send_cmd + "\n") mit tn.write erst das Passwort schicken
oder
b. noch ein Telnet Device anlegen auf einem anderen Port ohne PW und nur für localhost und ggf. auch die erlaubten Kommandos beschränken.
Super, Danke!