[gelöst] 2 x ReadingsVal in DOIF, nur eines wird ausgewertet

Begonnen von dadoc, 20 November 2024, 11:28:17

Vorheriges Thema - Nächstes Thema

dadoc

Hallo zusammen,
ich bekomme es einfach nicht hin, in einem DOIF ein at (EarlyBird_at) mit zwei aus Dummies stammenden Parametern (Ausführungszeitpunkt aus EarlyBird_d, Wert für set-Befehl aus EarlyBirdTemp_d:solltemperatur) zu erzeugen. Das at soll eine Gruppe von HM-Heizkörperthermostaten (EarlyBird) zu einem bestimmten Zeitpunkt auf eine bestimmte Temperatur setzen.
Was funktioniert:
   
([EarlyBird_d:""])
(define EarlyBird_at at {ReadingsVal("EarlyBird_d","state","")} set group=EarlyBird desired-temp 20.5)
Hierbei wird der Ausführungszeitraum korrekt per ReadingsVal aus dem Dummy übernommen.
Was in allen mir eingefallenen Klammerungs- und Anführungszeichen-Varianten nicht funktioniert ist:
   
([EarlyBird_d:""])
(define EarlyBird_at at {ReadingsVal("EarlyBird_d","state","")} set group=EarlyBird desired-temp {ReadingsVal('EarlyBirdTemp_d','solltemperatur','')})

Dabei steht in COMMAND des erzeugten at immer etwas wie
   
set group=EarlyBird desired-temp {ReadingsVal('EarlyBirdTemp_d','solltemperatur','')}
statt des Wertes aus dem Dummy.
Was mache ich da falsch?
Danke & Grüße
Martin

Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

dadoc

Habs jetzt selbst lösen können:
([EarlyBird_d:""])
(defmod EarlyBird_at at {ReadingsVal("EarlyBird_d","state","")} set group=EarlyBird desired-temp [EarlyBirdTemp_d:solltemperatur])
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

Per

Warum verwertest du den zweiten Wert nicht direkt im DOIF? Dann musst du kein extra at kreieren und damit jedesmal die Konfig ändern.
([EarlyBird_d:""])(setReading $SELF temp [EarlyBirdTemp_d:solltemperatur])
([[EarlyBird_d:time]]) (set group=EarlyBird desired-temp [$SELF:temp])
Wobei der erste Trigger wahrscheinlich angepasst werden sollte.

Wenn man wüsste, wie der Dummy EarlyBirdTemp_d befüllt wird, könnte man bestimmt noch weiter vereinfachen.

dadoc

Vielen Dank,
Du hast Recht (und ich habe mich in letzter Zeit viel zu wenig mit DOIF beschäftigt).
Zitat von: Per am 21 November 2024, 07:56:06Wobei der erste Trigger wahrscheinlich angepasst werden sollte.
Wenn man wüsste, wie der Dummy EarlyBirdTemp_d befüllt wird, könnte man bestimmt noch weiter vereinfachen.
EaryBird_d hatte ich mit dem datetimepicker von FTUI befüllt; ich habe das Datumsformat jetzt mal fürs DOIF auf DD-MM-YYYY HH:MM:SS angepasst
EarlyBirdTemp_d wird in FTUI mit einem spinner-Slider mit der Wunschtemperatur befüllt (das Reading solltemperatur habe ich entfernt, Wunschtemperatur geht direkt in state).
Angeregt durch Deinen Vorschlag setze ich nun die Wunschtemperatur direkt in das temp-Reading des DOIFs (per setreading). Hat den Vorteil, dass nun auch bei bereits erstelltem DOIF-Timer noch die Temperatur geändert werden kann.
Jetzt wollte ich auch noch den Ausführungszeitpunkt statt in den Dummy direkt in ein DOIF-Reading (wann) schreiben. Das klappt zwar, aber ich habe nicht herausgefunden, wie ich das Reading als Ausführzeitpunkt verwende.
   
([EarlyBird_d:""])(setReading $SELF temp [])
(setreading $SELF wann [])
([[$SELF:wann]]) (set group=EarlyBird desired-temp [$SELF:temp])
geht nicht, ([$SELF:wann]) auch nicht und $SELF:wann:time wirft einen Fehler.
Geht das überhaupt?
Danke & Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods