[gelöst] DOIF auslösen bei Änderung eines dummys

Begonnen von der_da, 02 Februar 2016, 11:37:01

Vorheriges Thema - Nächstes Thema

der_da

Folgendes Problem:
Ich habe in einem dummy du_Rollo_Zeit_ho_WE eine Zeit stehen, zu der die Rollläden hochgefahren werden sollen.
Ein anderer dummy du_Feiertag_morgen soll mit diesem Zeitpunkt gefüllt werden, wenn am nächsten Tag Feiertag ist.
Bisher rufe ich dieses DOIF kurz nach Mitternacht auf und es trägt die Zeit korrekt ein.
Nun möchte ich zusätzlich (DOELSEIF), dass bei einer manuellen Änderung des dummy du_Rollo_Zeit_ho_WE SOFORT eine Aktualisierung des dummy du_Feiertag_morgen erfolgt, und nicht erst bis kurz nach Mitternacht gewartet wird. Das DOIF soll also bei einer Änderung des dummys triggern. Irgendwie bekomme ich das aber nicht hin.
Mein (im DOELSEIF-Zweig leider nicht funktionierendes) DOIF:
([00:03] and (fhem("get Feiertage tomorrow") ne "none")) (set du_Feiertag_morgen [du_Rollo_Zeit_ho_WE])
DOELSEIF
([du_Rollo_Zeit_ho_WE:""] ) and (fhem("get Feiertage tomorrow") ne "none")) (set du_Feiertag_morgen [du_Rollo_Zeit_ho_WE])
DOELSE
([00:03]) (set du_Feiertag_morgen [du_Rollo_Zeit_ho])


Wie ist die Syntax korrekt?

Ellert

Dein Konstrukt scheint etwas umständlich, indirekte Zeitangaben werden hier erklärt http://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Einfacher geht es mit holiday2we  und holiday http://fhem.de/commandref_DE.html#holiday , wenn Du Feiertage und freie Tage in der holiday-Datei pflegst

direkte Zeit
([rollo_auf_Werktags|8] or [rolo_auf_WE_Feiertag|7])
indirekte Zeit
([[rollo_auf_Werktags]|8] or [[rolo_auf_WE_Feiertag]|7])

In Deiner Definition ist ein Klammerfehler:
Zitat([du_Rollo_Zeit_ho_WE:""] ) and (fhem("get Feiertage tomorrow") ne "none"))


der_da

Danke Ellert,
aber das löst mein Problem nicht. Die schließende Klammer die zu viel war, kam beim Copy und Paste ins Forum mit, in meiner Installation ist die Klammersetzung korrekt.
Ich habe holiday2we im Einsatz und pflege über die Datei Feiertage.holiday meine Feiertage. Die Rollläden fahren auch wie gewünscht an den Werktagen und Feiertagen hoch und runter.
Ich möchte eine Anzeige realisieren, die mir (und vor allem anderen Hausbewohnern :-) ) anzeigt, wann morgen die Rollläden hochfahren werden (Prüfung ob FHEM weiß, dass morgen Feiertag ist). Dafür soll in den dummy du_Feiertag_morgen entweder die Hochfahrzeit für werktags oder die Hochfahrzeit für Feiertag/Wochenende eingetragen werden (vielleicht ist die Bezeichnung des Dummys blöd gewählt). Auch das funktioniert bereits. Nur eben derzeit nur gegen Mitternacht einmalig. Wenn jetzt aber jemand im dummy du_Rollo_Zeit_ho_WE die Zeit ändert (sagen wir mal von 8:00 auf 8:30), dann steht im dummy du_Feiertag_morgen immer noch 8:00 Uhr, weil mein DOIF gegen Mitternacht den Wert ausgelesen und dort eingetragen hat. Nun soll das DOIF mitbekommen, dass da jemand "gedreht" hat und den dummy sofort aktualisieren und nicht bis Mitternacht warten (denn da schläft derjenige, der "gedreht" hat wahrscheinlich schon und kann nicht sicher sein, wann er/sie morgen geweckt wird  ;) )

l2r

#3
hi,

ich bin mir nicht sicher, ob das funktioniert, aber probier mal anstatt
[du_Rollo_Zeit_ho_WE:""]

folgendes:

[du_Rollo_Zeit_ho_WE:?state.*]

EIDT: Wobei wie ich gerade im CommandRef gelesen habe, du schon die neuere Syntax verwendest und ich noch die alte. Ergebnis sollte aber das gleiche nicht funktionieren sein...

hast du bei dem Dummy evlt ein event-on-change* attribut gesetzt und schließt so versehentlich Events aus?
Wissen ist Macht.
Ich weiß nix.
Macht nix.

der_da

Zitat von: l2r am 02 Februar 2016, 13:26:52
ich bin mir nicht sicher, ob das funktioniert, aber probier mal
[du_Rollo_Zeit_ho_WE:?state.*]
Genau das war es. Damit funktioniert es. Danke!
Aber genau genommen hast du Recht, das ist die Syntax, die man laut CommandRef nicht mehr verwenden soll  :o

Zitat von: l2r am 02 Februar 2016, 13:26:52
hast du bei dem Dummy evlt ein event-on-change* attribut gesetzt und schließt so versehentlich Events aus?
Nein, event-on-change ist hier nicht im Einsatz.

l2r

so sollte es auch laufen:

[du_Rollo_Zeit_ho_WE:"state.*"]


warum dann dein [du_Rollo_Zeit_ho_WE:""] nicht funktioniert erschließt sich mir allerdings nicht, da der Trigger ja noch größer gefasst ist.

und denke ggf an ein "do always" da sonst nur eine einmalige Aktualisierung durchgeführt wird.
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Damian

Zitat von: l2r am 02 Februar 2016, 13:56:42
so sollte es auch laufen:

[du_Rollo_Zeit_ho_WE:"state.*"]


warum dann dein [du_Rollo_Zeit_ho_WE:""] nicht funktioniert erschließt sich mir allerdings nicht, da der Trigger ja noch größer gefasst ist.

und denke ggf an ein "do always" da sonst nur eine einmalige Aktualisierung durchgeführt wird.

1. "state.*" wäre das Gleiche wie "state", da kein $ angehängt wird, wie beim notify

2. "state" abzufragen ist vermutlich keine gute Wahl, da normalerweise state bei Events nicht vorkommt

Gruß

Damian

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

l2r

nur damit ich das richtig verstehe

[du_Rollo_Zeit_ho_WE:?state.*] = [du_Rollo_Zeit_ho_WE:"state.*"] = [du_Rollo_Zeit_ho_WE:"state"]

ist das richtig?

nur das ?state.* alte Syntax ist?
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Damian

Zitat von: l2r am 02 Februar 2016, 17:58:33
nur damit ich das richtig verstehe

[du_Rollo_Zeit_ho_WE:?state.*] = [du_Rollo_Zeit_ho_WE:"state.*"] = [du_Rollo_Zeit_ho_WE:"state"]

ist das richtig?

nur das ?state.* alte Syntax ist?

ja und vollständigkeitshalber: ?state.* = ?state

Gruß

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

l2r

okay, danke

Dann versteh ich immer noch nicht, warum [du_Rollo_Zeit_ho_WE:""] das nicht funktioniert. Weil "" triggert ja auf alle Events, einschließlich der, die state enthalten...
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Damian

Zitat von: l2r am 02 Februar 2016, 18:03:50
okay, danke

Dann versteh ich immer noch nicht, warum [du_Rollo_Zeit_ho_WE:""] das nicht funktioniert. Weil "" triggert ja auf alle Events, einschließlich der, die state enthalten...

Bei mir schon, es sei denn man arbeitet nicht mit der aktuellsten Version.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

l2r

okay, dann schieb ich das mal auf die Version von @der_da

Somit hätte ein Update von DOIF bei ihm auch gereicht.

Alle Unklarheiten beseitigt. Danke
Wissen ist Macht.
Ich weiß nix.
Macht nix.

der_da

OKOKOK,

nach einem Update
und einem
shutdown restart

funktioniert nun auch die erste Variante  ;D
DANKE! ;)