stateCmd wird vor userreadings ausgewertet

Begonnen von JoeALLb, 04 Februar 2018, 16:59:50

Vorheriges Thema - Nächstes Thema

JoeALLb

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
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

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);

docm

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

JoeALLb

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

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270