[Gelöst]DOIF und Dummy Wert 0 wird nicht ausgeführt

Begonnen von Deckoffizier, 09 April 2019, 13:38:20

Vorheriges Thema - Nächstes Thema

Deckoffizier

Hallo,

zu meiner Schande komme seit Stunden nicht dahinter warum
das DOIF nicht zu Ende ausgeführt wird wenn der Dummy gleich Null als Zahl ist.
Ist der Wert größer als Null ausgelesen vom Modul PID20
um meine beiden Thermostate zu stellen funktioniert es.
Leider bekommt man es nur mit einer structure hin um mit PID20 mehrere Aktoren
gleichzeitig zu regeln.
Daher mein Versuch über ein Dummy und DOIF, um herauszufinden ob das benutzen von structure
mit ZWave als Ursache für massenhafte Loggeinträge möglich wäre als Hintergrund...

Mal das List vom fraglichen  DOIF

Internals:
   DEF        ([MyDummy:state:d]) ({fhem("set Thermostat1_UG_WZ,WOH_ZW_THERMOSTAT_OST tmManual")},
({fhem("set Thermostat1_UG_WZ,WOH_ZW_THERMOSTAT_OST dim [MyDummy:state]")}))


   FUUID      5cac4db6-f33f-cca1-9e2a-9340181c529f139e
   MODEL      FHEM
   NAME       di_wohnzimmerpid
   NR         350
   NTFY_ORDER 50-di_wohnzimmerpid
   STATE      initialized
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1554808592.04412
           VALUE      0
       cmd_event:
         myDbLog:
           TIME       1554807984.70514
           VALUE      MyDummy
       cmd_nr:
         myDbLog:
           TIME       1554807984.70514
           VALUE      1
       mode:
         myDbLog:
           TIME       1554808592.04412
           VALUE      enabled
       state:
         myDbLog:
           TIME       1554808592.04412
           VALUE      initialized
   READINGS:
     2019-04-09 13:16:32   cmd             0
     2019-04-09 13:16:32   mode            enabled
     2019-04-09 13:16:32   state           initialized
   Regex:
     accu:
   attr:
     cmdState:
     wait:
       0:
         0
         2
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'MyDummy','state','','d')
   devices:
     0           MyDummy
     all         MyDummy
   do:
     0:
       0          {fhem("set Thermostat1_UG_WZ,WOH_ZW_THERMOSTAT_OST tmManual")}, ({fhem("set Thermostat1_UG_WZ,WOH_ZW_THERMOSTAT_OST dim [MyDummy:state]")})
     1:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           MyDummy:state
     all         MyDummy:state
   uiState:
   uiTable:
Attributes:
   do         always
   room       Wohnung->Wohnzimmer
   wait       0,2


Danke für einen Ratschlag, Stubs

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Otto123

#1
Hallo Hans-Jürgen,

Deinen Text versteh ich nicht wirklich.  ::) ;)
Dein trigger: [MyDummy:state:d] - bedeutet für mich es wird das DOIF immer getriggert, wenn MyDummy einen Event wirft. Inhalt von state spielt keine Rolle. (do always gesetzt)
Edit: Der Inhalt von MyDummy:state:d müsste wahr sein, damit der Ausführungsteil ausgeführt wird. (Logische Werte für wahr: true oder 1, in Perl auch jede Zahl die nicht 0 ist)
Dein Ausführungsteil hat unnötigerweise {fhem("")} ohne Not - könnte man komplett weglassen.
Der zweite Befehl hat auch noch () aussen rum kann man auch weglassen.

Getriggert wurde das DOIF bisher nicht.

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

Ellert

Die Bedingungsprüfung wird ausgelöst wenn der Dummy ein Event liefert, wenn die Bedingung wahr ist, erfolgt die Befehlsausführung.

Welchen Wahrheitswert hat die Zahl 0?

Otto123

Zitat von: Ellert am 09 April 2019, 14:32:17
Welchen Wahrheitswert hat die Zahl 0?
Stimmt, daran hab ich nicht gedacht  ;D
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

Deckoffizier

Hallo,

Sorry für die Verwirrung....

habe noch weiter probiert
@Otto  ja war ist Absicht es soll immer getriggert werden wenn PID20 einen neuen Wert berechnet.

@Ellert Null wahr auch 0 soweit ok
aber der Aufhänger war die selbe Meldung von tmManual aus einem anderen DOIF bei der es nicht weiter ging.

habe das DOIF nun abgespeckt 
([MyDummy:state] <200) (set Thermostat1_UG_WZ tmManual,
set WOH_ZW_THERMOSTAT_OST tmManual,
set Thermostat1_UG_WZ dim [MyDummy],
set WOH_ZW_THERMOSTAT_OST dim [MyDummy])


und den Ausführungsteil in das andere DOIF eingefügt und scheint zu funktionieren.

Danke vielmals für Eure nette Hilfe!

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Per

Kurz
([MyDummy:state:d])
ist gleich wie
([MyDummy:state:d] != 0)

Ellert

Ergänzend: [d]||![d] ist immer logisch wahr ;) und die Befehle würden jedesmal ausgeführt werden.