userReading difference innerhalb Funktion?

Begonnen von thuranga, 12 Februar 2018, 09:31:00

Vorheriges Thema - Nächstes Thema

thuranga

Hallo zusammen,
ich möchte erst mal kurz mein Problem darstellen: Mittels userReading und difference kann ich den Verbrauch berechnen:

attr ecometer userReadings oelverbrauch difference {ReadinsVal("ecometer","RemainingUsableLevel",0)}

Das klappt auch prinzipiell, aber ich erhalte immer einen negativen Wert zurück.

Ich möchte nun per selbstgeschriebener Funktion

1.) den Wert als positive Zahl zurückgeben
2.) Wenn ein Meßfehler stattgefunden hat (also eine postive Zahl statt einer negativen), dann soll nur eine "0" zurückgegeben werden.

Kann ich in einer Funktion auch auf das Ergebnis von

userReadings oelverbrauch difference

zugreifen? Denn ich brauche ja die Differenz von zwei Messungen

Viele Grüße
Brownlow

Otto123

Hi,

das userReading ist ein normales Reading. {ReadinsVal("ecometer","oelverbrauch",0)}
Oder ich versteh Dich nicht.

Also theoretisch müsstest Du damit sogar wieder ein neues userreading machen können. Es kann sein das dabei ein Henne/Ei Problem entsteht.
Aber versuch es doch einfach mit dem trigger
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).

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

thuranga

Hallo Otto,
wahrscheinlich sehe ich deinen Denkanstoß dahinter nicht  :-[

Das Reading

{ReadinsVal("ecometer","oelverbrauch",0)}

ist ganz normal. Aber wie meinst du das mit dem Trigger bzw neues userreading?

Zitat<reading>[:<trigger>] [<modifier>] { <perl code> }

Das nutze ich in der Form (ohne Trigger) schon:

attr ecometer userReadings oelverbrauch difference {ReadinsVal("ecometer","RemainingUsableLevel",0)}

und das schreibt mir einen negativen Wert in das reading "oelverbrauch". An der Stelle will ich genau ansetzen und per sub den Wert, den ich durch den modifier "difference" erhalte ins positive umkehren. Dazu müsste ich doch aber den modifier irgendwie in der Funktion anwenden können und da hänge ich

Oder es gibt eine ganz andere Lösung, die ich noch nicht sehe

Otto123

#3
Hi,

Du hast doch das reading, anstatt Dir Gedanken zu machen wie Du das in dieses Reading bekommst, mach doch ein neues?!

Also Userreading vom Userreading.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

thuranga

Hallo Otto,
ich glaube, ich habe deinen Tipp jetzt endlich verstanden und schaue mal, ob meine Umsetzung so funktioniert  ::)

Danke für deine Unterstützung!