FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Helmi55 am 30 Dezember 2021, 17:43:53

Titel: #erledigt# Wert in UserReadings abziehen
Beitrag von: Helmi55 am 30 Dezember 2021, 17:43:53
Hallo Gemeinde,
ich habe div. Shellies im #einsazt die mir den aktuellen Verbrauch melden.
Nun möchte ich z.B. zum Jahreswechsel oder bei der Stromablese, die Kosten auf Null setzen.
Ich berechne so:
relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0)*.2);;}

Wenn ich nun den "Stand" abziehen möchte:

relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh -1.0",0)*.2);;}

Wobei -1.0 der Stand vom Vortag ist, bleiben noch immer 0.3475 kWh über und die müssten nun berechnet werden?

ich glaube das mit dem -1.0 stelle ich mir zu einfach vor??

Hier ein List :

Internals:
   CID        shelly1pm_E09806A9DB91
   DEF        shelly1pm_E09806A9DB91
   DEVICETOPIC Brunnen_Heizung
   FUUID      61a61678-f33f-b033-336c-da6852207f8689b9
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     5248
   NAME       Brunnen_Heizung
   NR         558
   STATE      9.4
   TYPE       MQTT2_DEVICE
   myBroker_CONN myBroker_10.0.0.159_7467
   myBroker_MSGCNT 5248
   myBroker_TIME 2021-12-30 17:43:10
   READINGS:
     2021-12-30 17:43:10   0_hwID          28db600222200170
     2021-12-30 17:43:10   0_tC            9.4
     2021-12-30 17:43:10   0_tF            49.0
     2021-12-30 15:41:40   IODev           myBroker
     2021-12-30 17:42:48   Kosten          0.00
     2021-12-30 15:41:46   actions_stats_skipped 0
     2021-12-30 15:41:46   cfg_changed_cnt 0
     2021-12-30 15:41:46   cloud_connected false
     2021-12-30 15:41:46   cloud_enabled   false
     2021-12-30 15:41:46   event           
     2021-12-30 15:41:46   event_cnt       0
     2021-12-30 15:41:46   ext_sensors_temperature_unit C
     2021-12-30 17:43:10   ext_temperature_0 9.4
     2021-12-30 15:41:46   ext_temperature_0_hwID 28db600222200170
     2021-12-30 15:41:46   ext_temperature_0_tC 7.00
     2021-12-30 15:41:46   ext_temperature_0_tF 44.60
     2021-12-30 17:43:10   ext_temperature_f_0 49.0
     2021-12-30 15:41:46   fs_free         149345
     2021-12-30 15:41:46   fs_size         233681
     2021-12-30 15:41:46   fw_ver          20211109-130756/v1.11.7-g682a0db
     2021-12-30 15:41:46   has_update      false
     2021-12-30 15:41:46   id              shelly1pm-E09806A9DB91
     2021-12-30 17:42:48   input_0         0
     2021-12-30 15:41:46   inputs_1_event 
     2021-12-30 15:41:46   inputs_1_event_cnt 0
     2021-12-30 15:41:46   inputs_1_input  0
     2021-12-30 15:41:46   ip              10.0.0.159
     2021-12-30 15:41:46   mac             E09806A9DB91
     2021-12-30 15:41:46   meters_1_counters_1 0.000
     2021-12-30 15:41:46   meters_1_counters_2 0.000
     2021-12-30 15:41:46   meters_1_counters_3 0.000
     2021-12-30 15:41:46   meters_1_is_valid true
     2021-12-30 15:41:46   meters_1_overpower 0.00
     2021-12-30 15:41:46   meters_1_power  0.00
     2021-12-30 15:41:46   meters_1_timestamp 1640878906
     2021-12-30 15:41:46   meters_1_total  31863
     2021-12-30 15:41:46   model           SHSW-PM
     2021-12-30 15:41:46   mqtt_connected  true
     2021-12-30 15:41:46   new_fw          false
     2021-12-30 15:41:46   online          true
     2021-12-30 17:42:48   overtemperature 0
     2021-12-30 15:41:46   ram_free        37732
     2021-12-30 15:41:46   ram_total       50472
     2021-12-30 17:42:48   relay_0         off
     2021-12-30 17:42:48   relay_0_energy  83982
     2021-12-30 17:42:48   relay_0_energy_kWh 1.34751666666667
     2021-12-30 17:42:48   relay_0_power   0.00
     2021-12-30 15:41:46   relays_1_has_timer false
     2021-12-30 15:41:46   relays_1_ison   false
     2021-12-30 15:41:46   relays_1_overpower false
     2021-12-30 15:41:46   relays_1_source mqtt
     2021-12-30 15:41:46   relays_1_timer_duration 0
     2021-12-30 15:41:46   relays_1_timer_remaining 0
     2021-12-30 15:41:46   relays_1_timer_started 0
     2021-12-30 15:41:46   serial          1029
     2021-12-30 17:13:25   state           relay_0
     2021-12-30 17:42:48   temperature     32.65
     2021-12-30 17:42:48   temperature_f   90.76
     2021-12-30 17:42:48   temperature_status Normal
     2021-12-30 15:41:46   time            15:41
     2021-12-30 15:41:46   tmp_is_valid    true
     2021-12-30 15:41:46   tmp_tC          26.37
     2021-12-30 15:41:46   tmp_tF          79.47
     2021-12-30 15:41:46   unixtime        1640875306
     2021-12-30 15:41:46   update_has_update false
     2021-12-30 15:41:46   update_new_version 20211109-130756/v1.11.7-g682a0db
     2021-12-30 15:41:46   update_old_version 20211109-130756/v1.11.7-g682a0db
     2021-12-30 15:41:46   update_status   idle
     2021-12-30 15:41:46   uptime          2600536
     2021-12-30 15:41:46   wifi_sta_connected true
     2021-12-30 15:41:46   wifi_sta_ip     10.0.0.159
     2021-12-30 15:41:46   wifi_sta_rssi   -33
     2021-12-30 15:41:46   wifi_sta_ssid   Dahoam
Attributes:
   group      Temperatur
   readingList shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/ext_temperature/0:.* ext_temperature_0
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/ext_temperature_f/0:.* ext_temperature_f_0
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/ext_temperatures:.* { json2nameValue($EVENT) }
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/ext_temperatures_f:.* { json2nameValue($EVENT) }
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/relay/0:.* relay_0
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/input/0:.* input_0
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/relay/0/power:.* relay_0_power
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/relay/0/energy:.* relay_0_energy
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/temperature:.* temperature
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/temperature_f:.* temperature_f
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/overtemperature:.* overtemperature
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/temperature_status:.* temperature_status
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/input_event/0:.* { json2nameValue($EVENT) }
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/online:.* online
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/announce:.* { json2nameValue($EVENT) }
shelly1pm_E09806A9DB91:shellies/shelly1pm-E09806A9DB91/info:.* { json2nameValue($EVENT) }
   room       Brunnen,Favoriten,MQTT2_DEVICE
   setList    relay_0:iconSwitch,on,li_wht_off,off,li_wht_on shellies/shelly1pm-E09806A9DB91/relay/0/command $EVTPART1
x_mqttcom shellies/shelly1pm-E09806A9DB91/command $EVTPART1
   stateFormat ext_temperature_0
   userReadings relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh -1.0",0)*.2);;}
   verbose    0
   webCmd     relay_0
   webCmdLabel :


Danke für die Hilfe
Helmut
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: MadMax-FHEM am 30 Dezember 2021, 18:03:45
Ich weiß ja nicht so ganz genau was du willst (ja hätte mich einlesen können ;)  )...
...aber das hier ist doch irgendwie "komisch":

Zitat
ReadingsVal($NAME,"relay_0_energy_kWh -1.0",0)

Heißt dein Reading wirklich "relay_0_energy_kWh -1.0" ?

Wenn du eins abziehen willst, dann doch nach der ReadingsVal-Abfrage! Also dort wo du auch multiplizierst.
Aber halt mit (runden) Klammern, da ja "Punkt vor Strich" ;)

Und ich bin auch unsicher wegen deiner "Aufreigung" von userReadings, weil es ja heißt: Komma-separierte Liste und nicht "Komma und Leerzeichen"-separierte Liste...
(manchmal ist fhem da sehr genau ;) )

Und: wenn du mit Zahlen rechnest: ReadingsNum statt ReadingsVal...

Gruß, Joachim
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: Helmi55 am 30 Dezember 2021, 18:16:47
Hallo Joachim,

das Readings heißt "relay_0_energy_kWh" und sendet 1.34...
Nun möchte ich zum Jahreswechsel alles Nullen (von Neuem anfangen)
Jetzt dachte ich das ich am 1.1.22. ganz easy (wie sich das der als Mann vorstellt) die 1.34 abziehe und wieder neu anfange

Das userReadings sieht so aus
relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0)*.2);;}

Wo und wie muss ich da bitte den Wert abziehen?


Oder gibt es eine schönere Lösung dafür.
Denke ich bin nicht der einzige der seine "Kosten auf Null stellen will?
Herzlichen Dank

Helmut
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: MadMax-FHEM am 30 Dezember 2021, 18:36:19
Nur mal zur Sicherheit: du willst "nur" das Reading relay_0_energy_kWh auf 0 setzen?

-> setreading Brunnen_Heizung relay_0_energy_kWh 0

Aber kommt der Wert dann nicht wieder vom Gerät, also vom Shelly?
Merkt sich der Shelly da was?
Dann hilft es ja nichts das Reading auf 0 zu setzen...

EDIT: ok das ist ja auch ein userReadings...

Irgendwie verstehe ich noch nicht genau bzw. kommt mir immer noch das gepostete (und list vom Device) userReadings mit dem -1 im Namen komisch vor...
...oder ist das nur dein Versuch 1 abzuziehen?

Wenn das nur ein "falscher" Versuch ist und du nur 1 abziehen willst, dann wie geschrieben:


{ sprintf("%.2f",(ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2)}


Und wie ebenfalls schon geschrieben (und das solltest du doch mittlerweile besser wissen ;)  ) besser mit ReadingsNum:

{ sprintf("%.2f",(ReadingsNum($NAME,"relay_0_energy_kWh",0) - 1.0)*.2)}


Und: ich habe bei mir in den userReadings überall $name statt $NAME drin stehen...

Gruß, Joachim
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: MadMax-FHEM am 30 Dezember 2021, 18:38:10
Zitat von: Helmi55 am 30 Dezember 2021, 18:16:47
Oder gibt es eine schönere Lösung dafür.
Denke ich bin nicht der einzige der seine "Kosten auf Null stellen will?

Ich denke dazu gibt es Thread(s) im Forum, weil eben glaube ich dann nach dem Nullsetzen wieder irgendwelche Werte vom Shelly kommen?

Zumindest gibt es rund um das Thema einiges im Forum...

Ich selbst habe keine Shelly mit Leistungsmessung...

Gruß, Joachim
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: Helmi55 am 30 Dezember 2021, 19:42:32
Hallo Joachim,

herzlichen Dank für deine Zeit und Geduld.
So hat es funktioniert

{ sprintf([b]([/b]"%.2f",(ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2)}

Ja dadurch das der Shelly immer wieder die aktuellen Werte funkt, muss ich einen aktuellen Stand (in diesem Fall "1" als Beispiel) abziehen
Werde es beobachten, aber so sollte es funktionieren.


Danke
Gesund bleiben und einen guten Rutsch
Helmut
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: MadMax-FHEM am 30 Dezember 2021, 19:45:54
Gerne!
Danke, ebenso und guten Rutsch!

Noch mal: evtl. auf ReadingsNum umstellen, wenn du eh "nur" mit Zahlen willst...

Gruß, Joachim
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: Helmi55 am 30 Dezember 2021, 22:40:46
Guten Abend hab noch nicht auf ReadingsNum umgestellt

Kann diese Fehlermeldung damit zusammenhängen?

2021.12.30 20:24:22 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17440) line 1.
2021.12.30 20:24:22 3: eval: { sprintf(("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2);;}
2021.12.30 20:24:53 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17460) line 1.
2021.12.30 20:24:53 3: eval: { sprintf(("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2);;}
2021.12.30 20:25:22 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17489) line 1.
2021.12.30 20:25:22 3: eval: { sprintf(("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2);;}
2021.12.30 20:25:52 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17510) line 1.
2021.12.30 20:25:52 3: eval: { sprintf(("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2);;}
2021.12.30 20:26:22 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17539) line 1.
2021.12.30 20:26:22 3: eval: { sprintf(("%.2f",ReadingsVal($NAME,"relay_0_energy_kWh",0) - 1.0)*.2);;}
2021.12.30 20:26:53 1: PERL WARNING: Useless use of a constant ("%.2f") in void context at (eval 17561) line 1.
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: MadMax-FHEM am 30 Dezember 2021, 22:46:04
Was spricht gegen ausprobieren?

Dauert keine 10s... ;)

Ansonsten evtl. mal stacktrace anwerfen, vielleicht sieht man mehr...
...evtl. auch mal Ausschnitte aus dem Eventmonitor, da sieht man ja die Werte direkt...

Gruß, Joachim
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: Otto123 am 30 Dezember 2021, 23:11:33
Useless use :) { sprintf(("%.2f",12345.678 - 1.0)*.2)}
versus wie gewollt gerundet
{ sprintf("%.2f",(12345.678 - 1.0)*.2)}
8)
Als Probe für die FHEM Kommandozeile.

Guten Rutsch
Otto
Titel: Antw:Wert in UserReadings abziehen
Beitrag von: Helmi55 am 31 Dezember 2021, 09:47:24
Danke euch beiden.
@Joachim.  Das mit Num und Val werde ich nächstes Jahr testen.
@Otto Danke das wars. Klammern waren noch nie meine Freunde  8)

Jetzt läuft es so wie es soll.

Wünsche euch einen guten Rutsch - gesund bleiben.

Helmut