FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TWART016 am 05 Januar 2016, 16:48:02

Titel: Mehrere IF
Beitrag von: TWART016 am 05 Januar 2016, 16:48:02
Hallo,

wenn ich nach Hause komme (homestatus:home) wird abgefragt, ob es noch hell ist (Twilight). Wenn ja, gehen Steckdosen an, ansonsten gehen Steckdosen und LED's an. Das funktioniert auch schon ohne Probleme mit diesem Code:
define AtHome notify Homestatus:home {if (Value("LichtWetter") < 9 && Value("Homestatus") eq "home") {fhem ("set PCT06 on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")} else {fhem ("set PCT06 on;;set LED on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")}}

Jetzt hätte ich aber noch gerne eine zusätzliche Abfrage: nur wenn der Dummy "NichtSchalten" auf off ist, sollen die Befehle oben ausgeführt werden. Wenn der state on ist, soll gar nichts passieren. Wie müsste der Code dann aussehen?

Gibt es evtl. eine Möglichkeit den Code zu vereinfach, z.B. durch eine neue Zeile?


Freundliche Grüße
TWART016
Titel: Antw:Mehrere IF
Beitrag von: Ellert am 05 Januar 2016, 17:43:07
Einfacher geht es m.E. mit einem DOIF http://fhem.de/commandref_DE.html#DOIF , etwa so:
DOIF ([homestatus] eq "home" and [?Twilight] eq "dunkel" and [?Nichtschalten] eq "off") (mache dies)
DOELSEIF [homestatus] eq "home" and [?Twilight] eq "hell and [?Nichtschalten] eq "off"" (mache das)
DOELSE (mache nix)

Syntax unvollständig und daher nicht getestet.
Titel: Antw:Mehrere IF
Beitrag von: TWART016 am 05 Januar 2016, 18:34:59
Ich habe jetzt mal das DOIF eingerichtet.

Ist der Wert der angezeigt wird das, was geschalten wird? Bei mir steht cmd_2
ist es also das DOELSEIF?

cmd_1 DOIF
cmd_2 DOELSEIF
cmd_3 DOELSE?
Titel: Antw:Mehrere IF
Beitrag von: Ellert am 05 Januar 2016, 18:43:49
Ja.
Titel: Antw:Mehrere IF
Beitrag von: Wernieman am 06 Januar 2016, 09:55:34
Mitt einem If un dem FHEM-Eigenen Editor ist dieses auch durchführbar. Mann sollte "nur", für die Lesbarkeit, es in mehrere Zeilen einschreiben.

P.S. poll eigentlich DOIF oder ist es "eventbasiert"?
Titel: Antw:Mehrere IF
Beitrag von: Ellert am 06 Januar 2016, 10:24:56
Zitat von: Wernieman am 06 Januar 2016, 09:55:34
...

P.S. poll eigentlich DOIF oder ist es "eventbasiert"?
Beide ist möglich
Eventbasiert: http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Zeitgesteuert: http://fhem.de/commandref_DE.html#DOIF_Relative_Zeitangaben
Titel: Antw:Mehrere IF
Beitrag von: Wernieman am 06 Januar 2016, 12:18:40
Auch wenn es jetzt OT wird, war eher die "interne" Frage, d.h. macht DOIF es per polling, oder eben "event-gesteuert"?
Titel: Antw:Mehrere IF
Beitrag von: Ellert am 06 Januar 2016, 12:32:06
DOIF reagiert auf Events. Du kannst also z.B. nicht auf ein Reading triggern, dass ohne Event aktualisiert wird.
Titel: Antw:Mehrere IF
Beitrag von: Wernieman am 06 Januar 2016, 12:34:48
Danke für die Aussage

War auch eher die Frage bezüglich der "Systemlast". Viele DOIF verbraten damit eben nicht mehr Leistung, wenn eben "getriggert" und nicht gepollt wird.
Titel: Antw:Mehrere IF
Beitrag von: CoolTux am 06 Januar 2016, 12:59:27
Zitat von: TWART016 am 05 Januar 2016, 16:48:02
Hallo,

wenn ich nach Hause komme (homestatus:home) wird abgefragt, ob es noch hell ist (Twilight). Wenn ja, gehen Steckdosen an, ansonsten gehen Steckdosen und LED's an. Das funktioniert auch schon ohne Probleme mit diesem Code:
define AtHome notify Homestatus:home {if (Value("LichtWetter") < 9 && Value("Homestatus") eq "home") {fhem ("set PCT06 on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")} else {fhem ("set PCT06 on;;set LED on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")}}

Jetzt hätte ich aber noch gerne eine zusätzliche Abfrage: nur wenn der Dummy "NichtSchalten" auf off ist, sollen die Befehle oben ausgeführt werden. Wenn der state on ist, soll gar nichts passieren. Wie müsste der Code dann aussehen?

Gibt es evtl. eine Möglichkeit den Code zu vereinfach, z.B. durch eine neue Zeile?


Freundliche Grüße
TWART016


define AtHome notify Homestatus:home {
                                   if Value("nichtschalten") eq "off" {
                                       if (Value("LichtWetter") < 9 && Value("Homestatus") eq "home") {
                                           fhem ("set PCT06 on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")} else {fhem ("set PCT06 on;;set LED on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")
                                           }
                                   }
                            }
Titel: Antw:Mehrere IF
Beitrag von: TWART016 am 06 Januar 2016, 18:42:57
Hallo,

CoolTux,

Zitat von: CoolTux am 06 Januar 2016, 12:59:27

define AtHome notify Homestatus:home {
                                   if Value("nichtschalten") eq "off" {
                                       if (Value("LichtWetter") < 9 && Value("Homestatus") eq "home") {
                                           fhem ("set PCT06 on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")} else {fhem ("set PCT06 on;;set LED on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")
                                           }
                                   }
                            }


so hatte ich mir es auch vorgestellt. Nur leider kommt beim speichern folgender Fehler:
Unknown command if, try help. Unknown command if, try help. Unknown command fhem, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.

Seit dem DOELSE gibt es noch einen zusätzlichen negativen Nebeneffekt.
Jetzt setze ist der homestatus auf home. Wenn ich jetzt erneut den set homestatus home mache, werden die Geräte (Lautsprecher, LED, ...) nicht geschalten. Bisher mit dem if hat das noch funktioniert.
Titel: Antw:Mehrere IF
Beitrag von: Puschel74 am 06 Januar 2016, 19:17:14
Zur Fehlermeldung - ich tippe mal schwer drauf das du den Code einfach so mit c&p in die fhem.cfg "geprügelt" hast - richtig?
Titel: Antw:Mehrere IF
Beitrag von: TWART016 am 06 Januar 2016, 19:45:54
ja, vermutlich ist da die Formattierung nicht korrekt??

Wie macht man es besser?
Titel: Antw:Mehrere IF
Beitrag von: Puschel74 am 06 Januar 2016, 19:52:14
Zitat von: TWART016 am 06 Januar 2016, 19:45:54
ja, vermutlich ist da die Formattierung nicht korrekt??
Nicht vermutlich sondern so ist es.

Zitat von: TWART016 am 06 Januar 2016, 19:45:54
Wie macht man es besser?
Nicht besser sondern so das FHEM mit dem Code auch was anfangen kann habe ich schon einige Male beschrieben.
Einfach mal die erweiterte Suche anwerfen und nach fhem.cfg bearbeiten und User Puschel74 suchen.
Aber ja, ich finde es besser die fhem.cfg nicht direkt zu bearbeiten sondern über FHEMWEB zu gehen.
Vorteil: Man kann weniger Fehler machen  ;)
Titel: Antw:Mehrere IF
Beitrag von: TWART016 am 06 Januar 2016, 20:13:18
Ich habe leider den Thread in der erweiterten Suche nicht gefunden. Zumindest ist der Code jetzt so drin. Jedoch hat es dort auch die Formtierung zerschossen. Wie kann ich im FHEMWEB ein TAB machen?

Der Code funktioniert, jedoch warum bei dir in der 2.Zeile zwei Klammern zu wenig. Anbei der richtige Code:
define AtHome notify Homestatus:home {
                                   if (Value("nichtschalten") eq "off") {
                                       if (Value("LichtWetter") < 9 && Value("Homestatus") eq "home") {
                                           fhem ("set PCT06 on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")} else {fhem ("set PCT06 on;;set LED on;;sleep 100;;set ProgrammeAutostart starten;;set Steckdose_Lautsprecher_2.1 on;;set Steckdose_Lautsprecher_5.1 on;;set Steckdose_Bildschirme_PC on;;set Steckdose_TV on")
                                           }
                                   }
                            }
Titel: Antw:Mehrere IF
Beitrag von: CoolTux am 06 Januar 2016, 20:25:55
Naja ein bisschen Lerneffekt soll ja auch dabei sei  ;D

Bitte nicht die cfg editieren sondern wie Puschel schon sagte immer über das Frontend gehen.




Grüße
Titel: Antw:Mehrere IF
Beitrag von: Puschel74 am 06 Januar 2016, 20:35:17
Wenn der Code SO in der fhem.cfg steht wird er sicher nicht funktionieren  ::)
Und in der erweiterten Suche findet man mit den genannten Begriffen mehr als einen Beitrag - zumindest wenn ich danach suche.
Titel: Antw:Mehrere IF
Beitrag von: Ellert am 06 Januar 2016, 20:46:34
Und, falls Du komfortabel editieren möchtest und die codemirror-Erweiterung des Editors noch nicht aktiviert ist, hier noch ein paar Tipps, auch nützlich, wenn Du DOIF nicht nutzt: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668
Titel: Antw:Mehrere IF
Beitrag von: TWART016 am 07 Januar 2016, 14:53:19
Ich schalte über einen anderen Dummy ebenfalls noch den homestatus. Seitdem ich die Schleife im FHEMWEB nutze, werden aber keine Aktionen mehr ausgeführt.

Im Log steht folgendes, ausgeführt wird jedoch nicht. Liegt es an den einzelnen ";"?
set PCT06 on;sleep 100;set ProgrammeAutostart starten;set Steckdosen_Lautsprecher on;set Steckdosen_Bildschirme on