[gelöst] Syntax zur Verwendung von $hms in Userreadings

Begonnen von Wolle02, 06 Juli 2022, 14:52:20

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: Wolle02 am 09 Juli 2022, 09:41:51
Leider wird auch hier das Userreading ständig aktualisiert, egal wieviele Sekunden seit Mitternacht vergangen sind. Irgendwie wird die Bedingung ignoriert.

Wo sind meine Denkfehler?

Ok, ich habe das jetzt mal hier mit dem vorgeschlagenen Weg nachgebaut. Das userReading wird tatsächlich immer aktualisiert, aber die Berechnung des Wertes, der in das Userreading geschrieben wird, funktioniert korrekt mit secondsFromMidnight().

Man muss dafür sorgen, dass im "Negativfall" ein undef als Ergebnis geliefert wird, dann bleibt die Aktualisierung des userReadings aus.

attr test userReadings kWhExported_day_init:Timestamp.* {(secondsFromMidnight() < 30) ? ReadingsVal($name,"WhExported",0)/1000 : undef }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: betateilchen am 09 Juli 2022, 11:21:57
Man muss dafür sorgen, dass im "Negativfall" ein undef als Ergebnis geliefert wird, dann bleibt die Aktualisierung des userReadings aus.
Jein. Es braucht eigentlich kein explizites undef, nur wird eben in dem postfix-if-Fall wohl das Ergebnis der letzten Prüfung zurückgemeldet, und die dürfte eben "0" sein...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

Zitat von: Beta-User am 09 Juli 2022, 11:29:27
Es braucht eigentlich kein explizites undef

Doch. Wenn Du es nicht glaubst, probier es einfach aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: betateilchen am 09 Juli 2022, 11:47:40
probier es einfach aus.
done:
defmod tdummy dummy
attr tdummy userReadings kWhExported_day_init:Timestamp.* {return if (localtime)[1] || (localtime)[2] || (localtime)[0] > 29 || ReadingsAge($name,'kWhExported',31) < 30;; return ReadingsVal($name,'WhExported',0)/1000},\
kWhExported_day_init2:Timestamp.* {if ((localtime)[1] || (localtime)[2] || (localtime)[0] > 29 || ReadingsAge($name,'kWhExported2',31) < 30) {return;;} return ReadingsVal($name,'WhExported',0)/1000},\
kWhExported_day_init3:Timestamp.* {if (!(localtime)[1] || !(localtime)[2] || ReadingsAge($name,'kWhExported3',31) < 30) {return;;} return ReadingsVal($name,'WhExported',0)/1000}

setstate tdummy 2022-07-09 12:55:21 Timestamp 1
setstate tdummy 2022-07-09 12:51:45 WhExported 222
setstate tdummy 2022-07-09 12:55:21 kWhExported_day_init3 0.222
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Wolle02

Vielen Dank @Beta-User und @betateilchen für eure Unterstützung und Erklärungen. Das Userreading wird mit der Variante von betateilchen nun korrekt befüllt. Bei der Varainte von Beta-User muss ich zugegebenermaßen noch etwas rumexperimentieren bis ich die Logik wirklich kapiert habe.
Jedenfalls glaube ich wieder was gelernt zu haben.  :D