Statuswert in Python Auftruf nutzen (Gelöst)

Begonnen von pi_fhem, 27 Februar 2016, 16:25:46

Vorheriges Thema - Nächstes Thema

pi_fhem

Hallo in die Runde,
ich bin gerade dabei, die Steuerung meiner Lüftungsanlge mit Hilfe von FHEM zu realisieren.
Dank google und diesem Forum komme ich auch recht gut voran...

An eine Stelle komme ich aber wirklich nicht weiter:

Ich möchte aus FHEM heraus ein Python Script aufrufen und diesem den Wert (STATE) eines Dummy-Schalters als Argument übergeben, wenn sich dieser ändert.
Hier ist der Code des verwendeten notifys:

define Lueft_pow notify Lueftung_Pow {system('python /opt/fhem/test_exe.py XX&');;}


Des Aufruf des Scriptes klappt soweit, allerdings habe ich keine Ahnung, wie ich den State-Wert (ansttatt XX im Code) übergeben kann.?

Kann mir vllt jemand helfen?

Schöne Grüße
T

CoolTux

Würde es denn gehen wenn Du den Wert erst in eine Variable ein liest und dann die Variable beim Aufruf mit über gibst?


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Zitat von: pi_fhem am 27 Februar 2016, 16:25:46
Hallo in die Runde,
ich bin gerade dabei, die Steuerung meiner Lüftungsanlge mit Hilfe von FHEM zu realisieren.
Dank google und diesem Forum komme ich auch recht gut voran...

An eine Stelle komme ich aber wirklich nicht weiter:

Ich möchte aus FHEM heraus ein Python Script aufrufen und diesem den Wert (STATE) eines Dummy-Schalters als Argument übergeben, wenn sich dieser ändert.
Hier ist der Code des verwendeten notifys:

define Lueft_pow notify Lueftung_Pow {system('python /opt/fhem/test_exe.py XX&');;}


Des Aufruf des Scriptes klappt soweit, allerdings habe ich keine Ahnung, wie ich den State-Wert (ansttatt XX im Code) übergeben kann.?

Kann mir vllt jemand helfen?

Schöne Grüße
T
Hi,
vielleicht hilft das: Stringverkettung in Perl geht mit ".". Werte von Readings bekommt man mit "ReadingsVal(<device>,<reading>,<wert_falls_fehler>)".
Gruß,
   Thorsten
FUIP

pi_fhem

Vielen Dank für Eure schnelle Hilfe.
Ich habe mit der ReadingsVal-Funkion schon rumprobiert:

define Lueft_pow notify Lueftung_Pow {system('python /opt/fhem/test_exe.py ReadingsVal("Lueftung_Pow","state","")&');;}

Allerdings ohne Erfolg.
Sicherlich ist der Funktionsaufruf innerhalb der system-Funktion fehlerhaft.

Leier weiß ich auch nicht, wie ich den State wert korrekt in eine Variable packe (my $wert = ???) und diese anschließend im Funktionsaufruf nutze.

Schöne Grüße
T

Thorsten Pferdekaemper

Zitat von: pi_fhem am 27 Februar 2016, 16:46:37
Vielen Dank für Eure schnelle Hilfe.
Ich habe mit der ReadingsVal-Funkion schon rumprobiert:

define Lueft_pow notify Lueftung_Pow {system('python /opt/fhem/test_exe.py ReadingsVal("Lueftung_Pow","state","")&');;}

Allerdings ohne Erfolg.
Sicherlich ist der Funktionsaufruf innerhalb der system-Funktion fehlerhaft.

Leier weiß ich auch nicht, wie ich den State wert korrekt in eine Variable packe (my $wert = ???) und diese anschließend im Funktionsaufruf nutze.

Schöne Grüße
T
Wie gesagt: String-Verkettung geht mit ".".

define Lueft_pow notify Lueftung_Pow {system('python /opt/fhem/test_exe.py '.ReadingsVal("Lueftung_Pow","state","").' &');;}

Gruß,
   Thorsten
FUIP

ernst1024


Ich hatte etwas ähnliches: im ersten Teil wird der Rückgabewert der Funktion 'myAverage' in die variable $avg geschrieben und  dann im zweiten Teil , also ab system...... mit übergeben. Ich weiss alerdings nicht ob $avg in meinem Fall nur innerhalb des at's zur Verfügung steht oder global. Vieleicht ja als Ansatz?


define t_avg_log1 at *23:59:51 { my $avg = myAverage("86400", "logdb", "f_Aussen:temperature::");;;; system("echo f_Aussen Temp Average: $avg C >> logs.log") }
Gruß Ernst

pi_fhem

Hallo,
vielen Dank für die Hilfe. Thorsten sein Coder hat mein Problem gelöst.

@Ernst:
Dei Beispiel werde ich mir auch mal anschauen...

Schöne Grüße
T