Problem mit userreadings, die durch userreading mit modifier getriggert werden

Begonnen von vbs, 10 Juli 2015, 11:57:47

Vorheriges Thema - Nächstes Thema

vbs

Ich habe zwei userreadings: Eins wird durch ein normales vorhandenes Reading getriggert. Und das zweite userreading soll vom ersten userreading getriggert werden.

Also ungefähr so:
gasCntPrevDiff:gasCnt {ReadingsVal("env_gasMeter","gasCnt",0)}, gasPowerReal2:gasCntPrevDiff {gasRealPower2()}

Das userreading "gasCntPrevDiff" entspricht hier noch 1:1 dem Ausgangs-Reading gasCnt. Das zweite userreading gasPowerReal2 wird korrekt angelegt mit jedem Trigger durch "gasCntPrevDiff".

Jetzt möchte ich jedoch den modifier "difference" beim ersten Userreading nutzen:
gasCntPrevDiff:gasCnt difference {ReadingsVal("env_gasMeter","gasCnt",0)}, gasPowerReal2:gasCntPrevDiff {gasRealPower2()}

Nun enthält zwar das Reading "gasCntPrevDiff" korrekt die Differenz, jedoch wird nun das zweite Reading ("gasPowerReal2") gar nicht mehr aktualisiert :( Scheint wirklich an dem modifiert zu liegen: Sobald ich den modifier hinzufüge, wird das zweite Reading nicht mehr aktualisiert.

Hat jemand eine Ahnung warum? Danke!

rudolfkoenig

Ich vermute das Problem liegt daran, dass die userReadings in einer nicht definierter Reihenfolge ausgefuehrt werden.

vbs

Hm, das mit der Reihenfolge ist mir nicht so ganz klar: Der Trigger kommt ja einfach gar nicht mehr. Und ja auch erst seit dem modifier "difference". :/

Reihenfolge wäre für mich zwar auch wichtig, aber sieht bisher immer so aus im EventMonitor:
2015-07-10 12:36:39 CUL_HM env_gasMeter gasCnt: 1.04
2015-07-10 12:36:39 CUL_HM env_gasMeter gasPower: 0.009
2015-07-10 12:36:39 CUL_HM env_gasMeter gasOverall: 4174.335
2015-07-10 12:36:39 CUL_HM env_gasMeter gasCntPrevDiff: 0
2015-07-10 12:36:39 CUL_HM env_gasMeter gasCntPrev: 1.04
2015-07-10 12:36:39 CUL_HM env_gasMeter gasPowerReal: 0


Ist also sowas generell nicht zu empfehlen (userreadings von userreadings)? Gibt es für so einen Fall einen Workaround oder Plan B? Mir würden jetzt nur zB notifies einfallen.

rudolfkoenig

in einem userReadings mit anderen userReadings zu rechnen ist z.Zt. nicht zu empfehlen wg. der nicht deterministischen Reihenfolge.

Wenn man mehrere voneinander abhaengige UserReadings haben will, dann kann man diese in einer Funktion tun, die von einem UserReading aufgerufen wird, und die die anderen Readings via readingsBulkUpdate (ohne Begin oder End!) aendert. Die userReadings features (difference/etc) muss man selbst implementieren.

vbs

Ok, hab ich umgebaut auf eine Funktion und das sieht jetzt gut aus! Danke Chef!