Definition at mit mehreren Funktionen

Begonnen von flipse, 01 August 2020, 12:15:03

Vorheriges Thema - Nächstes Thema

flipse

Hallo,
bis vor kurzem lief mein at noch wirklich gut. Auf einmal aber nicht mehr und ich gehe von einem Syntaxfehler aus, finde ihn aber nicht.
Vielleicht könnt ihr mir helfen

at Definition:

Wassersprinkler:state

{
if (ReadingsVal('Wassersprinkler', 'state', '') eq "on")
{
Log 1, "[Wassersprinkler_n] Wassersprinkler eingeschaltet: 1. Ventil öffnen, 2. Pumpe einschalten.";;
SendMail("[INFO] Wassersprinkler eingeschaltet ". $EVENT, "Wassersprinkler eingeschaltet: 1. Ventil öffnen, 2. Pumpe einschalten. Laufzeitbegrenzung 20 Min definiert");;

fhem 'set ZWave_SW_Zisterne_Ventil.01 on';;
fhem 'set ZWave_SW_Zisterne_Garten on';;

Log 1, "[Wassersprinkler_n] Laufzeitbegrenzung 20 Min wird eingerichtet";;
fhem 'define at_Sprinkler_Laufzeitbegrenzung at +00:20:00 {Log 1, "[Wassersprinkler_n] Laufzeitbegrenzung erreicht. Beende Wassersprinkler"};;set Wassersprinkler off;;{SendMail("[INFO] Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.","Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.")}';;
}
else
{
Log 1, "[Wassersprinkler_n] Wassersprinkler ausgeschaltet: 1. Pumpe ausschalten, 2. Ventil nach 5 Minuten schließen";;
fhem 'set ZWave_SW_Zisterne_Garten off';;
fhem 'define Zisterne_Ventil_Schliessen at +00:05:00 {Log 1, "[Wassersprinkler_n] Schließe Ventil"};;set ZWave_SW_Zisterne_Ventil.01 off;;{SendMail("[INFO] Wassersprinkler ausschalten: Ventil geschlossen.","Ventil wurde zeitverzögert geschlossen, damit Rohre leerlaufen können.")}';;
SendMail("[INFO] Wassersprinkler ausschalten ". $EVENT, "Wassersprinkler ausschalten: 1. Pumpe ausschalten, 2. Ventil nach 5 Minuten schließen");;
}
}



Fehler1:


2020.08.01 06:31:51 3: eval: {Log 1, "[Wassersprinkler_n] Schließe Ventil"};set ZWave_SW_Zisterne_Ventil.01 off;{SendMail("[INFO] Wassersprinkler ausschalten: Ventil geschlossen.","Ventil wurde zeitverzögert geschlossen, damit Rohre leerlaufen können.")}

2020.08.01 06:31:51 1: ERROR evaluating {Log 1, "[Wassersprinkler_n] Schließe Ventil"};set ZWave_SW_Zisterne_Ventil.01 off;{SendMail("[INFO] Wassersprinkler ausschalten: Ventil geschlossen.","Ventil wurde zeitverzögert geschlossen, damit Rohre leerlaufen können.")}: syntax error at (eval 670057) line 1, near ".01 off"

2020.08.01 06:31:51 3: Zisterne_Ventil_Schliessen: syntax error at (eval 670057) line 1, near ".01 off"



2020.08.01 12:33:04 1: ERROR evaluating {Log 1, "[Wassersprinkler_n] Laufzeitbegrenzung erreicht. Beende Wassersprinkler"};;set Wassersprinkler off;;{SendMail("[INFO] Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.","Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.");;}:

Bareword "off" not allowed while "strict subs" in use at (eval 701788) line 1.

2020.08.01 12:33:04 3: at_Sprinkler_Laufzeitbegrenzung: Bareword "off" not allowed while "strict subs" in use at (eval 701788) line


Könnt ihr mir helfen?

Otto123

#1
Hi,

Du mischst Perl und FHEM Befehlein einem Kommando. Das geht so in der Art nicht, bzw. die Funktion ist nicht garantiert.
https://fhem.de/commandref_DE.html#command Letzer Satz im Abschnitt
Ich bezweifle, dass das je funktioniert hat.


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

flipse

Zitat von: Otto123 am 01 August 2020, 13:39:10
Hi,

Du mischst Perl und FHEM Befehlein einem Kommando. Das geht so in der Art nicht, bzw. die Funktion ist nicht garantiert.
https://fhem.de/commandref_DE.html#command Letzer Satz im Abschnitt

Gruß Otto

Ich habe es nun mit vielen Versuchen nach dem try and error Prinzip geschafft. Wenn die Perl Befehle zuerst kommen und dann fhem Befehl, dann klappt es gut.

Otto123

#3
So kann es  gehen
{Log 1, "[Wassersprinkler_n] Schließe Ventil";;fhem("set ZWave_SW_Zisterne_Ventil.01 off");;SendMail("[INFO] Wassersprinkler ausschalten: Ventil geschlossen.","Ventil wurde zeitverzögert geschlossen, damit Rohre leerlaufen können.")}

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

flipse

Zitat von: Otto123 am 01 August 2020, 13:44:26
So kann es  gehen
{Log 1, "[Wassersprinkler_n] Schließe Ventil";;fhem("set ZWave_SW_Zisterne_Ventil.01 off");;SendMail("[INFO] Wassersprinkler ausschalten: Ventil geschlossen.","Ventil wurde zeitverzögert geschlossen, damit Rohre leerlaufen können.")}
so funktioniert es gerade bei mir:

fhem 'define at_Sprinkler_Laufzeitbegrenzung at +00:00:10 {Log 1, "[Wassersprinkler_n] Laufzeitbegrenzung erreicht. Beende Wassersprinkler"};;{SendMail("[INFO] Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.","Laufzeitbegrenzung erreicht. Wassersprinkler ausschalten.")};;set Wassersprinkler off;';;

Otto123

Auch wenn du der Meinung bist es geht jetzt: Es besteht kein Rechtsanspruch auf die Beibehaltung von Fehlern :)


Also mach es besser so wie es garantiert ist.
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