Hallo!
Ich verwende FHEM auf einem Raspberry Pi zur Heizungssteuerung.
Ferner habe ich ein Phyton-Programm geschrieben, das eine Alarmanlage darstellt.
Meine Frage:
Wie bekomme ich Informationen vom Phyton-Programm ins FHEM und umgekehrt?
Beispiel:
Mittels FHEM möchte ich die Alarmanlage zeitgesteuert ein- oder ausschalten, dazu müsste eine boolsche Variable in Phyton gesetzt werden.
Umgekehrt würde ich gerne in der Alarmanlage die FS20 Tür- und Fensterkontakte abfragen.
Gibt's da eine Lösung?
Danke im Voraus für eine Antwort!
Andi
Du könntest z.B. aus Python heraus eine Datei mit dem aktuellen Status erzeugen und die dann per FHEM/Perl wieder einlesen.
Welches Format diese Datei hat, ist ganz Dir überlassen. Im Besten Falle vielleicht JSON, aber auch XML wäre okay.
Du könntest Die benötigten Informationen aus Python heraus auch in eine DB schreiben und aus FHEM/Perl wieder einlesen.
Möglichkeiten gibt es denke ich reichlich.
Der Kreativität sind hier kaum Grenzen gesetzt.
Gruß
Dan
Ich habe 'mal soetwas benutzt :
import telnetlib
import json
def fhem_get_json(ip, port, telnetpasswd, querystr):
ret = ""
try:
tn = telnetlib.Telnet(ip, int(port))
if telnetpasswd:
telret = tn.read_until('Password: ',2)
if telret == 'Password: ':
tn.write(telnetpasswd + "\n\r")
telret = tn.read_until('fhem>',2)
tn.write("jsonlist2 TYPE=" + querystr + "\n")
tn.write("quit\n")
ret = tn.read_all()
tn.close()
except:
xbmc.log("fhem: telnet exception.")
ret.decode('utf-8')
return ret.replace('Bye...','')
Damit sind alle fhem-Befehle (hier jsonlist2) möglich.
Gruß
Hans
Statt xbmc.log natürlich eine print-Anweisung. Ist aus einem xbmc-Addon.
Zitat von: Hans Franz am 12 September 2016, 19:03:03
Ich habe 'mal soetwas benutzt :
import telnetlib
import json
def fhem_get_json(ip, port, telnetpasswd, querystr):
ret = ""
try:
tn = telnetlib.Telnet(ip, int(port))
if telnetpasswd:
telret = tn.read_until('Password: ',2)
if telret == 'Password: ':
tn.write(telnetpasswd + "\n\r")
telret = tn.read_until('fhem>',2)
tn.write("jsonlist2 TYPE=" + querystr + "\n")
tn.write("quit\n")
ret = tn.read_all()
tn.close()
except:
xbmc.log("fhem: telnet exception.")
ret.decode('utf-8')
return ret.replace('Bye...','')
Damit sind alle fhem-Befehle (hier jsonlist2) möglich.
Gruß
Hans
Statt xbmc.log natürlich eine print-Anweisung. Ist aus einem xbmc-Addon.
Das ist auch eine Möglichkeit.
An Möglichkeiten sollte es nicht mangeln. Man muss nur etwas kreativ sein... ;)
Irgendeine Schnittstelle muss halt her...
Gruß
Dan
Ich mach es zwar nicht über python, sondern über die bash, aber im Prinzip wie der Vorredner:
Proggi -> fhem
- Über telenet direkt "reinpushen", also fhem-Befehle setzen (z.B. "set Test on")
fhem -> Proggi
- Fhem startet ein Script, welches Dein Proggi ..... ich weiß jetzt nur nicht, ob es als Deamon läuft oder nicht, d.h. was es für Interactionsmöglichkeiten gibt.
Wie der erste redner schrieb, über eine Datei und pollen, halte ich für solche in Problem .... ineffizient. Warrum soll man ein Eventbasiertes System mit pollen beschäftigen, wenn man ein "Event" über telnet senden kann?