Autor Thema: HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading  (Gelesen 651 mal)

Offline dr4g0n

  • New Member
  • *
  • Beiträge: 8
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.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17183
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #1 am: 13 März 2018, 11:48:54 »
Es gibt dafür seit einigen Tagen das Attribut oldreadings. Schau bitte in die Commandref dazu.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10660
    • Otto's Technik Blog
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #2 am: 13 März 2018, 11:49:46 »
Hi,

ich würde ein usereadings machen und modifier difference nehmen
Zitat
userReadings
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
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline dr4g0n

  • New Member
  • *
  • Beiträge: 8
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #3 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.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17183
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #4 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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline dr4g0n

  • New Member
  • *
  • Beiträge: 8
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #5 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
« Letzte Änderung: 13 März 2018, 17:08:28 von dr4g0n »

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17183
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #6 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)) }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline dr4g0n

  • New Member
  • *
  • Beiträge: 8
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #7 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) }

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17183
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #8 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))) }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer
Hilfreich Hilfreich x 1 Liste anzeigen

Offline dr4g0n

  • New Member
  • *
  • Beiträge: 8
Antw:HTTPMOD/JSON - Notify mit differenz zwischen altem/neuem Reading
« Antwort #9 am: 15 März 2018, 11:23:59 »
wunderbar, genau so funktioniert es :)