Probleme mit if / else Bedingung in def

Begonnen von Littlefreddy, 22 August 2015, 13:32:55

Vorheriges Thema - Nächstes Thema

Littlefreddy

Mahlzeit die Herren und natürlich auch Damen :-)

Ich habe ein kleines Problem, egal was ich auch mache mich bringt die if / else Verzeigung in den definitionen noch um den Verstand.
Egal was ich eingebe es klappt lediglich der IF Zweig, sobald ich ein else einbinde fällt mir das ganze ding mit nem Fehler auf die Nase.

Also was will ich machen... Ich möchte gerne das wenn der Fernseher ausgeschaltet wird / nicht mehr erreichbar ist (wird hier mit nem Ping auf den Fernseher gelöst und dem Anwesenheitserkennungsmodul, da der Smart TV bisschen älter ist) die Heizung nur zu bestimmten Monaten aus bzw. in den night Modus wechselt. Das konstrukt mit der Zeit und dem night modus klappt zu mindest mal schon :

WohnzimmerTVStatus:absent  { if($hour >= 21 || $hour <= 4 ) { fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode night;set Wz_Heizung burstXmit") }}

Wenn ich jetzt allerdings noch ein else oder ein && nach dem  if($hour >= 21 || $hour <= 4 ) um auch noch einen Monat mit ins spiel zu bringen landet es mit nem Python Fehler auf der Nase. Kann mir einer mal das Konstrukt etwas näher bringen? Ich habe mir etliche Beispiele angeschaut aber irgendwie will es nicht fruchten.

Hinzu kommt noch das wenn das geschehen ist ich gerne noch den LED Stripe mit einbinden will, also wenn der Fernseher nach Sonnenuntergang eingeschaltet wird oder er bereits an ist nach 21 Uhr, soll der LED Stripe in einer Random Farbe eingeschaltet werden. Hat jemand ne Idee wie ich das am besten / geschicktesten umsetze ohne gleich zwei notify einzusetzen?

Hollo

Zitat von: Littlefreddy am 22 August 2015, 13:32:55
...Wenn ich jetzt allerdings noch ein else oder ein && nach dem  if($hour >= 21 || $hour <= 4 ) um auch noch einen Monat mit ins spiel zu bringen landet es mit nem Python Fehler auf der Nase...

Python?  Könnte es auch ein Perl-Fehler sein?  ;)

Vorab:
Es ist sehr praktisch und hilfreich, dass Du nicht den fragliche Code inkl. der genannten Fehlermeldung gepostet hast.
Das gibt uns viel mehr Spielraum: "es ist nichts gegeben, berechnen sie alle fehlenden Größen".  >:(

Haut das bei Dir nicht hin, liegt das vermutlich an fehlenden/falschen/überzähligen Klammern, oder fehlerhafter Syntax.
Genaues können wir mangels Code natürlich nicht sagen. Also musst Du selbst gucken/vergleichen/korrigieren...

Struktur von "else if" Verzweigungen:
define ... notify ... {\
if ... {\
  fhem ("... ;; ...")\
}\
elsif ... {\
   fhem ("... ;; ...")\
}\
elsif ... {\
   fhem ("... ;; ...")\
}\
else {\
  if ... {\
   fhem ("... ;; ...")\
}\
}

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Puschel74

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.

Littlefreddy

Japs es war eigentlich Perl gemeint :-)

Okay also der Ursprüngliche Code Teil war der wie beschrieben.

WohnzimmerTVStatus:absent  { if($hour >= 21 || $hour <= 4 ) { fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode night;set Wz_Heizung burstXmit") }}

Ich will mit dem neuen Code umsetzen das zwischen Mai und September die Heizung nicht geschaltet wird bzw. den Status off erhält.

 
WohnzimmerTVStatus:absent  {
if($hour >= 21 || $hour <= 4 ) {
if($month >= 5 || $month <=9){ fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode off;set Wz_Heizung burstXmit") }
else {fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode night;set Wz_Heizung burstXmit") }
}
else {fhem("set Wz_Heizung_Clima controlMode off;set Wz_Heizung burstXmit")}


das Ergebniss was ich als Fehlermeldung erhalte wenn ich den TV auf absent trigger :

2015.08.22 15:11:56 3: LichtAusWennFernseherAusAbends return value: Missing right curly or square bracket at (eval 57430) line 2, at end of line
syntax error at (eval 57430) line 2, at EOF

@all sorry hatte eben den Post etwas unliev zusammengebastelt. Ich hoffe nun könnt ihr etwas mehr damit anfangen.

Dennoch hätte ich da noch die Frage wie ich das am besten mit dem LED Stripe umsetzen könnte. Also welchen Mechanismum, ich würde aus dem Gefühl heraus das mit hier in den notify einbauen und abfragen ob der Stripe schon eingeschaltet ist und falls nicht ihn antriggern. und einen notify Uhrzeit gesteuert bauen der ab z.B. 21 Uhr schaut ob der Fernseher an ist und dann prüft ob die LED Stripes an sind oder nicht und dann diese einschaltet. Für den Fall das der Fernseher seit 20 uhr z.B. schon läuft.

Littlefreddy

Okay zumindest das Problem mit den Klammern ist nun erledigt.

WohnzimmerTVStatus:absent  {
   if($hour >= 21 || $hour <= 4 ) {
      if($month >= 5 || $month <=9){ fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode off;set Wz_Heizung burstXmit") }
      else {fhem("set hueBridge1_HUEGroup0 off;set Wz_Heizung_Clima controlMode night;set Wz_Heizung burstXmit") }
   }
else {fhem("set Wz_Heizung_Clima controlMode off;set Wz_Heizung burstXmit")}}

die letzte eckige klammer hat mir diesen Fehler beschert.

Hollo

Hast Du meinen Beitrag überhaupt gelesen ???

Ich habe schon für Dich "gesucht", aber Du musst schon selber lesen und umsetzen.
In der Struktur steht nichts von if-if  !!!

Wenn Du mehrere Bedingungen prüfen willst, musst Du die evtl. kombinieren;
- wenn DIES UND DAS DANN MACHE JENES
- sonstwenn DIES UND DASHIER MACHE SOLCHES
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Littlefreddy

Ja deinen Beitrag habe ich wie du unschwer oben erkennen kannst gelesen.

deswegen habe ich den Code angefügt und auch den "Fehler" gefunden und kommentiert das sich da der Teufel eingeschlichen hat.

Das mit dem Licht ist ein Frage wie man so etwas am besten umsetzen kann und ob mein Ansatz das ganze mit in den notify zu packen bzw. zwei notifys draus machen überhaupt sinn ergibt oder ob man das ggf. besser anders löst.

Hollo

Zitat von: Littlefreddy am 22 August 2015, 17:29:06
Ja deinen Beitrag habe ich wie du unschwer oben erkennen kannst gelesen.

deswegen habe ich den Code angefügt und auch den "Fehler" gefunden und kommentiert das sich da der Teufel eingeschlichen hat...
Kann ich nicht erkennen  >:(

Sieht für mich vollkommen unterschiedlich aus:
WohnzimmerTVStatus:absent  {
   if($hour >= 21 || $hour <= 4 ) {
      if($month >= 5 || $month <=9){ ...


define ... notify ... {\
if ... {\
  fhem ("... ;; ...")\
}\
elsif ... {\
   fhem ("...

Aber wenn es bei Dir funktioniert, ist es ja vollkommen okay.   ;)
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"