FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dr4g0n am 13 März 2018, 11:32:22

Titel: HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: dr4g0n am 13 März 2018, 11:32:22
Hallo,

ich habe ein HTTPMOD das JSON abfragen durchführt.
Dort gibt es ein Reading welches einen Wert hat, sobald sich dieser Wert ändert möchte ich ein Notify auslösen mit dem Differenzwert!
Hierfür muss ich den OldValue bekommen und eine Subtraktion durchführen.

Wie löse ich am besten das mit dem alten Wert?

Danke schon mal.
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: CoolTux am 13 März 2018, 11:48:54
Es gibt dafür seit einigen Tagen das Attribut oldreadings. Schau bitte in die Commandref dazu.
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: Otto123 am 13 März 2018, 11:49:46
Hi,

ich würde ein usereadings machen und modifier difference nehmen
ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Beispiele:
attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}
<modifier> kann die folgenden Werte haben:
none: als ob man es gar nicht spezifiziert hätte.
difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.

Gruß Otto
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: dr4g0n am 13 März 2018, 15:57:19
Danke für die schnelle Hilfe, irgendwie steige ich durch die Attribute nicht so ganz durch.

Ich habe

attr Gerät1 oldreadings ValueImReading

Ich möchte gerne OldValueImReading - NewValueImReading = Differenz;

Die Differenz benötige ich dann im Notify.
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: CoolTux am 13 März 2018, 16:04:11
Im Notify einfach OldReadingsVal() - ReadingsVal() machen.
Solltest du mehr Hilfe brauchen bitte list vom HTTPMOD Device und vom Notify
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: dr4g0n am 13 März 2018, 17:06:16
Derweil bekommt ich als Message in Telegram nur "ValueChange: {OldReadingsVal() - ReadingsVal()}"
Wie kann ich die Werte einsetzen bzw das "OldReadings" aus dem Device auslesen? Normale Abfragen werden ja mit [HTTPValueRequest:CurrentValue] gemacht.
Also ich habe gerade gesehen das ich im Device (Name: HTTPValueRequest) folgenden Eintrag habe wenn ich auf List gehe:

   OLDREADINGS:
     2018-03-13 16:58:53   CurrentValue 123456789

Dazu hier die Attr des Devices:

Attributes:
   event-on-change-reading CurrentValue
   extractAllJSON 1
   oldreadings CurrentValue


Hier ist mein Notify

Internals:
   DEF        HTTPValueRequest set Telegram message ValueChange: {OldReadingsVal() - ReadingsVal()}
   NAME       notify_HTTPValueRequest_sendMessage
   NOTIFYDEV  HTTPValueRequest
   NR         212
   NTFY_ORDER 50-notify_HTTPValueRequest_sendMessage
   REGEXP     HTTPValueRequest
   STATE      2018-03-13 17:03:53
   TYPE       notify
   READINGS:
     2018-03-13 16:17:44   state           active
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: CoolTux am 13 März 2018, 17:28:45
Code bitte immer in Codetags. Und Du solltest Du bitte mit Perlfunktionen beschäftigen.

Nun zu Deinem HTTPMOD Device. Ich gehe davon aus das Du ein Reading meinst. Ist CurrentValue ein Reading?

Dann muss Dein Notify so aussehen


DEF        HTTPValueRequest:CurrentValue:.* { fhem('set Telegram message ValueChange: ' . OldReadingsVal($NAME,'CurrentValue',0) - $EVTPART1) }


Probier das mal. Du kannst das auch oben in der FHEMWEB Kommandozeile testen. Musst dann aber die Variablen durch die tatsächlichen Namen/Werte ersetzen. In etwa so


{ fhem('set Telegram message ValueChange: ' . OldReadingsVal('HTTPValueRequest','CurrentValue',0) - ReadingsVal('HTTPValueRequest','CurrentValue',0)) }
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: dr4g0n am 13 März 2018, 17:47:45
Vielen vielen dank für deine Hilfe CoolTux.

So ähnlich hatte ich es mir auch gerade zusammen gebaut. :)

Bei deiner letzten Zeile erhalte ich folgende Fehlermeldung:

Unknown command -221200000000, try help.

Derzeit befinden sich folgende Values in den Var
OldReadingsVal: 221200000001
ReadingsVal:      221200000000


Wenn ich die Funktion gesondert ausführe, dann funktioniert die Kalkulation.
{OldReadingsVal('HTTPValueRequest','CurrentValue',0)}-{ReadingsVal('HTTPValueRequest','CurrentValue',0) }
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: CoolTux am 13 März 2018, 17:54:59
Dann probiere mal so


{ fhem('set Telegram message ValueChange: ' . (OldReadingsVal('HTTPValueRequest','CurrentValue',0) - ReadingsVal('HTTPValueRequest','CurrentValue',0))) }
Titel: Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
Beitrag von: dr4g0n am 15 März 2018, 11:23:59
wunderbar, genau so funktioniert es :)