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

dadoc

Muss nochmal auf das Thema zurückkommen. Eigentlich dachte ich, dass es im November funktioniert hat, wenn auch mit dem zweiten Dummy für die Wunschtemperatur. War aber wohl nicht der Fall, da der set-Befehl immer sofort nach Änderung des Dummies EarlyBird_d ausgeführt wurde und nicht zum gesetzten Zeitpunkt. Ziel ist ja, dass zu einem bestimmten Datum und einer bestimmten Uhrzeit der set-Befehl ausgeführt wird. Datum und Uhrzeit setze ich mit einem datetimepicker in einen Dummy. Der enthält dann z.B. 26-01-2024 07:00:00
Daher habe ich mich gestern nochmal reingekniet. Bin die vorbildliche DOIF-Dokumentation in all ihren Erscheinungsformen nochmal durchgegangen, inkl. Forumsdiskussionen. Und wurde nicht fündig. Ist es tatsächlich nicht möglich, im DOIF eine Zeitsteuerung mit Datum und Uhrzeit (im Stil von [[dummy_mit_data-format = "d-m-Y H:i:00"]]) ohne "Verrenkungen" mit Splitten des Zeitpunkts o.ä, zu definieren, oder war ich nur zu blöd zum Finden?
Nach dem Setzen des Ausführungszeitpunkts steht in den Readings des DOIF
e_EarlyBird_d_events 23-01-2025 12:15:00.
Wenn ich das DOIF testweise vereinfache auf
   
([[EarlyBird_d:state]])
(set group=EarlyBird desired-temp 10.00)
bekomme ich
error: Wrong timespec 23-01-2025 12:15:00: either HH:MM:SS or {perlcode}
Wie müsste denn der perlcode aussehen, um dem DOIF als Trigger zu dienen?
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

Damian

Zitat von: dadoc am 23 Januar 2025, 12:16:58Bin die vorbildliche DOIF-Dokumentation in all ihren Erscheinungsformen nochmal durchgegangen, inkl. Forumsdiskussionen. Und wurde nicht fündig.


Dann hast du bestimmt das hier überlesen https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen

Für deinen Fall dann:

([[EarlyBird_d:state:"(\d\d:\d\d:\d\d)"]])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dadoc

Danke Damian,
das hatte ich nicht überlesen, aber nicht in Zusammenhang mit meiner Fragestellung gebracht :-/
ZitatFür deinen Fall dann:
([[EarlyBird_d:state:"(\d\d:\d\d:\d\d)"]])
Das tut nicht ganz das, was ich will, denn es extrahiert ja nur die Zeit, nicht aber das Datum. IMO macht Dein Vorschlag dasselbe wie
([[EarlyBird_d:state]])wenn im Dummy eine Uhrzeit wie 15:30:00 steht?
Was ich möchte dass es an dem Datum und zu der Uhrzeit triggert, die im Dummy z.B. als 24-01-2025 15:35:00 stehen.
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

Damian

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

dadoc

Ja, das habe ich bemerkt bzw. befürchtet. Ich dachte, dass es da vielleicht einen Workaround gibt (Unixzeit o.ä.).
Dann muss ich wohl doch wieder zur at-im-DOIF-Idee aus Post #1 zurück, aber bei der habe ich ja auch nach wie vor die beschriebenen Probleme.
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

Du kannst auf die Zeit triggern und anschließend das Datum auf heute testen.

dadoc

#10
Zitat von: Per am 23 Januar 2025, 16:06:18Du kannst auf die Zeit triggern und anschließend das Datum auf heute testen.
Gute Idee, das werde ich mal ausprobieren, danke.
Mittlerweile habe ich zumindest mal das Problem aus #1 lösen können, dank der dezenten Hinweise des DOIF-Tools. So geht es:
([EarlyBird_d:""])
(define EarlyBird_at at [EarlyBird_d:state,0] set group=EarlyBird desired-temp [EarlyBirdTemp_d:state,0])
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

Problem ist, wenn sich der Wert zwischenzeitlich ändert...

Damian

hier wird zusätzlich das Datum herausgefiltert und mit und abgefragt:

([[EarlyBird_d:state:"(\d\d:\d\d:\d\d)"]] and [EarlyBird_d:state:"(\d\d)-(\d\d)-(\d\d\d\d\)":"$3-$2-$1"] eq $ymd)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF