[gelöst] Ich verstehe DOIF anscheinend nicht wirklich

Begonnen von maci, 22 Oktober 2017, 13:38:54

Vorheriges Thema - Nächstes Thema

maci

Hallo,

Ich verstehe IF aus anderen Programmierungen, aber in Fhem habe sowohl Probleme mit IF als DOIF

Ich habe zwar schon ein paar Dinge definiert, aber die funktionieren nicht, wie sie sollen.
Bsp:
Internals:
   DEF        ([Ventil_1_Schalter] eq "on" and
[(ReadingsNum("Temp_Ausgang_Puffer","Temperatur_Ausgang_Puffer",""))] > [(ReadingsNum("Boiler_Temperatur","Temperatur_Boiler",""))]
+ [Hysterese])
(set Boilerladepumpe_Schalter on)
DOELSE (set Boilerladepumpe_Schalter off)
   NAME       Schalt_Boilerladepumpe
   NR         727
   NTFY_ORDER 50-Schalt_Boilerladepumpe
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2017-10-22 04:30:00   Device          Ventil_1_Schalter
     2017-10-21 14:02:47   cmd             2
     2017-10-21 14:02:47   cmd_event       Hysterese
     2017-10-21 14:02:47   cmd_nr          2
     2017-10-21 14:03:45   e_Hysterese_STATE 2
     2017-10-22 04:30:00   e_Ventil_1_Schalter_STATE on
     2017-10-21 14:02:47   state           cmd_2
     2017-10-22 00:00:46   timer_01_c01    23.10.2017 00:00:42
     2017-10-22 00:00:46   timer_02_c01    23.10.2017 00:00:44
   condition:
     0          InternalDoIf($hash,'Ventil_1_Schalter','STATE') eq "on" and   DOIF_time_once($hash,0,$wday) > DOIF_time_once($hash,1,$wday)   + InternalDoIf($hash,'Hysterese','STATE')
   days:
   devices:
     0           Ventil_1_Schalter Hysterese
     all         Ventil_1_Schalter Hysterese
   do:
     0:
       0          set Boilerladepumpe_Schalter on
     1:
       0          set Boilerladepumpe_Schalter off
   helper:
     event      on
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Ventil_1_Schalter
     timerevent on
     triggerDev Ventil_1_Schalter
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
     0           Ventil_1_Schalter:STATE Hysterese:STATE
     all         Ventil_1_Schalter:STATE Hysterese:STATE
   interval:
   itimer:
   localtime:
     0          1508709642.56
     1          1508709644.88
   readings:
   realtime:
     0          00:00:42
     1          00:00:44
   regexp:
     0:
     all:
   state:
     STATE:
   time:
     0          (ReadingsNum("Temp_Ausgang_Puffer","Temperatur_Ausgang_Puffer",""))
     1          (ReadingsNum("Boiler_Temperatur","Temperatur_Boiler",""))
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1508709642.56:
       localtime  1508709642.56
       hash:
     1508709644.88:
       localtime  1508709644.88
       hash:
Attributes:
   event-on-change-reading 1
   room       2.03_Heizung_Schalter


dazu meine Definition:
define Schalt_Boilerladepumpe DOIF ([Ventil_1_Schalter] eq "on" and \
[(ReadingsNum("Temp_Ausgang_Puffer","Temperatur_Ausgang_Puffer",""))] > [(ReadingsNum("Boiler_Temperatur","Temperatur_Boiler",""))] \
+ [Hysterese]) \
(set Boilerladepumpe_Schalter on) \
DOELSE (set Boilerladepumpe_Schalter off)


Wenn ich nun das list und die definition so ansehe, vermisse ich im List die Temperaturangaben.
In der Definition werden mir diese aber angebeben:
Bsp: Temp_Ausgang_Puffer: 51,2
Boiler_Temperatur: 41,8
Die Hysterese ist auf 2 Grad derzeit gestellt.
Ventil_1: on

Also müsste das DOIF nach meinem Gedankengang auf cmd1 gehen
Macht es aber nicht.
Um genau zu sein, das DOIF macht gar nichts.

Wo habe ich meinen Fehler?
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Frank_Huber

Setze den Vergleich mal noch in eine eigene klammer.
   DEF        ([Ventil_1_Schalter] eq "on" and
([(ReadingsNum("Temp_Ausgang_Puffer","Temperatur_Ausgang_Puffer",""))] > [(ReadingsNum("Boiler_Temperatur","Temperatur_Boiler",""))]
+ [Hysterese]))


Gesendet von meinem S3_32 mit Tapatalk


maci

Hmm ...
Könntest recht haben. Damit sind die einzelnen Vergleiche sauber getrennt.
Klammern habe ich mal eingefügt.
Das Ergebnis wird sich morgen oder übermorgen zeigen.
Für heute habe ich es bereits per Hand gemacht.

Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Otto123

Ich würde es so machen:
defmod Schalt_Boilerladepumpe DOIF ([Ventil_1_Schalter] eq "on" and [Temp_Ausgang_Puffer:Temperatur_Ausgang_Puffer] > \
([Boiler_Temperatur:Temperatur_Boiler] + [Hysterese])) (set Boilerladepumpe_Schalter on) DOELSE (set Boilerladepumpe_Schalter off)


Wobei mir Deine Geräte und Readings komisch vorkommen.
Zeig mal bitte je ein list von Boiler_Temperatur und Temp_Ausgang_Puffer

Wenn die Hysterese wirklich eine sein soll würde ich dann auch ein DOELSEIF machen
([Ventil_1_Schalter] eq "off" or [Temp_Ausgang_Puffer:Temperatur_Ausgang_Puffer] < [Boiler_Temperatur:Temperatur_Boiler])

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

maci

Zitat von: Otto123 am 22 Oktober 2017, 14:53:38
Wobei mir Deine Geräte und Readings komisch vorkommen.
Zeig mal bitte je ein list von Boiler_Temperatur und Temp_Ausgang_Puffer

Hier das List von Boiler_Temperatur:
Internals:
   DEF        10.0.0.201 80 espBridge ESP_Keller_Temp_Boiler
   ESP_BUILD  147
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 9
   HOST       10.0.0.201
   IDENT      ESP_Keller_Temp_Boiler
   INTERVAL   120
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     672
   NAME       Boiler_Temperatur
   NOTIFYDEV  global
   NR         652
   NTFY_ORDER 50-Boiler_Temperatur
   PORT       80
   STATE      Temperatur: 50.6 °
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.33
   espBridge_MSGCNT 672
   espBridge_TIME 2017-10-22 16:21:43
   Helper:
     DBLOG:
       temperature_T:
         DbLogging:
           TIME       1508682103.69011
           VALUE      50.6
   READINGS:
     2017-10-22 16:21:43   Temperatur_Boiler 50.560
     2017-09-07 17:42:47   alarm           0
     2017-10-22 16:21:14   presence        present
     2017-10-22 16:21:43   state           Tem: 50.560
     2017-09-05 23:59:18   temperature     57.8125
     2017-10-22 16:21:43   temperature_T   50.6
     2017-02-11 11:50:37   temphigh        75
     2017-02-11 11:50:22   templow         40
   helper:
     fpc        1508600930
     pm:
       Encode     1
       JSON       1
     received:
       Temperatur_Boiler 1508682103
Attributes:
   IODev      espBridge
   Interval   120
   group      Boiler
   icon       sani_boiler_temp
   presenceCheck 1
   readingSwitchText 1
   room       2.01_Heizung,3.01_Solaranlage
   setState   3
   sortby     2
   stateFormat {sprintf("Temperatur: %.1f °",ReadingsVal("Boiler_Temperatur","temperature_T",0))}
   userReadings temperature_T:Temperatur_Boiler.* { int ( 10 * ReadingsVal("Boiler_Temperatur","Temperatur_Boiler",0) + 0.5 ) / 10 }


und von Temp_Ausgang_Puffer: Internals:
   DEF        10.0.0.201 80 espBridge ESP_Keller_Temp_Ausgang_Puffer
   ESP_BUILD  147
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 9
   HOST       10.0.0.201
   IDENT      ESP_Keller_Temp_Ausgang_Puffer
   INTERVAL   120
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     675
   NAME       Temp_Ausgang_Puffer
   NOTIFYDEV  global
   NR         677
   NTFY_ORDER 50-Temp_Ausgang_Puffer
   PORT       80
   STATE      Temperatur: 36.7 °
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.33
   espBridge_MSGCNT 675
   espBridge_TIME 2017-10-22 16:21:23
   Helper:
     DBLOG:
       temperature_T:
         DbLogging:
           TIME       1508682083.66894
           VALUE      36.7
   READINGS:
     2017-10-22 16:21:23   Temperatur_Ausgang_Puffer 36.690
     2017-10-22 16:22:15   presence        present
     2017-10-22 16:22:15   state           Tem: 36.690
     2017-10-22 16:21:23   temperature_T   36.7
   helper:
     fpc        1508600930
     pm:
       Encode     1
       JSON       1
     received:
       Temperatur_Ausgang_Puffer 1508682083
Attributes:
   IODev      espBridge
   Interval   120
   icon       temp_temperature
   presenceCheck 1
   readingSwitchText 1
   room       2.01_Heizung
   setState   3
   stateFormat {sprintf("Temperatur: %.1f °",ReadingsVal("Temp_Ausgang_Puffer","temperature_T",0))}
   userReadings temperature_T:Temperatur_Ausgang_Puffer.* { int ( 10 * ReadingsVal("Temp_Ausgang_Puffer","Temperatur_Ausgang_Puffer",0) + 0.5 ) / 10 }


zur Vervollständigung noch das List von Hysterese:Internals:
   CFGFN      FHEM/vorgabe.cfg
   NAME       Hysterese
   NR         203
   STATE      2
   TYPE       dummy
   READINGS:
     2017-10-21 14:03:45   state           2
Attributes:
   group      1_Vorgaben
   room       2.09_Heizung_Vorgaben
   setList    state:0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,7,8,9,10
   webCmd     state
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Otto123

Ok, das passt. Dann ist es so wie ich oben geschrieben habe. Das sollte funktionieren. Kannst Du so in die Raw Def werfen :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

maci

Danke Otto,

Habe meine Definition jetzt verändert.
Die nächsten Tage zeigen ob das nun funktioniert.
Denke, dass wich wieder etwas gelernt habe.

Was ich noch nicht weiß, ist der Umgang mit den DOIF-Tools.
Ich habe diese zwar mal definiert, werde aber noch nicht schlau daraus.

Gruß
Georg
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Ellert

ZitatWas ich noch nicht weiß, ist der Umgang mit den DOIF-Tools.

Ein Blick in die Bedienungsanleitung sollte das ändern können.

maci

Das DOIF funktioniert jetzt!

Danke für die Hilfe.

Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan