Werte von Python an FHEM übergeben

Begonnen von stefan-dd, 19 August 2016, 19:20:17

Vorheriges Thema - Nächstes Thema

stefan-dd

Hallo,
ich habe ein Python Script, was mir den Füllstand der Zisterne ausliest. Dieses Script zeigt mir den Füllstand in Liter an. Diesen Wert möchte ich in FHEM darstellen.
Das Script soll einmal in der Stunde aufgerufen werden und der Inhalt soll angezeigt werden. Wie macht man so etwas? Was ist zu beachten? Meine Vorstellung war, dies von FHEM aufzurufen und auf den Rückgabewert zu warten, der dann als Reading dargestellt wird. Wie muss das Python aussehen, damit die Werte übergeben werden können?

Crawler

Das einfachste ist wenn du python eine Datei schreiben lässt die fhem wieder einliest.
Direkte Übergabe ist meines Wissens nicht möglich da Perl/Python durch unterschiedliche Interpreter ausgeführt werden und darum auch getrennte Speicherbereiche im Ram bekommen.

Ich würde versuchen das Python in Perl umzuschreiben ist die schönste Lösung.
Kannst mal das Python script zeigen?
FHEM auf Raspi + HMLan + 14 Aktoren + OBIS(Strom) über GPIO

justme1968

natürlich kann man auch die rückgabe auswerten. das hat aber potentiell den nachteil das fhem blockiert.

das einfachste ist aus dem python script fhem aufzurufen und ein setreading auf ein dummy device zu machen.

komplett auf perl umstellen ist zwar schöner aber etwas mehr aufwand.

schau dir auch mal das customreadings modul an.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ernst1024

#3
Ich habe ein C Programm und schreibe die Werte die ich übergeben möchte in eine Datei nach dem Schema

setreading <device> <reading> <value>

in deinem Fall könnte das so aussehen. Das schreibst du z.B nach Zisterne.cfg
setreading Zisterne Fuellstand 1500

Starten kannst du dein python skript über ein at und dem system befehl (bsp anhand eines bash scripts)

define at_Zisterne *23:59:50 {system("/opt/fhem/./zisterne.sh")}

hierbei muss man evtl auf die Zugriffsrechte achten.
Schlussendlich liest du Zisterne.cfg ebenfalls per at ein (die beiden at's kann man evtl auch in eins packen)

define at_incl_Zisterne at *23:59:55 include /home/pi/Zisterne.cfg

Nachtrag: Die Pfade musst du natürlich anpassen und das Device 'Zisterne' vorher anlegen.
Gruß Ernst

justme1968

um ein shellscript oder ein anderes externes programm aufzurufen braucht man kein perl und keinen system aufruf. "/opt/fhem/xyz.sh"reicht völlig. ist nicht blockierend und eventuelle ausgaben landen sogar im fhem log.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ernst1024

Zitat von: justme1968 am 20 August 2016, 16:23:47
um ein shellscript oder ein anderes externes programm aufzurufen braucht man kein perl und keinen system aufruf. "/opt/fhem/xyz.sh"reicht völlig. ist nicht blockierend und eventuelle ausgaben landen sogar im fhem log.
man lernt nie aus, Danke
Gruß Ernst

stefan-dd

Das Problem mit der Zisterne habe ich so gelöst:
os.system('perl /opt/fhem/fhem.pl 7072 "setreading Zisterne_Inhalt wasserpegel '+str(distanceRet)+'"')
define Zisterne_Inhalt dummy
attr Zisterne_Inhalt room Zisterne
attr Zisterne_Inhalt stateFormat wasserpegel
attr Zisterne_Inhalt userReadings wasserpegel
define at_Zisterne_Inhalt at +*00:15:00 {system 'sudo /usr/bin/python /home/pi/zisterne/ultraschallsensor_aktuell.py &'}
attr at_Zisterne_Inhalt room Zisterne
define Zisterne_Inhalt_Reading readingsGroup Zisterne_Inhalt:<%Inhalt>,wasserpegel Zisterne_Inhalt_Reading
attr Zisterne_Inhalt_Reading nonames 1
attr Zisterne_Inhalt_Reading room Zisterne
attr Zisterne_Inhalt_Reading valueFormat { "wasserpegel" =>  "%.0f l" }

Funktioniert Tadellos.

Es soll noch ein weiterer Wert von meiner Toranlage eingelesen werden. Dieser soll aus einer log Datei gelesen werden. Der Wert sieht so aus:
2016-08-22_22:14:30 Pforte geschlossen.

Hier habe ich die Variante mit "myReadings" in Angriff genommen. Der Wert wird erkannt. Nun mangelt es an meinen Kenntnissen den Wert weiter zu verarbeiten. Ziel ist es, einen Button mit "set Pforte auf" oder "set Pforte zu" zu aktivieren oder deaktivieren. Ich denke, ein Notify muss angelegt werden, was die Schaltfunktion, entsprechend dem Status offen/geschlossen schaltet. Wie wird der Wert aber selektiert?

satprofi

Hallo.
ich hole den Thread nochmals hoch, wegen Übergabe an FHEM.
Wie stelle ich es an die Daten auf einen anderen Rechner zu übergeben, wo fhem läuft.
Ich habe raspi bei solaranlage, der mir die daten ausliest, aber fhem läuft auf anderen raspi. von meinem Linux Receiver schicke ich commandos per
echo set Xpeed_on on | nc 192.168.0.49 7072
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram