Hauptmenü

Mehrere IF

Begonnen von TWART016, 05 Januar 2016, 16:48:02

Vorheriges Thema - Nächstes Thema

TWART016

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

Ellert

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.

TWART016

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?

Ellert


Wernieman

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"?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ellert


Wernieman

Auch wenn es jetzt OT wird, war eher die "interne" Frage, d.h. macht DOIF es per polling, oder eben "event-gesteuert"?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ellert

DOIF reagiert auf Events. Du kannst also z.B. nicht auf ein Reading triggern, dass ohne Event aktualisiert wird.

Wernieman

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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CoolTux

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")
                                           }
                                   }
                            }
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

TWART016

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.

Puschel74

Zur Fehlermeldung - ich tippe mal schwer drauf das du den Code einfach so mit c&p in die fhem.cfg "geprügelt" hast - richtig?
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

TWART016

ja, vermutlich ist da die Formattierung nicht korrekt??

Wie macht man es besser?

Puschel74

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  ;)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

TWART016

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")
                                           }
                                   }
                            }