FHEM Forum

FHEM - Hausautomations-Systeme => KNX/EIB => Thema gestartet von: JoeALLb am 04 Februar 2018, 16:59:50

Titel: stateCmd wird vor userreadings ausgewertet
Beitrag von: JoeALLb am 04 Februar 2018, 16:59:50
Hallo,

ich habe ein Device dessen Wert ich mir mit einem userreading "zusammenrechne".
Das Ergebnis daraus möchte ich nun im stateCmd als Status übernehmen.
Leider zeigt es mir immer den vorgergehenden Wert an, nicht den aktuellen des Readings.
Daraus schließe ich, dass stateCmd vor Userreadings ausgewertet wird, was ich für falsch halten würde....


sG
Joe
Titel: Antw:stateCmd wird vor userreadings ausgewertet
Beitrag von: Andi291 am 04 Februar 2018, 17:04:10
Servus!

StateCmd steht an letztmöglicher Stelle im Modul - alles andere entzieht sich meiner Kontrolle:

#execute state-command if defined
#must be placed after first reading, because it may have a reference
my $cmdAttr = AttrVal($name, "stateCmd", undef);
if (defined ($cmdAttr) and !($cmdAttr eq ""))
{
$state = eval $cmdAttr;
Log3 ($name, 5, "set name: $name - state replaced via command, result: state:$state");
}

readingsBulkUpdate($hash, "state", $state);
readingsEndUpdate($hash, 1);
Titel: Antw:stateCmd wird vor userreadings ausgewertet
Beitrag von: docm am 05 Februar 2018, 18:59:18
Das ist doch schon die Erklärung. UserReadings werden erst in readingsEndUpdate() aktualisiert.

Nun gibt es da halt immer einen Zielkonflikt:
Will man im UserReading den aktuellen Wert von state auswerten, wünscht man sich, dass zuerst stateCmd ausgeführt wird und dann das UserReading.
Will man im stateCmd auf das UserReading zugreifen, ist es gerade umgekehrt.
Die Logik der UserReadings ist, dass vor ihrer Berechnung alle echten Readings, also auch state ihren Wert erhalten haben.

@JoeAllb: Es ist zwar nicht sonderlich elegant, aber in diesem Fall würde ich folgendes empfehlen:
Definiere dein privates Reading nicht als UserReading, sondern aktualisiere es über den Code im stateCmd...
Viele Grüße
Andreas
Titel: Antw:stateCmd wird vor userreadings ausgewertet
Beitrag von: JoeALLb am 06 Februar 2018, 08:40:04
Danke Andreas.
Ich dachte, das wäre einer der Unterschiede zwischen stateCmd und stateFormat .....


Danke Andreas für den Workaround: In meinem Fall ist dieser sogar noch einfache, da es sich um einen reinen Zähler handelt: +1 dazurechnen ;-)
Auch nicht elegant, funktioniert aber auch!


sG
Joe