Hauptmenü

Fhem und Python

Begonnen von Andi.Riese, 12 September 2016, 18:11:49

Vorheriges Thema - Nächstes Thema

Andi.Riese

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


DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Hans Franz

#2
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.
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Wernieman

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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html