Hauptmenü

(Gelöst) DOIF-Problem

Begonnen von is2late, 29 November 2022, 14:47:20

Vorheriges Thema - Nächstes Thema

is2late

Hi,

mein Zusammengefriemeltes funktioniert nicht (Fehlermeldung: "expected DOELSEIF or DOELSE" - aber das steht doch drin?!?) 

Ich möchte Folgendes erreichen:
Zu bestimmten Uhrzeiten soll geprüft werden, ob ein Dummy auf "off" steht. Ist das der Fall, soll nichts passieren, andernfalls sollen Meldungen abgesetzt werden.
So weit bin ich:

define d_HeizungBueroM DOIF ([12:30] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00]) && {if (Value("HeizungBueroM") eq "on" {fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet! ;; sleep 10 ;; set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!  ;; set teleBot message Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!)} DOELSE return

Sieht jemand den Fehler?

Vielen Dank,
Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Bin einen Schritt weiter: Der Fehler liegt offenbar hier

&& {if (Value("HeizungBueroM") eq "on"}

Nehme ich diese Bedingung raus, wird der Rest akzeptiert.

Aber was ist falsch an Obigem?

LG
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Nobbynews

#2
Zitat von: is2late am 29 November 2022, 14:47:20
define d_HeizungBueroM DOIF ([12:30] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00]) && {if (Value("HeizungBueroM") eq "on" {fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet! ;; sleep 10 ;; set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!  ;; set teleBot message Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!)} DOELSE return

Sieht jemand den Fehler?
Das sind wohl mehrere Fehler drin, insbesondere die if-Abfrage in der Bedingung.
Folgender ungetester Vorschlag von mir als DOIF-Laie:
define_HeizungBueroM DOIF
([12:30] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00]) and [HeizungBueroM] eq "on")
  ({fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!"})
  ({fhem("set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!;
          set teleBot message Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!")})
DOELSE
return

attr d_HeizungBueroM wait 0:10,0

Das Attribut wait ersetzt das 'sleep 10'.

is2late

Weiter gehts:

defmod d_HeizungBueroM DOIF ([12:30] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00] and [HeizungBueroM:on]) {fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet! ;; sleep 10 ;; set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!  ;; set teleBot message Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!)} DOELSE return

Bleibt ohne Fehlermeldung. Funktion ist noch zu testen.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Vielen Dank, Nobbynews, probiere ich alternativ.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Nobbynews

Zitat von: is2late am 29 November 2022, 15:22:48
and [HeizungBueroM:on])
Bleibt ohne Fehlermeldung. Funktion ist noch zu testen.
Wird nicht funktionieren, da der Dummy kein Reading "on" hat.
Wenn schon, dann:
[HeizungBueroM:"on"]
Das ist aber ein Ereignis und kein Zustand. Und Du willst ja den Zustand abfragen, oder?
Alternativ:
[HeizungBueroM:state] eq "on"

is2late

#6
Du hast Recht, es funktioniert nicht (richtig).
Bei Deinem Code gibt es aber folgende Fehlermeldung:

d_HeizungBueroM DOIF: expected DOELSEIF or DOELSE: and [HeizungBueroM]:state eq "on") ({fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!"}) ({fhem("set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!.....

Ich probiere noch ein bisschen herum...

LG
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Nobbynews

Zitat von: is2late am 29 November 2022, 16:36:43
[HeizungBueroM]:state eq "on")
Es muss ja auch heißen:
[HeizungBueroM:state] eq "on"
Wenn schon kopieren, dann bitte auch richtig.

is2late

#8
Sorry, Du hast Recht!

Dennoch gibt es die Fehlermeldung, dass (zumind. eine) Klammer fehlt. ich habe daher jetzt wie folgt geändert:

defmod d_HeizungBueroM DOIF ([17:17] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00] and [HeizungBueroM:state] eq "on") ({fhem("set Sonos_Wohnzimmer Speak 50 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet")}) ({fhem("set Sonos_Unnamed_Room Speak 30 de |TempleBell| Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!")}) ({fhem("set teleBot message Achtung, die Schreibtischheizung bei Baerbel ist noch eingeschaltet!")}) DOELSE return

Funktioniert jetzt, vielen Dank!!!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Nobbynews

Zitat von: is2late am 29 November 2022, 17:20:00
Dennoch gibt es die Fehlermeldung, dass (zumind. eine) Klammer fehlt. ich habe daher jetzt wie folgt geändert:
Stimmt, hatte eine ')' vergessen. Daher ja auch ungetestet. Hab's oben geändert.

is2late

#10
Hm da war ich wohl zu voreilig.
Derzeit werden nämlich die Meldungen auch dann abgesetzt, wenn der Dummy auf off steht.
Wie kann das bloß sein??? Eine Fehlermeldung gibt es ja nicht, aber ist da trotzdem noch ein Syntax- oder Logikfehler drin?

Vielen Dank!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Nobbynews

Zitat von: is2late am 29 November 2022, 20:04:40
Wie kann das bloß sein???
Das dürfte an der Rangfolge der Operatoren liegen.
Klammere mal die or-Verknüpfungen ein, also
(([17:17] or [18:00] or [19:00] or [20:00] or [21:00] or [22:00] or [23:00]) and [HeizungBueroM:state] eq "on")

is2late

Super, Nobbynews, das ist die Lösung! Jetzt funktioniert es.

Herzlichen Dank für Deine Mühe!

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox