FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Fistandantilus am 17 Oktober 2016, 13:53:58

Titel: Doif testen?
Beitrag von: Fistandantilus am 17 Oktober 2016, 13:53:58
Hallo,

ich habe folgendes Doif gebaut:

([Heizung.OG.VorlaufIst:temperature.avg] < {[Heizung.OG.VorlaufSollClone]-10} and [Heizung.OG.Mischer:position]<97 and [Heizung.OG.Pumpe] eq "on")
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+2)}) ## Cmd 1: Schnell oeffnen
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] < {[Heizung.OG.VorlaufSollClone]-6} and [Heizung.OG.Mischer:position]<98 and [Heizung.OG.Pumpe] eq "on")
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+1)}) ## Cmd 2: Ganz langsam oeffnen
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] < {[Heizung.OG.VorlaufSollClone]-2} and [Heizung.OG.Mischer:position]<98 and [Heizung.OG.Pumpe] eq "on")
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+1)}) ## Cmd 3: Noch ein bisschen
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > {[Heizung.OG.VorlaufSollClone]+5} and [Heizung.OG.Mischer:position]>3)
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-2)}) ## Cmd 4: Viel zu heiss, schnell zu
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > {[Heizung.OG.VorlaufSollClone]+3} and [Heizung.OG.Mischer:position]>2)
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-1)}) ## Cmd 5: Zu heiss, schnell zu
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > {[Heizung.OG.VorlaufSollClone]+1} and [Heizung.OG.Mischer:position]>2)
   (set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-1)}) ## Cmd 6: Noch ein bisschen
DOELSEIF ([03:50])
   (set Heizung.OG.Mischer calibrate)                                ## Cmd 7: Calibrieren fuer Tagprogramm
DOELSEIF ([04:00])
   (set Heizung.OG.Mischer 40)                                       ## Cmd 8: Headstart, Ende der Nachtabsenkung


aber offensichtlich ergibt die Prüfung:
[Heizung.OG.VorlaufIst:temperature.avg] < {[Heizung.OG.VorlaufSollClone]-10}
immer true, da ich am Ende immer Cmd1 als Ergebnis habe.
Hier ein paar aktuelle Werte:

Device          Heizung.OG.Pumpe
cmd             1
cmd_event   Heizung.OG.Mischer
cmd_nr        1
e_Heizung.OG.Mischer_position     27
e_Heizung.OG.Pumpe_STATE        on
e_Heizung.OG.VorlaufIst_temperature.avg     38.281
e_Heizung.OG.VorlaufSollClone_STATE          29
state            cmd_1
timer_1_c7   18.10.2016 03:50:00
timer_2_c8   18.10.2016 04:00:00
wait_timer    17.10.2016 13:50:10 cmd_1 Heizung.OG.Mischer
   
Eigentlich sollte jetzt cmd4 hier stehen? Wie kann ich die Bedingungen am besten prüfen? Kann es ein Problem mit dem Datenformat sein?

VG
F.
Titel: Antw:Doif testen?
Beitrag von: Otto123 am 17 Oktober 2016, 13:59:38
Hi,

also ich würde runde Klammern verwenden:{[Heizung.OG.VorlaufSollClone]-10} so bist Du auf Perlebene. Keine Ahnung was da rauskommt, aber das kannst Du leicht überprüfen, einfach oben in die Kommandozeile kopieren und sehen was passiert.

Auf Perlebene werden Readings nicht mit eckigen Klammern sondern sondern mit ReadingsVal gelesen.
Du musst mit Deiner Schreibweise auf DOIF Ebene bleiben und das geht mit runden Klammern.

Also, zumindest denke ich das so. Muss nicht stimmen  :)

Gruß Otto
Titel: Antw:Doif testen?
Beitrag von: Damian am 17 Oktober 2016, 14:05:18
In der Bedingung von DOIF keine geschweiften Klammern verwenden (höchstens für Zeitfunktionen), daher ist korrekt:

[Heizung.OG.VorlaufIst:temperature.avg] < ([Heizung.OG.VorlaufSollClone]-10)

Gruß

Damian
Titel: Antw:Doif testen?
Beitrag von: Fistandantilus am 17 Oktober 2016, 14:08:37
Danke Euch, jetzt funktioniert es :)