FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mlrtimbf am 10 August 2019, 14:57:41

Titel: HTTP Request in DOIF mit Variable
Beitrag von: mlrtimbf am 10 August 2019, 14:57:41
Hi,

ich möchte innerhalb eines DOIF gerne einen HTTP-Request abschicken, welcher als Parameter ein Wert eines Readings enthält.

Folgendes habe ich versucht:


([Gosund_Steckdose_1:"ENERGY_Total"]) (
{my $energyTotal = [Gosund_Steckdose_1:ENERGY_Total]};;
{GetHttpFile("10.10.200.5", "/ax?c2=1&c1=EnergyReset3%20$energyTotal")};;
set Gosund_Steckdose_Schreibtisch_EnergyTotal_TMP [Gosund_Steckdose_1:ENERGY_Total];;
)


Leider funktioniert das ganze nicht so richtig.

Hat jemand eine Idee? Danke!
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: Otto123 am 10 August 2019, 15:18:22
Ne Idee?
Also dein Code sieht so komisch aus ??? und ich bin nicht mal sicher ob DOIF mittlerweile so tolerant ist und sowas verstehen würde.

Es geht damit los: im DOIF sind die Trenner zwischen Befehlen einfache Kommas. Du verwendest doppelte Semikolons.
Du verwendest DOIF / setmagic Syntax innerhalb eines Perl Ausdruckes: [Gosund_Steckdose_1:ENERGY_Total]
Ich würde an der Stelle ReadingsVal("Gosund_Steckdose_1","ENERGY_Total",0) verwenden.

Ich würde wahrscheinlich auch kein DOIF dafür verwenden.

Du sagst es funktioniert nicht richtig: Ich könnte mir vorstellen es funktioniert gar nicht und wirft jede Menge Fehler während der Eingabe und im Logfile.

Fangen wir mal mit deinem Eigentlichen an, funktioniert denn dieser Ausdruck in der FHEM Kommandozeile? Du solltest 256 durch einen sinnvollen Wert ersetzen, von dem ich leider keine Ahnung habe:
{my $energyTotal = 256;;GetHttpFile("10.10.200.5", "/ax?c2=1&c1=EnergyReset3%20$energyTotal")}

Gruß Otto
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: mlrtimbf am 10 August 2019, 17:42:16
Hi, danke für deine Hilfe!

Ja, dein "Test-Befehl" funktioniert.
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: Otto123 am 10 August 2019, 18:04:30
Naja dann ändere Deinen Ausführungsteil so um, vielleicht funktioniert das.
({my $energyTotal = ReadingsVal("Gosund_Steckdose_1","ENERGY_Total",0);;GetHttpFile("10.10.200.5", "/ax?c2=1&c1=EnergyReset3%20$energyTotal")},set Gosund_Steckdose_Schreibtisch_EnergyTotal_TMP [Gosund_Steckdose_1:ENERGY_Total])

Kann sein, dass es in DOIF einen einfacheren Syntax gibt...
Aber so wäre der Perl Teil für mich verständlich, der Perl und der FHEM Befehl als zwei Befehle DOIF typisch mit Komma getrennt und dein Trigger sollte funktionieren.
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: mlrtimbf am 10 August 2019, 19:08:38
Super! Danke! Es funktioniert nun alles einwandfrei.
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: Damian am 11 August 2019, 17:06:49
Zitat von: Otto123 am 10 August 2019, 18:04:30
Naja dann ändere Deinen Ausführungsteil so um, vielleicht funktioniert das.
({my $energyTotal = ReadingsVal("Gosund_Steckdose_1","ENERGY_Total",0);;GetHttpFile("10.10.200.5", "/ax?c2=1&c1=EnergyReset3%20$energyTotal")},set Gosund_Steckdose_Schreibtisch_EnergyTotal_TMP [Gosund_Steckdose_1:ENERGY_Total])

Kann sein, dass es in DOIF einen einfacheren Syntax gibt...
Aber so wäre der Perl Teil für mich verständlich, der Perl und der FHEM Befehl als zwei Befehle DOIF typisch mit Komma getrennt und dein Trigger sollte funktionieren.

Ja, im Perlmodus kann man es "eleganter" lösen:

define Gosund DOIF {fhem_set("Gosund_Steckdose_Schreibtisch_EnergyTotal_TMP ".::GetHttpFile("10.10.200.5", "/ax?c2=1&c1=EnergyReset3%20". [Gosund_Steckdose_1:ENERGY_Total]))}


Hier braucht man keine extra Bedingung und keine weiteren Variablen. Der Inhalt von [Gosund_Steckdose_1:ENERGY_Total] steckt direkt in der GetHtpFile-Abfrage und deren Ausgabe steckt direkt im set-Befehl. Wenn man sich [Gosund_Steckdose_1:ENERGY_Total] als ReadingsVal-Funktion vorstellt, ist es reines Perl. Die set-Magic-Angabe ist nur dazu da, dem Modul mitzuteilen, wann es triggern muss.
Titel: Antw:HTTP Request in DOIF mit Variable
Beitrag von: amenomade am 11 August 2019, 21:32:03
Ist gethttpfile blocking oder non-blocking?