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
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
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
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
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
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
Gerne!
Danke, ebenso und guten Rutsch!
Noch mal: evtl. auf ReadingsNum umstellen, wenn du eh "nur" mit Zahlen willst...
Gruß, Joachim
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.
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
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
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