MyUtils Routine in einer IF-/ELSE Schleife geht nicht

Begonnen von duu75, 03 September 2017, 10:41:10

Vorheriges Thema - Nächstes Thema

duu75

Habe eine komplexere Routine Send_Info in MyUtils für Telegram angelegt, die auch sauber funktioniert.

Nun möchte ich aus einer if-Schleife nach Abfrage von diversen Variablen usw. Schaltvorgänge ausführen und diese MyUtils Routine nutzen.
Es funktioniert aber irgendwie nicht. FHEM Meckert rum bzgl. Klammern.
Ich weiß nur nicht, wie man da die Klammern setzen müsste oder ob der Aufruf der SubRoutine anders gestaltet werden muss.

Dieser Code ist nur zum Testen und nicht der eigentliche. Verhält sich aber leider genau gleich.
Was habe ich falsch gemacht?
Ohne die Routine und nach if und else nur einmal fhem {(" .... ")} funktionert alles


{if  (Value("Dummy1") eq "off")
      {fhem ("set Dummy1 on")} ; {Send_Info("Dummy1 und 2 ON")} ; {fhem ("set Dummy2 on")}
else
      {fhem ("set Dummy2 on")} ; {Send_Info("Dumm2 Timer 10sec.")} ; {fhem ("define aus at +00:00:10 set Dummy2 off")}
}





betateilchen

völlig falsche Klammersetzung bei den geschweiften Klammern.

Lies Dir ein paar perl Grundlagen an, vor allem, wie diese Klammern richtig verwendet werden müssen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tiroso

Da sind 9 geschweifte zu viel.

Zur Hilfe:

if(CONDITION){
   fhem("set lampe off");
   ...Do Something else...
}


Oder als einzeiler:
fhem("set lampe off") if(CONDITION);

duu75

Zitat von: tiroso am 03 September 2017, 10:54:45
Da sind 9 geschweifte zu viel.

Zur Hilfe:

if(CONDITION){
   fhem("set lampe off");
   ...Do Something else...
}


Das stimmt so aber auch nicht!
Wenn dann so hier: https://wiki.fhem.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen

Davon habe ich viele in meiner Config.
Aber wie füge ich da sauber eine SubRoutine ein?

CoolTux

Das stimmte schon, wenn man auf die Feinheiten achtet. Es gibt ein FHEM IF und das normale Perl if, welches im Übrigen keine Schleife ist sondern eine Bedingungsabfrage.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

duu75

Zitat von: CoolTux am 03 September 2017, 12:18:39
Das stimmte schon, wenn man auf die Feinheiten achtet. Es gibt ein FHEM IF und das normale Perl if, welches im Übrigen keine Schleife ist sondern eine Bedingungsabfrage.

Dann muss es aber GROSS geschrieben sein und die Condition mit ([Var] == ON)
Das kleine if ist Perl so wie ich es im Einsatz habe.

tiroso

Ich dachte du bist schon in der myUtils...Da ist einer Perl Syntax...nichts mit define oder notify.

Klar kannst du auch ein if...else haben?
if(CONDITION){
   ...
}else{
   ...
}


Eine Subroutine wo denn einfügen? In die myUtils?
https://wiki.fhem.de/wiki/99_myUtils_anlegen

Aufruf deiner sub innerhalb vonFHEM
{ yoursub() }

duu75

Zitat von: tiroso am 03 September 2017, 12:23:59
Ich dachte du bist schon in der myUtils...Da ist einer Perl Syntax...nichts mit define oder notify.

Klar kannst du auch ein if...else haben?
if(CONDITION){
   ...
}else{
   ...
}


Eine Subroutine wo denn einfügen? In die myUtils?
https://wiki.fhem.de/wiki/99_myUtils_anlegen

Aufruf deiner sub innerhalb vonFHEM
{ yoursub() }

Das NOTIFY welches das if beinhaltet ist ganz normal in der fhem.cfg drin.
Da drin möchte ich aber meine {Sub("...")} aufrufen.
Wie muss ich das da reinbasteln?
Komme mit der Klammerei nicht klar und finde dazu auch nichts in irgendwelchen Perldokus.

CoolTux

Sorry ich hatte mich da verschaut. Das IF war aus Deiner Überschrift.
Also das was tiroso schrieb stimmte aber dennoch.


{ if  (Value("Dummy1") eq "off") {
      fhem ("set Dummy1 on; Set Dummy2 on");
      Send_Info("Dummy1 und 2 ON") ; 
   } else {
      fhem ("set Dummy2 on; define aus at +00:00:10 set Dummy2 off");
      Send_Info("Dumm2 Timer 10sec.");
   }
}


Hoffe das passt so. Aber bitte nicht in der cfg rumpfuschen sondern über FHEMWEB das ganze machen. Da hast auch Syntaxprüfung dabei.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

tiroso

Ich würde am deiner stelle nicht in der cfg rumbasteln...alles was du dort machst zerschiesst dir schneller die Konfig als du gucken kannst.

Mach es besser über FHEMWEB.
Du kannst deine Sub aus einem Notify ansprechen indem du diese dort...wie du es gerade geschrieben hast...aufrufst.. oder hast du Probleme mit den Parametern die du an diese Sub übergeben willst? Oder mit dem Return Wert.
Ich steige leider noch nicht so ganz dahinter was dein Ziel ist.

tiroso

Ach du willst einfach nur etwas Perl Code ausführen? Dann hat das aber nichts mit der myUtils zu tun.

duu75

Zitat von: tiroso am 03 September 2017, 12:37:11
Ach du willst einfach nur etwas Perl Code ausführen? Dann hat das aber nichts mit der myUtils zu tun.

Die Sub muss ich ja mit Schweifklammer aufrufen aus FHEM heraus.
Ich bin aber im Notify ja durch fhem{ ("......")}  schon auf "Perlebene" und muss da drinnen die Sub aufrufen.
Das ist mein Synthaxproblem.

tiroso

fhem(...) selber ist eine Systeme eigene Funktion. Du musst schon dafür nach Perl wechseln...
{ fhem("...") }

duu75

Zitat von: tiroso am 03 September 2017, 12:48:32
fhem(...) selber ist eine Systeme eigene Funktion. Du musst schon dafür nach Perl wechseln...
{ fhem("...") }

Und wie müsste ich dann meinen Code aus dem ersten Post anpassen, damit die jeweils drei definierten Befehle nach dem if oder nach dem else ausgeführt werden?

CoolTux

Zitat von: CoolTux am 03 September 2017, 12:34:01
Sorry ich hatte mich da verschaut. Das IF war aus Deiner Überschrift.
Also das was tiroso schrieb stimmte aber dennoch.


{ if  (Value("Dummy1") eq "off") {
      fhem ("set Dummy1 on; Set Dummy2 on");
      Send_Info("Dummy1 und 2 ON") ; 
   } else {
      fhem ("set Dummy2 on; define aus at +00:00:10 set Dummy2 off");
      Send_Info("Dumm2 Timer 10sec.");
   }
}


Hoffe das passt so. Aber bitte nicht in der cfg rumpfuschen sondern über FHEMWEB das ganze machen. Da hast auch Syntaxprüfung dabei.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net