HTTP Request in DOIF mit Variable

Begonnen von mlrtimbf, 10 August 2019, 14:57:41

Vorheriges Thema - Nächstes Thema

mlrtimbf

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!

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mlrtimbf

Hi, danke für deine Hilfe!

Ja, dein "Test-Befehl" funktioniert.

Otto123

#3
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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mlrtimbf

Super! Danke! Es funktioniert nun alles einwandfrei.

Damian

#5
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Ist gethttpfile blocking oder non-blocking?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus