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
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
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?
Zitat von: Ellert am 09 April 2019, 14:32:17
Welchen Wahrheitswert hat die Zahl 0?
Stimmt, daran hab ich nicht gedacht ;D
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
Kurz
([MyDummy:state:d])
ist gleich wie
([MyDummy:state:d] != 0)
Ergänzend: [d]||![d]
ist immer logisch wahr ;) und die Befehle würden jedesmal ausgeführt werden.