DOIF schaltet mit falschem Timer ? TimerNr. versetzt um 1

Begonnen von Ellert, 13 Januar 2017, 10:15:21

Vorheriges Thema - Nächstes Thema

Ellert

Mit dieser Version sieht es erstmal gut aus, das erste Beispiel von heute läuft wie erwartet,

auch das Beispiel mit der Schaltuhr läuft wieder (da hast Du schon einen Link hier her gepostet)

auch das Beispiel mit den Tageszeiten https://forum.fhem.de/index.php/topic,65744.0.html ist davon betroffen, jedenfalls bei mir.

Damian

Zitat von: Ellert am 27 Januar 2017, 19:20:50
Mit dieser Version sieht es erstmal gut aus, das erste Beispiel von heute läuft wie erwartet,

auch das Beispiel mit der Schaltuhr läuft wieder (da hast Du schon einen Link hier her gepostet)

auch das Beispiel mit den Tageszeiten https://forum.fhem.de/index.php/topic,65744.0.html ist davon betroffen, jedenfalls bei mir.

Ich habe eine korrigierte Version eingecheckt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gloob

Vielen Dank für die schnelle Lösung des Problems
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Damian

In diesem Zusammenhang ist mir aufgefallen, dass durch die Nutzung indirekter Timer mit eigenen Readings des selben Moduls zum unnötigen Triggern des Moduls führt.

Beispiel:

DOIF ([[$SELF:P_a_hms,"07:00"]])
DOELSEIF ([([$SELF:P_a_hms,"07:00"]+15)])


alleine die Zustandsänderung des Moduls sowie das Setzen eines beliebigen Readings des Moduls führt zum Neusetzen beider Timer, weil Standardmäßig auf jeden Trigger eines Devices reagiert wird.

Aus diesem Grund plane ich checkReadingEvent für indirekte Timer intern als default zu setzen. Das hätte den positiven Nebeneffekt, dass die oft benutzten twilight-Readings standardmäßig nicht alle fünf Minuten zum Neusetzen der Timer führen würden, weil wohl die wenigsten an der Stelle an das Attribut checkReadingEvent denken.

Indirekte Timer auf Stati z. B. [[my_dummy]] würden weiterhin auf alle Trigger reagieren, wie bisher. Wenn man nur auf den Status reagieren möchte dann kann man [[my_dummy:state]] angeben  - das funktioniert sogar ohne das Setzen des addStateEvent Attributs.

Für allgemeine Events soll checkReadingEvent natürlich weiterhin nicht als default gelten (das habe ich bereits aus Kompatibilitätsgründen schon früher verworfen), das Attribut kann bei bedarf für Events wie bisher gesetzt werden.

hier eine Version zum Testen:

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Das funktioniert dann nicht mehr:


defmod Pumpe_Labor DOIF ([$SELF:Laufzeit]) (set Pumpe on) (set Pumpe off)\
DOELSE (set Pumpe off)
attr Pumpe_Labor readingList Laufzeit
attr Pumpe_Labor room DOIF_Labor
attr Pumpe_Labor setList Laufzeit:0,0.5,1,1.5,2,2.5,3
attr Pumpe_Labor wait 0,[$SELF:Laufzeit] * 3600:0
attr Pumpe_Labor webCmd Laufzeit

defmod Pumpe dummy
attr Pumpe room DOIF_Labor


Damian

Zitat von: Ellert am 28 Januar 2017, 07:56:52
Das funktioniert dann nicht mehr:


defmod Pumpe_Labor DOIF ([$SELF:Laufzeit]) (set Pumpe on) (set Pumpe off)\
DOELSE (set Pumpe off)
attr Pumpe_Labor readingList Laufzeit
attr Pumpe_Labor room DOIF_Labor
attr Pumpe_Labor setList Laufzeit:0,0.5,1,1.5,2,2.5,3
attr Pumpe_Labor wait 0,[$SELF:Laufzeit] * 3600:0
attr Pumpe_Labor webCmd Laufzeit

defmod Pumpe dummy
attr Pumpe room DOIF_Labor



Warum nicht? Ich sehe hier keine indirekten Timer. Bei mir funktioniert es, würde mich auch wundern wenn nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Das war mein Fehler das DOIF stand noch auf cmd_1_1, warum auch immer und der wait_timer war none.

Ohne do always und ohne zu initialisieren ist garnichts passiert und ich hatte es so interpretiert als wäre das DOIF bei cmd_1_1 stehen geblieben.

Es funktioniert nach Initialisierung normal.