Hauptmenü

[gelöst] Fehler in DOIF

Begonnen von Qualle, 06 Mai 2020, 22:40:02

Vorheriges Thema - Nächstes Thema

Qualle

Hallo,
ich möchte durch einen Dummy Switch und den State einer SetList einen Webbefehl absetzen, Der Dummy aktiviert DOIF ( plus der Wert einer SetList. Der erste Befehl soll mir eine Variable erstellen, die später in den Webbefehlen verwendet wird. Aber genau das kriege ich nicht hin. Setze ich statt der Variable einen Wert ein, funktioniert alles einwandfrei. Setze ich die Variable ein, bekomme ich folgende Fehlermeldung:

DOIF EspCallOnVornNord error: {(my $SprinklerTimer = Value("Laufzeit") * 60),(GetHttpFile("192.168.100.232", "/control?cmd=longpulse,12,1,$SprinklerTimer")),(GetHttpFile("192.168.100.232", "/control?cmd=longpulse,14,1,$SprinklerTimer"))}: Global symbol "$SprinklerTimer" requires explicit package name (did you forget to declare "my $SprinklerTimer"?) at (eval 16931) line 1. Global symbol "$SprinklerTimer" requires explicit package name (did you forget to declare "my $SprinklerTimer"?) at (eval 16931) line 1. 

([SprinklerOnOff:"on"] and Value("Sprinkler") eq "VornNord" ) {(my $SprinklerTimer = Value("Laufzeit") * 60),(GetHttpFile("192.168.100.232", "/control?cmd=longpulse,12,1,$SprinklerTimer")),(GetHttpFile("192.168.100.232", "/control?cmd=longpulse,14,1,$SprinklerTimer"))}

Otto123

Hi,

der Syntax im Ausführungsteil ist falsch:
Es sind unnötige Klammern um die Perlbefehle.
Die Trennung von Perlbefehlen sind ; und nicht ,

Genaueres über den speziell Dinge im DOIF musst Du in der Doku nachschauen.

Normalerweise kannst Du den Ausführungsteil einfach in der FHEM Kommandozeile testen. Dabei musst Du aber die ; verdoppeln!

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

Qualle

Hallo Otto,
laut Doku und Forum müssen hier Kommas stehen. Und Befehle, die selbst Kommas enthalten, müssen deshalb geklammert werden (https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen).

Semikolon habe ich probiert, geht leider nicht (auch nicht doppelt)
Der Ausführungsteil funktioniert einwandfrei in der Kommandozeile wenn ich Werte statt Variablen drin habe. Ersetze ich die Werte durch Vars kommt dieser Fehler:

Global symbol "$SprinklerTimer" requires explicit package name (did you forget to declare "my $SprinklerTimer"?) at (eval 18128) line 1.

Damian

{(my $SprinklerTimer = Value("Laufzeit") * 60),(GetHtt

Komma an dieser Stelle ist definitiv falsch. Ebenfalls solltest du diese Klammern weglassen. Da du mit { auf die Perl-Ebene gewechselt hast, gilt nur noch Perl und Komma an dieser Stelle ist nicht perl-konform. Das sollte besser funktionieren (im DEF-Editor):


{my $SprinklerTimer = Value("Laufzeit") * 60;GetHttpFile("192.168.100.232", "/control?cmd=longpulse,12,1,$SprinklerTimer");GetHttpFile("192.168.100.232", "/control?cmd=longpulse,14,1,$SprinklerTimer")}


Ansonsten gleich DOIF-Perl verwenden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Zitat von: Qualle am 07 Mai 2020, 07:52:29
laut Doku und Forum müssen hier Kommas stehen. Und Befehle, die selbst Kommas enthalten, müssen deshalb geklammert werden (https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen).
Dies gilt für FHEM Befehle! Du verwendest Perl Befehle.

Wenn Du den korrigierten Code von Damian noch mit doppelten Semikolon bestückst, wird er auch in der FHEM Kommandozeile funktionieren.

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

Qualle

Ich ziehe wieder meinen Hut  :)

Danke Damian, Danke Otto, genauso funktioniert es. Irgendwann verstehe ich das vielleicht auch mal.