Status GPIO in FHEM anzeigen

Begonnen von TobiasR, 26 April 2019, 10:08:01

Vorheriges Thema - Nächstes Thema

TobiasR

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?

Wzut

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
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

TobiasR

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


Wzut

Zitat von: TobiasR am 26 April 2019, 16:39:55
fhemhost = '172.0.0.1'
Sicher oder Zahlendreher von 127.0.0.1 ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

majorshark

Wenn Du MQTT schon im Einsatz hast, kannst Du es mit diesem Client probieren.
https://github.com/flyte/pi-mqtt-gpio
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

TobiasR

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.  :'(

Wzut

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.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

TobiasR

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

Wzut

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 :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

TobiasR

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)


TobiasR

ich habe den Fehler vermutlich gefunden.
Ich habe ein Passwort hinterlegt dass ich mit einbauen muss.

Wie muss ich das hier einbauen?

Wzut

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.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

TobiasR