FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stefan-dd am 19 August 2016, 19:20:17

Titel: Werte von Python an FHEM übergeben
Beitrag von: stefan-dd am 19 August 2016, 19:20:17
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?
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: Crawler am 20 August 2016, 11:55:43
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?
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: justme1968 am 20 August 2016, 13:01:10
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
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: ernst1024 am 20 August 2016, 15:56:04
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.
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag 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.
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: ernst1024 am 20 August 2016, 17:56:05
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
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: stefan-dd am 22 August 2016, 22:54:02
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?
Titel: Antw:Werte von Python an FHEM übergeben
Beitrag von: satprofi am 15 August 2017, 13:19:07
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