FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Qualle am 06 Mai 2020, 22:40:02

Titel: [gelöst] Fehler in DOIF
Beitrag von: Qualle am 06 Mai 2020, 22:40:02
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"))}
Titel: Antw:Fehler in DOIF
Beitrag von: Otto123 am 06 Mai 2020, 23:12:43
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
Titel: Antw:Fehler in DOIF
Beitrag von: Qualle am 07 Mai 2020, 07:52:29
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.
Titel: Antw:Fehler in DOIF
Beitrag von: Damian am 07 Mai 2020, 08:43:11
{(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.
Titel: Antw:Fehler in DOIF
Beitrag von: Otto123 am 07 Mai 2020, 09:24:47
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
Titel: Antw:Fehler in DOIF
Beitrag von: Qualle am 07 Mai 2020, 10:18:38
Ich ziehe wieder meinen Hut  :)

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