FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: is2late am 29 November 2022, 14:47:20

Titel: (Gelöst) DOIF-Problem
Beitrag von: is2late am 29 November 2022, 14:47:20
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
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 29 November 2022, 15:16:14
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
Titel: Antw:DOIF-Problem
Beitrag von: Nobbynews am 29 November 2022, 15:22:17
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'.
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 29 November 2022, 15:22:48
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.
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 29 November 2022, 15:23:42
Vielen Dank, Nobbynews, probiere ich alternativ.
Titel: Antw:DOIF-Problem
Beitrag von: Nobbynews am 29 November 2022, 15:46:23
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"
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 29 November 2022, 16:36:43
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
Titel: Antw:DOIF-Problem
Beitrag von: Nobbynews am 29 November 2022, 16:55:19
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.
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 29 November 2022, 17:20:00
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!!!
Titel: Antw:DOIF-Problem
Beitrag von: Nobbynews am 29 November 2022, 17:53:22
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.
Titel: Antw:(Gelöst) DOIF-Problem
Beitrag von: is2late am 29 November 2022, 20:04:40
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!
Titel: Antw:(Gelöst) DOIF-Problem
Beitrag von: Nobbynews am 30 November 2022, 04:40:22
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")
Titel: Antw:DOIF-Problem
Beitrag von: is2late am 30 November 2022, 08:38:11
Super, Nobbynews, das ist die Lösung! Jetzt funktioniert es.

Herzlichen Dank für Deine Mühe!

LG Ingo