Moin!
Ich binde meinen Victron Cerbo als MQTT2_DEVICE in FHEM ein. Leider liefert der Cerbo sehr lange Werte für Leistungen und Ertrag (bspw 0.46000000834465027 anstelle von 0.46). Bisher helfe ich mir damit dass ich für jedes dieser Readings ein userreading erstelle und dort mittels ReadingsNum den Wert auf eine Nachkommastelle runde.
Gibt es eine Möglichkeit den Wert schon im readingList runden zu lassen? Oder gibt es grundsätzlich eine bessere Lösung als das Runden via userreading?
Hier noch definition und list des betroffenen Devices:
define MQTT2_venus MQTT2_DEVICE venus
attr MQTT2_venus autocreate 0
attr MQTT2_venus devStateIcon SSOC\s[1|2|3].+:measure_battery_25\
SSOC\s[4|5|6].+:measure_battery_50\
SSOC\s[7|8].+:measure_battery_75\
SSOC\s[9].+:measure_battery_100
attr MQTT2_venus event-min-interval consumption:1
attr MQTT2_venus event-on-change-reading Power_Grid_value,Forward_Total_value,Reverse_Total_value,solar_yield_rounded,solar_power_rounded,Batteries_value_1_soc,Batteries_value_1_power,MaxDischargePower_value,solar_yield_daily_rounded,Consumption_L1_Power_value,Consumption_L2_Power_value,Consumption_L3_Power_value,Solarcharger_0_History_Daily_Yield_value,Solarcharger_1_History_Daily_Yield_value,Solarcharger_0_MPPT1_Power_rounded,Solarcharger_0_MPPT2_Power_rounded
attr MQTT2_venus event-on-update-reading consumption
attr MQTT2_venus readingList venus:N/<MEINE_ID>/grid/40/Ac/Power:.* { json2nameValue($EVENT, 'Power_Grid_', $JSONMAP) }\
venus:N/<MEINE_ID>/grid/40/Ac/Energy/Forward:.* { json2nameValue($EVENT, 'Forward_Total_', $JSONMAP) }\
venus:N/<MEINE_ID>/grid/40/Ac/Energy/Reverse:.* { json2nameValue($EVENT, 'Reverse_Total_', $JSONMAP) }\
venus:N/<MEINE_ID>/pvinverter/47/Ac/Energy/Forward:.* { json2nameValue($EVENT, 'Forward_Balkonkraftwerk_', $JSONMAP) }\
venus:N/<MEINE_ID>/pvinverter/47/Ac/Power:.* { json2nameValue($EVENT, 'Power_Balkonkraftwerk_', $JSONMAP) }\
venus:N/<MEINE_ID>/solarcharger/0/Yield/System:.* { json2nameValue($EVENT, 'Solarcharger_0_Yield_System_', $JSONMAP) }\
venus:N/<MEINE_ID>/system/0/Dc/Pv/Power:.* { json2nameValue($EVENT, 'PV_Power_', $JSONMAP) }\
venus:N/<MEINE_ID>/system/0/Ac/Consumption/L1/Power:.* { json2nameValue($EVENT, 'Consumption_L1_Power_', $JSONMAP) }\
venus:N/<MEINE_ID>/system/0/Ac/Consumption/L2/Power:.* { json2nameValue($EVENT, 'Consumption_L2_Power_', $JSONMAP) }\
venus:N/<MEINE_ID>/system/0/Ac/Consumption/L3/Power:.* { json2nameValue($EVENT, 'Consumption_L3_Power_', $JSONMAP) }\
venus:N/<MEINE_ID>/system/0/Batteries:.* { json2nameValue($EVENT, 'Batteries_', $JSONMAP) }\
venus:N/<MEINE_ID>/settings/0/Settings/CGwacs/MaxDischargePower:.* { json2nameValue($EVENT, 'MaxDischargePower_', $JSONMAP) }\
venus:N/<MEINE_ID>/solarcharger/0/History/Daily/0/Pv/0/Yield:.* { json2nameValue($EVENT, 'Solarcharger_0_History_Daily_Yield_', $JSONMAP) }\
venus:N/<MEINE_ID>/solarcharger/0/History/Daily/0/Pv/1/Yield:.* { json2nameValue($EVENT, 'Solarcharger_1_History_Daily_Yield_', $JSONMAP) }\
venus:N/<MEINE_ID>/solarcharger/0/Pv/0/P:.* { json2nameValue($EVENT, 'Solarcharger_0_MPPT1_Power_', $JSONMAP) }\
venus:N/<MEINE_ID>/solarcharger/0/Pv/1/P:.* { json2nameValue($EVENT, 'Solarcharger_0_MPPT2_Power_', $JSONMAP) }\
attr MQTT2_venus room 02_Garage,102_Strom,23_MQTT
attr MQTT2_venus setList off W/<MEINE_ID>/vebus/276/Mode {"value":4}\
on W/<MEINE_ID>/vebus/276/Mode {"value":3}\
inv W/<MEINE_ID>/vebus/276/Mode {"value":2}\
chg W/<MEINE_ID>/vebus/276/Mode {"value":1}\
Mode W/<MEINE_ID>/vebus/276/Mode {"value":$EVTPART1}\
GridCurrentLimit W/<MEINE_ID>/vebus/276/Ac/In/1/CurrentLimit {"value":$EVTPART1}\
MinSOC W/<MEINE_ID>/settings/0/Settings/CGwacs/BatteryLife/MinimumSocLimit {"value":$EVTPART1}\
Relay0 W/<MEINE_ID>/system/0/Relay/0/State {"value":$EVTPART1}\
Relay1 W/<MEINE_ID>/system/0/Relay/1/State {"value":$EVTPART1}
attr MQTT2_venus stateFormat SSOC Batteries_value_1_soc, \
SOC Batteries_value_1_soc %, \
Bat: Batteries_value_1_power W,\
PV: solar_power_rounded W,\
ACin: Power_Grid_value W,
attr MQTT2_venus userReadings consumption {ReadingsNum($NAME,"Consumption_L1_Power_value",0) + ReadingsNum($NAME,"Consumption_L2_Power_value",0) + ReadingsNum($NAME,"Consumption_L3_Power_value",0)},\
solar_yield {(ReadingsNum($NAME,"Solarcharger_0_Yield_System_value",0,2)) + (ReadingsNum("MQTT2_OpenDTU_6935952","yieldtotal",0,0))},\
solar_yield_rounded {ReadingsNum($NAME,"solar_yield",0,0)},\
solar_yield_daily {(ReadingsNum($NAME,"Solarcharger_0_History_Daily_Yield_value",0,2)) + (ReadingsNum($NAME,"Solarcharger_1_History_Daily_Yield_value",0,2)) + ((ReadingsNum("MQTT2_OpenDTU_6935952","yieldday",0,0)) / 1000)},\
solar_yield_daily_rounded {ReadingsNum($NAME,"solar_yield_daily",0,1)},\
solar_power_rounded {(ReadingsNum($NAME,"PV_Power_value",0,0)) + (ReadingsNum("MQTT2_OpenDTU_6935952","power",0,0))},\
pv_buffer {if(ReadingsNum($NAME,"Batteries_value_1_soc",0,0) > 90 ) {(((ReadingsNum($NAME,"Batteries_value_1_soc",0,0)) -90)*200)} else {return 0}},\
fake_Power_Grid_value {(ReadingsNum($NAME,"Power_Grid_value",0,0)) + ((ReadingsNum($NAME,"pv_buffer",0,0)) * -1)},\
Solarcharger_0_MPPT1_Power_rounded {ReadingsNum($NAME,"Solarcharger_0_MPPT1_Power_value",0,1)},\
Solarcharger_0_MPPT2_Power_rounded {ReadingsNum($NAME,"Solarcharger_0_MPPT2_Power_value",0,1)}
# CID venus
# DEF venus
# FUUID 642ed1c3-f33f-b36e-f253-25fb5666cbfd6bbf
# IODev venus
# LASTInputDev venus
# MSGCNT 7434828
# NAME MQTT2_venus
# NR 411
# STATE SSOC 13.0,
#SOC 13.0 %,
#Bat: -110 W,
#PV: 619 W,
#ACin: -9.5 W,
# TYPE MQTT2_DEVICE
# eventCount 7028650
# venus_MSGCNT 7434828
# venus_TIME 2023-10-03 10:31:19
# OLDREADINGS:
# READINGS:
# 2023-10-03 10:31:17 Batteries_value_1_active_battery_service true
# 2023-10-03 10:31:17 Batteries_value_1_current -2.299999952316284
# 2023-10-03 10:31:17 Batteries_value_1_id com.victronenergy.battery.socketcan_can1
# 2023-10-03 10:31:17 Batteries_value_1_instance 512
# 2023-10-03 10:31:17 Batteries_value_1_name Pylontech battery
# 2023-10-03 10:31:17 Batteries_value_1_power -110
# 2023-10-03 10:31:17 Batteries_value_1_soc 13.0
# 2023-10-03 10:31:17 Batteries_value_1_state 2
# 2023-10-03 10:31:17 Batteries_value_1_temperature 21.600000381469727
# 2023-10-03 10:31:17 Batteries_value_1_voltage 48.02000045776367
# 2023-10-03 10:31:17 Batteries_value_2_active_battery_service false
# 2023-10-03 10:31:17 Batteries_value_2_current -16.700000762939453
# 2023-10-03 10:31:17 Batteries_value_2_id com.victronenergy.vebus.ttyS4
# 2023-10-03 10:31:17 Batteries_value_2_instance 276
# 2023-10-03 10:31:17 Batteries_value_2_name MultiPlus-II 48/5000/70-50
# 2023-10-03 10:31:17 Batteries_value_2_power -733
# 2023-10-03 10:31:17 Batteries_value_2_soc 13.0
# 2023-10-03 10:31:17 Batteries_value_2_state 2
# 2023-10-03 10:31:17 Batteries_value_2_voltage 48.0
# 2023-10-03 10:31:19 Consumption_L1_Power_value 268.8
# 2023-10-03 10:31:19 Consumption_L2_Power_value 497.79999924
# 2023-10-03 10:31:19 Consumption_L3_Power_value 19.2
# 2023-10-03 10:21:23 Forward_Total_value 666.9
# 2023-10-03 10:28:35 MaxDischargePower_value 2500.0
# 2023-10-03 10:31:19 PV_Power_value 561.716971204758
# 2023-10-03 10:31:19 Power_Grid_value -9.5
# 2023-10-03 00:00:00 Reverse_Total_value 68.8
# 2023-10-03 10:30:27 Solarcharger_0_History_Daily_Yield_value 0.5
# 2023-10-03 10:31:19 Solarcharger_0_MPPT1_Power_rounded 334.6
# 2023-10-03 10:31:19 Solarcharger_0_MPPT1_Power_value 334.6000061035156
# 2023-10-03 10:31:19 Solarcharger_0_MPPT2_Power_rounded 298.5
# 2023-10-03 10:31:19 Solarcharger_0_MPPT2_Power_value 298.4800109863281
# 2023-10-03 10:30:37 Solarcharger_0_Yield_System_value 2139.43994140625
# 2023-10-03 10:30:39 Solarcharger_1_History_Daily_Yield_value 0.44999998807907104
# 2023-10-03 10:31:19 consumption 785.79999924
# 2023-10-03 10:31:19 fake_Power_Grid_value -10
# 2023-10-03 10:31:19 pv_buffer 0
# 2023-10-03 10:31:19 solar_power_rounded 619
# 2023-10-03 10:31:19 solar_yield 2200.44
# 2023-10-03 10:31:19 solar_yield_daily 1.028
# 2023-10-03 10:31:19 solar_yield_daily_rounded 1.0
# 2023-10-03 10:31:19 solar_yield_rounded 2200
#
setstate MQTT2_venus SSOC 13.0, \
SOC 13.0 %, \
Bat: -110 W,\
PV: 619 W,\
ACin: -9.5 W,
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_active_battery_service true
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_current -2.299999952316284
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_id com.victronenergy.battery.socketcan_can1
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_instance 512
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_name Pylontech battery
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_power -110
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_soc 13.0
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_state 2
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_temperature 21.600000381469727
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_1_voltage 48.02000045776367
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_active_battery_service false
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_current -16.700000762939453
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_id com.victronenergy.vebus.ttyS4
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_instance 276
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_name MultiPlus-II 48/5000/70-50
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_power -733
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_soc 13.0
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_state 2
setstate MQTT2_venus 2023-10-03 10:31:17 Batteries_value_2_voltage 48.0
setstate MQTT2_venus 2023-10-03 10:31:19 Consumption_L1_Power_value 268.8
setstate MQTT2_venus 2023-10-03 10:31:19 Consumption_L2_Power_value 497.79999924
setstate MQTT2_venus 2023-10-03 10:31:19 Consumption_L3_Power_value 19.2
setstate MQTT2_venus 2023-10-03 10:21:23 Forward_Total_value 666.9
setstate MQTT2_venus 2023-10-03 10:28:35 MaxDischargePower_value 2500.0
setstate MQTT2_venus 2023-10-03 10:31:19 PV_Power_value 561.716971204758
setstate MQTT2_venus 2023-10-03 10:31:19 Power_Grid_value -9.5
setstate MQTT2_venus 2023-10-03 00:00:00 Reverse_Total_value 68.8
setstate MQTT2_venus 2023-10-03 10:30:27 Solarcharger_0_History_Daily_Yield_value 0.5
setstate MQTT2_venus 2023-10-03 10:31:19 Solarcharger_0_MPPT1_Power_rounded 334.6
setstate MQTT2_venus 2023-10-03 10:31:19 Solarcharger_0_MPPT1_Power_value 334.6000061035156
setstate MQTT2_venus 2023-10-03 10:31:19 Solarcharger_0_MPPT2_Power_rounded 298.5
setstate MQTT2_venus 2023-10-03 10:31:19 Solarcharger_0_MPPT2_Power_value 298.4800109863281
setstate MQTT2_venus 2023-10-03 10:30:37 Solarcharger_0_Yield_System_value 2139.43994140625
setstate MQTT2_venus 2023-10-03 10:30:39 Solarcharger_1_History_Daily_Yield_value 0.44999998807907104
setstate MQTT2_venus 2023-10-03 10:31:19 consumption 785.79999924
setstate MQTT2_venus 2023-10-03 10:31:19 fake_Power_Grid_value -10
setstate MQTT2_venus 2023-10-03 10:31:19 pv_buffer 0
setstate MQTT2_venus 2023-10-03 10:31:19 solar_power_rounded 619
setstate MQTT2_venus 2023-10-03 10:31:19 solar_yield 2200.44
setstate MQTT2_venus 2023-10-03 10:31:19 solar_yield_daily 1.028
setstate MQTT2_venus 2023-10-03 10:31:19 solar_yield_daily_rounded 1.0
setstate MQTT2_venus 2023-10-03 10:31:19 solar_yield_rounded 2200
Grüße
Markus
Ich wuerde dafuer in 99_myUtils.pm eine Funktion anlegen:
sub
roundHashValues($$)
{
my ($hash, $n) = @_;
foreach my $key (keys %{$hash}) {
if(looks_like_number($hash->{$key})) {
$hash->{$key} = round($hash->{$key}, $n)
}
}
return $hash;
}
und die "problematischen" Zeilen in readingList anpassen:
venus:N/<MEINE_ID>/solarcharger/0/History/Daily/0/Pv/0/Yield:.* { roundHashValues(json2nameValue($EVENT, 'Solarcharger_0_History_Daily_Yield_', $JSONMAP), 2) }\
Vielen Dank Rudolf, das war genau das was ich gesucht habe!