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
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
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'.
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.
Vielen Dank, Nobbynews, probiere ich alternativ.
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"
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
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.
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!!!
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.
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!
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")
Super, Nobbynews, das ist die Lösung! Jetzt funktioniert es.
Herzlichen Dank für Deine Mühe!
LG Ingo