Rechnen mit UserAttributen

Begonnen von uxtuner, 09 November 2019, 08:47:54

Vorheriges Thema - Nächstes Thema

uxtuner

Hallo,

ich möchte für den Gasverbrauch den Offset und Umrechnungswert in ein User Attribut legen und dann im Userreading die Berechnung für "value" machen.
Wie lautet das korrekte Statement für das "userReadings value"?


Internals:
   DEF        EseraCount_ESERA_1C0000000FF1501D:count2
   DEVICE     EseraCount_ESERA_1C0000000FF1501D
   FUUID      5dbf0103-f33f-55bb-bb4f-b365b3d1b1a6bbcb
   NAME       counter_gas
   NOTIFYDEV  global,EseraCount_ESERA_1C0000000FF1501D
   NR         189
   NTFY_ORDER 50-counter_gas
   READING    count2
   STATE      7722.70 m3
   TYPE       readingsProxy
   CONTENT:
     EseraCount_ESERA_1C0000000FF1501D 1
   READINGS:
     2019-11-09 08:40:36   state           393715
     2019-11-09 08:40:36   value           7722.7
Attributes:
   event-on-change-reading state
   multiplier 0.01
   offset     3785.55
   stateFormat {sprintf("%.2f m3",ReadingsVal($name,"state","?")/100+3785.55 )}
   userReadings value { ReadingsVal("counter_gas","state",0)*0.01+3785.55 }
#value { ReadingsVal("counter_gas","state",0)*ReadingsVal("counter_gas","multiplier",0)+ReadingsVal("counter_gas","offset",0) }
   userattr   offset multiplier
Viele Grüße
  Uwe

Intel NUC (VDR & FHEM & HA & AgentDVR), QNAP TS-453, Esera OneWire (8-fach Schalter, Hub, Controller II), EDS 1-Wire Server, Mosquitto Server, Wolf CGW-2 m. ISM7MQTT, Shelly (Plug S, H&T, 2.5, 1 PM, Floodsensor/Rauchmelder), Tado (Thermostat V3+) etc.

OdfFhem

@uxtuner

Neben ReadingsVal gibt es noch AttrVal und InternalVal.
Und die entsprechenden, numerischen Varianten.


  • AttrVal(<devicename>,<attribute>,<defaultvalue>)
    Gibt das entsprechende Attribut des Gerätes zurück
  • AttrNum(<devicename>,<attribute>, <defaultvalue>,<round>)
    Gibt die erste Zahl aus dem Attributwert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet.

  • InternalVal(<devicename>,<internal>, <defaultvalue>)
    Gibt den Inhalt der "internal" zurück (den Inhalt der in dem "Internals"-Abschnitt von "list device" angezeigt wird)
  • InternalNum(<devicename>,<internal>, <defaultvalue>,<round>)
    Gibt die erste Zahl aus dem "internal" zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet.

  • ReadingsVal(<devicename>,<reading>,<defaultvalue>)
    Gibt den Inhalt der "readings" zurück (den Inhalt der in dem "Readings"-Abschnitt von "list device" angezeigt wird)
  • ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
    Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet.

uxtuner

Danke!

ich habe meinen obigen Versuch so geändert:

value { ReadingsVal("counter_gas","state",0)*AttrVal("counter_gas","multiplier",0)+AttrVal("counter_gas","offset",0) }


und schon funktionierts :-)
Viele Grüße
  Uwe

Intel NUC (VDR & FHEM & HA & AgentDVR), QNAP TS-453, Esera OneWire (8-fach Schalter, Hub, Controller II), EDS 1-Wire Server, Mosquitto Server, Wolf CGW-2 m. ISM7MQTT, Shelly (Plug S, H&T, 2.5, 1 PM, Floodsensor/Rauchmelder), Tado (Thermostat V3+) etc.