vorhergehenden Status ermitteln

Begonnen von NeuFehm, 05 Januar 2016, 14:30:55

Vorheriges Thema - Nächstes Thema

NeuFehm

Ich habe ein dummy "Rollo1" mit dem "Stufen" 0 25 50 75 100

Wenn ich nun 50 klicke, dann hat er den Status 50. Alles gut.
Nun möchte ich ein notify erstellen, was mit den zurückzulegenden Weg ermittelt.
Klicke ich auf 75, fährt der Motor noch 25, da ja schon 50 erledigt sind.
Alles funktioniert soweit, allerdings, woher bekomme ich den "vorherigen" Status?
Mein
my $Status = ReadingsVal("Rollo1", "state", 0);
my $Ziel = $EVENT;

haben beide den Wert 75 und nicht wie gehofft "ReadingsVal" 50 und EVENT 75.
Eigentlich auch verständlich ;)
Habt Ihr ne Idee?

Vlt. gibts ja sowas wie ein ReadingsVal("Rollo1", "state -1", 0);
;)
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

betateilchen

Du kannst einem dummy soviele Readings zuweisen, wie Du möchtest. Gib dem Dummy einfach ein reading "alterWert" und schreibe da am Ende (!) Deines notify immer den dann aktuellen Wert rein.

Beim nächsten notify steht dann im event der neue Wert und in "alterWert" immer noch der vorherige.

Deine bisherige Logik kann nicht funktionieren, weil Dein notify erst NACH dem Ändern des Status ausgelöst wird. Zu diesem Zeitpunkt ist der aktuelle Wert bereits überschrieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

NeuFehm

#2
wärst Du so lieb mir die entsprechende Zeile zu schreiben?
geht das in die Richtung?

attr Rollo1 userReadings alterWert 0

oder eher im notify in Richtung:
set alterWert $EVENT

Ahhh!
setreading Rollo1 alterWert 50
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

Elektrolurch

Das reading state sollte vom device unter Berücksichtigung vom Attribut eventMapping auf STATE$ abgebildet werden.
STATE kann über die funktionen Value(devname) und der alte Wert über OldValue(devname)
abgefragt werden. (perl)

Elektrolurch
configDB und Windows befreite Zone!

betateilchen

Von userReading habe ich nirgends etwas geschrieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!