doif wird nicht richtig ausgeführt

Begonnen von vilguy, 26 Januar 2021, 12:51:00

Vorheriges Thema - Nächstes Thema

vilguy

bin noch recht neu. habe folgendes problem, die 2. bedingung wird nicht ausgelöst (überlesen) auszug aus der fhem DEF
steuerung ist dummy schalter mit 3 zuständen

" ([steuerung] eq "on") (set pumpe on, set ventil on)
DOELSEIF ([steuerung] eq "off") (set pumpe off, set ventil off)
DOELSEIF ([steuerung] eq "auto" and ([SolarDiff]>[Hysterese:state])) (set pumpe on, set ventil on)"

also das 1. doelseif funktioniert nicht. auch wenn ich alle 3 bedingungen durchtausche um zu checken ob es an den bedingungen liegt..(unabhängig von der bedingung wird immer  das markierte doelseif  also die 2.bedingung  nicht ausgeführt obwohl die voraussetzungen stimmen)

hier das device listing
Internals:
   DEF        ([steuerung] eq "on") (set pumpe on, set ventil on) DOELSEIF ([steuerung] eq "off") (set pumpe off, set ventil off) DOELSEIF ([steuerung] eq "auto" and ([SolarDiff]>[Hysterese:state])) (set pumpe on, set ventil on)

   FUUID      600d963e-f33f-f419-d130-b821b2fd8220ef79
   MODEL      FHEM
   NAME       di_SOLAR
   NOTIFYDEV  Hysterese,global,steuerung,SolarDiff
   NR         41
   NTFY_ORDER 50-di_SOLAR
   STATE      cmd_3
   TYPE       DOIF
   VERSION    23466 2021-01-03 17:14:46
   READINGS:
     2021-01-26 13:12:05   Device          steuerung
     2021-01-26 13:12:00   cmd             3
     2021-01-26 13:12:00   cmd_event       steuerung
     2021-01-26 13:12:00   cmd_nr          3
     2021-01-26 13:12:04   e_SolarDiff_STATE 14.1
     2021-01-26 13:12:05   e_steuerung_STATE off
     2021-01-26 12:41:45   mode            enabled
     2021-01-26 13:12:00   state           cmd_3
     2021-01-26 13:12:05   wait_timer      26.01.2021 13:15:05 cmd_2 steuerung
   Regex:
     accu:
     cond:
       Hysterese:
         2:
           state      ^Hysterese$:^state:
       SolarDiff:
         0:
         1:
         2:
           &STATE     ^SolarDiff$
       steuerung:
         0:
           &STATE     ^steuerung$
         1:
           &STATE     ^steuerung$
         2:
           &STATE     ^steuerung$
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         180
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'steuerung','STATE') eq "on"
     1          ::InternalDoIf($hash,'steuerung','STATE') eq "off"
     2          ::InternalDoIf($hash,'steuerung','STATE') eq "auto" and (::InternalDoIf($hash,'SolarDiff','STATE')>::ReadingValDoIf($hash,'Hysterese','state'))
   do:
     0:
       0          set pumpe on, set ventil on
     1:
       0          set pumpe off, set ventil off
     2:
       0          set pumpe on, set ventil on
     3:
   helper:
     DEVFILTER  ^global$|^Hysterese$|^SolarDiff$|^steuerung$
     NOTIFYDEV  global|Hysterese|SolarDiff|steuerung
     event      off
     globalinit 1
     last_timer 0
     sleepdevice steuerung
     sleepsubtimer 0
     sleeptimer 1
     timerdev   steuerung
     timerevent off
     triggerDev steuerung
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
     all         steuerung:STATE SolarDiff:STATE
   perlblock:
   readings:
     all         Hysterese:state
   trigger:
   uiState:
   uiTable:
Attributes:
   wait       0:180



Internals:
   FUUID      600c34ac-f33f-f419-b839-fea94760d737a296
   NAME       steuerung
   NR         37
   STATE      off
   TYPE       dummy
   READINGS:
     2021-01-26 13:12:05   state           off
Attributes:
   room       Pool
   setList    state:auto,on,off
   webCmd     auto:on:off

Otto123

Hallo,

bitte beachte das https://forum.fhem.de/index.php/topic,71806.0.html
Poste in deinem Fall bitte ein list möglichst in dem Zustand wo Du meinst es funktioniert nicht.
Ein list steuerung wäre auch noch gut. Mit den bisherigen Information kann man kaum Ideen haben.

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

vilguy

in diesem falle das ausschalten des ventils und pumpe was nicht geht.
tausche ich das gegen bspw. einschalten an diese stelle, dann klappt alles andere bis auf das einschalten. also immer die mittlere bedingung

Frank_Huber


Otto123

Ich sehe mal zwei Dinge:
Code-Tags fehlen!
Zitat2021-01-26 13:12:05   e_steuerung_STATE off
     2021-01-26 12:41:45   mode            enabled
     2021-01-26 13:12:00   state           cmd_3
     2021-01-26 13:12:05   wait_timer      26.01.2021 13:15:05 cmd_2 steuerung
Das DOIF war im cmd_3, dann kam steuerung off, jetzt würde er 180 sec warten und 13:15:05 auf cmd_2 gehen? Das mit den 180 sec warten war nicht so gewollt?
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

Frank_Huber

Irgendwas passt da nicht.
Man sieht den Wait timer, aber es ist kein wait Attribut gesetzt?

Wie Otto sagt, bitte ein List in Code Tags im Fehlerfall.
Meine Vermutung des fehlenden do always bleibt aber erstmal. :-)

Otto123

ZitatMan sieht den Wait timer, aber es ist kein wait Attribut gesetzt?
doch der ist
Attributes:
   wait       0:180
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

Frank_Huber

Stimmt.

Das sind die Lists vom Dummy und vom DOIF.
wait ist drin. hab ich übersehen.

vilguy

#8
also das mit dem wait timer ist so gewollt. alle 3 minuten soll eine aktion erfolgen, solange der status unverändert bleiben. im fhem room sehe ich ja die geltenden bedingungen sobald ich den dummy schalte auch vor ablauf des wait timers. das klappt wie gesagt bei allen kombinationen sofort, nur eben beim 2. nicht

do always bewirkt was? das pack ich direkt ins doif modul?

edit---- das do always hat nicht geholfen

wie ist das mit dem list code tag gemeint?

Otto123

Zitat von: vilguy am 26 Januar 2021, 15:30:36
wie ist das mit dem list code tag gemeint?
Steht doch in meinem Link? Was ist da unverständlich?
ZitatFür Code, logausgaben etc... immer code Tags (das # im Editor über den Smilies) verwenden

Also der wait Timer bewirkt, dass die zweite Aktion (also cmd_2) erst nach 3 Minuten ausgeführt wird. Wenn das so gewollt ist - was ist jetzt nicht in Ordnung?
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

vilguy

#10
dann habe ich das mit dem timer missverstanden. ich möchte dass das doifmodul alle 3 minuten ausgeführt wird, neu auf bedingungen prüft und den neuen oder alten schaltstatus für die nächsten 3 minuten beibehält und danch das ganze wieder von vorn. wie mache ich das?

habe den wait timer weggenommen, jetzt führt er auch alle bedingungen aus *danke dafür*

edit
habe es mit etwas probieren hinbekommen. vielen dank.
allerdings habe ich jetzt das do always wieder rausgenommen. was hatte das nochmal bewirkt? ich steuer das jetzt durch den wait timer 0:0:180 was sogar noch besser ist.
da benötige ich den do always doch nichtz oder

Otto123

Wenn Du etwas zyklisch ausführen willst steht dazu dies in der Doku:
https://fhem.de/commandref_DE.html#DOIF_Zeitangaben_nach_Zeitraster_ausgerichtet

Ich denke, dass Dein Denkansatz aber "falsch" ist. Aber vielleicht hat jemand der Solarsteuerungen gemacht hat hier eine gute Idee. Vielleicht hättest Du diese spezielle DOIF Frage auch besser im DOIF Unterforum gestellt :)
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