Verständnisfrage zur Rangfolge von Ereignissen

Begonnen von romarira, 22 Oktober 2015, 20:15:25

Vorheriges Thema - Nächstes Thema

romarira

#15
ZitatDas "define" hat im Bedingungsteil des DOIF nichts zu suchen.

Ich habe die Anweisungen entsprechend angepasst:

define Heizperiode_1 DOIF ([dum_Heizperiode] eq "Winter") \
([05:30|8] or [08:00|7]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([07:00|8] or [18:45|7]) (set hzg_BZ_oben  desired-temp 17) \
DOELSEIF ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)
define Heizperiode_2 DOIF ([dum_Heizperiode] eq "Winter") \
([13:00|8]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([22:00|8]) (set hzg_BZ_oben  desired-temp 17) \
DOELSEIF ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)



Im Ergebnis hat es aber keine Veränderung gebracht. Nach wie vor werden keine Befehle an hzg_BZ_oben übermittelt.
Das LOG ist dabei völlig unauffällig.

In den Ansichten des FHEM werden wir zum Dummy folgende Ergebnisse angezeigt, die m.E. dafür sprechen, dass der Dummy richtig gesetzt ist. Folglich muss der Fehler irgendwo im Code liegen.

Zitat
NAME     dum_Heizperiode
NR         94
STATE    Winter
TYPE      dummy

romarira

#16
Ich hatte im Code bei der Sommerabfrage das letzte DOELSEIF jetzt einmal durch ein DOELSE ausgetauscht.

define Heizperiode_1 DOIF ([dum_Heizperiode] eq "Winter") \
([05:30|8] or [08:00|7]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([07:00|8] or [18:45|7]) (set hzg_BZ_oben  desired-temp 17) \
DOELSE ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)
define Heizperiode_2 DOIF ([dum_Heizperiode] eq "Winter") \
([13:00|8]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([22:00|8]) (set hzg_BZ_oben  desired-temp 17) \
DOELSE ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)


Dabei habe ich jetzt folgende Fehlermeldung im LOG gefunden:

Zitat2015.10.28 18:45:00 2: Heizperiode_1: Winter eq "Sommer": Unknown command Winter, try help.
2015.10.28 18:45:00 2: FHT set hzg_BZ_oben desired-temp 9.0

Anscheinend stimmt irgendetwas mit dem eq-Vergleich nicht.

Könnte es daran liegen, dass bei DOELSE in der Abfrage kein IF mehr auftaucht. Müsste evtl. bei DOELSE noch etwas kommen wie: if Value ([dum_Heizperiode] eq "Sommer") (set .....)

Könnte mir dann jemand bei der Syntax helfen?

moonsorrox

#17
ich denke eher so
([dum_Heizperiode] eq "Winter" ([05:30|8] or [08:00|7]))

EDITH://
geh mal ins DEF und schreibe dieses rein, ich habe das DOELSE am Ende durch DOELSEIF geändert wegen der Bedingungen:
([dum_Heizperiode] eq "Winter" ([05:30|8] or [08:00|7])) (set hzg_BZ_oben  desired-temp 22)
DOELSEIF ([07:00|8] or [18:45|7]) (set hzg_BZ_oben  desired-temp 17)
DOELSEIF ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)


Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: romarira am 28 Oktober 2015, 18:55:58
Ich hatte im Code bei der Sommerabfrage das letzte DOELSEIF jetzt einmal durch ein DOELSE ausgetauscht.

define Heizperiode_1 DOIF ([dum_Heizperiode] eq "Winter") \
([05:30|8] or [08:00|7]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([07:00|8] or [18:45|7]) (set hzg_BZ_oben  desired-temp 17) \
DOELSE ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)
define Heizperiode_2 DOIF ([dum_Heizperiode] eq "Winter") \
([13:00|8]) (set hzg_BZ_oben  desired-temp 22) \
DOELSEIF ([22:00|8]) (set hzg_BZ_oben  desired-temp 17) \
DOELSE ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)


Dabei habe ich jetzt folgende Fehlermeldung im LOG gefunden:

Anscheinend stimmt irgendetwas mit dem eq-Vergleich nicht.

Könnte es daran liegen, dass bei DOELSE in der Abfrage kein IF mehr auftaucht. Müsste evtl. bei DOELSE noch etwas kommen wie: if Value ([dum_Heizperiode] eq "Sommer") (set .....)

Könnte mir dann jemand bei der Syntax helfen?

Ein DOELSE-Fall hat grundsätzlich keine Bedingung. Du kannst also bei DOELSE es nur so angeben:
... DOELSE  (set hzg_BZ_oben desired-temp 9)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

romarira

#19
EDITH://
geh mal ins DEF und schreibe dieses rein, ich habe das DOELSE am Ende durch DOELSEIF geändert wegen der Bedingungen:
Code: [Auswählen]

([dum_Heizperiode] eq "Winter" ([05:30|8] or [08:00|7])) (set hzg_BZ_oben  desired-temp 22)
DOELSEIF ([07:00|8] or [18:45|7]) (set hzg_BZ_oben  desired-temp 17)
DOELSEIF ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)


Mit geänderter Uhrzeit (20:05 anstelle 18:45) gemacht ... und keine Reaktion. Der Befehl wird nicht ausgeführt.

Habe nach dem Erfassen im DEF die Config gespeichert, rereadcfg und auch shutdown restart gemacht.

Bin ratlos  :-[

romarira

Jetzt geht's. Es gab noch einen Fehler bei den Wochentagen, also die 7 bzw. 8 hinter der Uhrzeit.
Danke für die Hilfe!!   :D

So ist der funktionsfähige Code:
([dum_Heizperiode] eq "Winter" ([05:30|8] or [08:00|7])) (set hzg_BZ_oben  desired-temp 22)
DOELSEIF ([07:00|8] or [21:25]) (set hzg_BZ_oben  desired-temp 17)
DOELSEIF ([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 9)



Ellert

([dum_Heizperiode] eq "Winter" and ([05:30|8] or [08:00|7]))

Hinter "Winter" fehlte ein "and"

romarira

ZitatCode: [Auswählen]

([dum_Heizperiode] eq "Winter" and ([05:30|8] or [08:00|7]))


Hinter "Winter" fehlte ein "and"

Vielen Dank für den Hinweis, habe ich eingebaut und funktioniert tadellos :-)

Ich bin dann in meinem "Projekt" die nächsten Schritte angegangen, weil es geht mir ja hier um die Abarbeitung mehrerer Schaltmöglichkeiten der Heizung.
Dabei bin ich davon ausgegangen:

1. wenn Sommer brauche ich keine weiteren Abfragen
2. wenn Urlaub brauche ich auch keine weiteren Abfragen
3. vorrangig vor dem regulären "Winterbetrieb"  und Ferien ist aber die Party, also kommt die an dritter Stelle
4. als vierte Möglichkeit kommen die Ferien, die vom regulären Winterbetrieb abweichen können (hier sind sie jetzt gleich, bei den übrigen Zimmern werden sie aber anders sein)
5. als letzte Möglichkeit kommt der reguläre Winterbetrieb

Was ist bislang testen konnte, funktioniert auch gut. Wo ich jetzt aber nicht weiterkomme ist das Rückschalten in den regulären Betrieb.

Das heißt:
Ich setze den Schalter Party und die Heizung wird auf 22 Grad gesetzt.  Automatisch würde sie um 3:00 Uhr enden. Wenn dann am nächsten Morgen die Uhrzeit für den regulären Betrieb ansteht, wird auch auf regulären Betrieb geschaltet.

Wie komme ich aber jetzt vorzeitig in den regulären Betrieb, wenn ich den Schalter Party z.B. um 23:00 auf "Off" setze und ich möchte, dass die Heizung dann sofort auf die dann vorgesehene Gradzahl von 12 Grad schaltet und nicht erst zum planmäßigen Zeitpunkt?

Hier der aktuelle Code:


([dum_Heizperiode] eq "Sommer") (set hzg_BZ_oben desired-temp 6) DOELSEIF
([dum_Urlaub] eq "Urlaub") (set hzg_BZ_oben desired-temp 12) DOELSEIF
([dum_Party] eq "Party") (set hzg_BZ_oben desired-temp 22) DOELSEIF ([03:00|78]) (set hzg_BZ_oben desired-temp 17) DOELSEIF
([dum_Ferien] eq "Ferien" and ([05:30|8] or [08:00|7])) (set hzg_BZ_oben  desired-temp 22) DOELSEIF ([07:00|8] or [22:00]) (set hzg_BZ_oben  desired-temp 17) DOELSEIF
([dum_Ferien] eq "Ferien" and ([13:00|8])) (set hzg_BZ_oben  desired-temp 22) DOELSEIF
([dum_Heizperiode] eq "Winter" and ([05:30|8] or [08:00|7])) (set hzg_BZ_oben  desired-temp 22) DOELSEIF
([07:00|8] or [22:00]) (set hzg_BZ_oben  desired-temp 17)

Ellert

Off in dem "Aus"-Pfad mit abfragen.
|78 könntest Du weglassen.

DOELSEIF ([03:00] or [dum_Party] eq "Party") (set ...

romarira

ZitatOff in dem "Aus"-Pfad mit abfragen.

Ist es nicht so, dass wenn der Status auf Off geändert wird und dann ja auch auf Off bleibt, die Bedingung permanent erfüllt bleibt? Das Programm endet dann doch hier beim nächsten Durchlauf, der hinter "Off" angegebene Temperaturwert bleibt und der reguläre Betrieb wird gar nicht mehr erreicht?

Ellert

Es müsste natürlich  DOELSEIF ([03:00] or [dum_Party] eq "Off") (set ... heissen, da habe ich einen Fehler gemacht.
Ich meine es müsste funktionieren, denn geschaltet wird nur bei Statusaktualisierung. Wenn es beim Ausprobieren nicht klappt, könntest Du es als Event angeben.
DOELSEIF ([03:00] or [dum_Party:?Off]) (set ...

romarira

Werde ich am Wochenende ausprobieren. Vielen Dank erstmal.

Gesendet von meinem A0001 mit Tapatalk


Prof. Dr. Peter Henning

Viel zu komplizierte Herangehensweise. Was hier wirklich helfen würde, ist ein Zustandsautomat - Beispiel siehe hier: http://www.fhemwiki.de/wiki/1W-WPump

Damit ließe sich klar definieren, welche möglichen Zustände der Heizung auftreten und welche Ereignisse Übergänge zwischen ihnen auslösen.

LG

pah