defmod BMW_i4_mqtt2 MQTT2_DEVICE
attr BMW_i4_mqtt2 IODev MosquitoMqtt2Client
attr BMW_i4_mqtt2 autocreate 1
attr BMW_i4_mqtt2 devStateStyle style="text-align:right"
attr BMW_i4_mqtt2 devicetopic bmw/<VIN>
attr BMW_i4_mqtt2 event-min-interval .*:3600
attr BMW_i4_mqtt2 event-on-change-reading .*
attr BMW_i4_mqtt2 icon car
attr BMW_i4_mqtt2 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP,'', '_timestamp') }
attr BMW_i4_mqtt2 room Auto
attr BMW_i4_mqtt2 stateFormat { my $var= "<pre>" .\
sprintf("Battery Ladezustand: %7.1f %%", ReadingsVal($name,"data_vehicle.drivetrain.batteryManagement.header_value",0)) . "</br>" .\
sprintf("Lade Leistung: %7.1f W", ReadingsVal($name,"data_vehicle.powertrain.electric.battery.charging.power_value",0)) . "</br>" .\
sprintf("KM Stand: %7.1f W", ReadingsVal($name,"data_vehicle.vehicle.travelledDistance_value",0)) . "</br>" .\
sprintf("Reichweite: %7.1f km", ReadingsVal($name,"data_vehicle.drivetrain.electricEngine.kombiRemainingElectricRange_value",0)) . "</pre>";;;;\
$var;;;;\
}und weil die Ladeleistung nie zu 0 gesetzt wird, sondern sich das nur der Status ändert, noch diesen Workaround um die Ladeleistung richtig angezeigt zu bekommen:defmod BMW_i4_charging_power_notify notify (BMW_i4_mqtt2:data_vehicle\.drivetrain\.electricEngine\.charging\.status_value):.*\
{ \
my $status = ReadingsVal('BMW_i4_mqtt2', 'data_vehicle.drivetrain.electricEngine.charging.status_value', '');;\
if ($status ne "CHARGINGACTIVE")\
{\
fhem("setreading BMW_i4_mqtt2 data_vehicle.powertrain.electric.battery.charging.power_value 0");;\
} \
}
attr BMW_i4_charging_power_notify room Auto CurrentHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO
TargetHeatingCoolingState=mode,values=off:OFF;heat:HEAT;cool:COOL;auto:AUTO,cmds=OFF:Betrieb_Modus+off;HEAT:Betrieb_Modus+heat;COOL:Betrieb_Modus+cool;AUTO:Betrieb_Modus+autoZitatIn der 99_myUtils.pm habe ich eine neue Funktion eingetragen:Eine generische Variante ist in fhem.pl => makeReadingName() implementiert, leider ist es nicht ganz ideal in diesem Fall, da Leerzeichen durch _ ersetzt werden.
ZitatKennt jemand eine Übersicht der möglichen Forecast-Meldungen (xx_wwd)?Die komplette Liste ist FHEM/55_DWD_OPenData.pm zu sehen (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/55_DWD_OpenData.pm#L660), da XX_wwd in diesem Modul aus XX_ww berechnet wird.
ZitatOder, noch besser, hat jemand einen Tipp, wie ich über fehlgeschlagene Sendungen mit NTFY informiert werden kann?Ein notify mit dem readLog Attribut liest das FHEM-Log, und kann mit passenden Regexp reagieren.
2026-04-16 11:06:28 dailyDetails-peakPower 6.1
2026-04-16 11:06:28 dailyDetails-status Active
2026-04-15 23:59:00 dailyOverview-energyDay 21939.398
2026-04-15 23:59:00 dailyOverview-energyLifetime 91.3983
2026-04-15 23:59:00 dailyOverview-energyMonth 457.89194
2026-03-31 23:59:01 dailyOverview-energyMonthOnce 728.54475
2026-04-15 23:59:00 dailyOverview-energyYear 1655.5422
2025-12-31 23:59:00 dailyOverview-energyYearOnce 9142.393
2026-04-13 17:25:23 debugNumError1 7
2026-04-06 12:12:26 debugNumError3 6
2026-04-16 11:09:35 debugNumGoodResponses 23307
2026-03-04 16:54:12 debugNumJsonErrors 526
2026-04-16 11:09:35 debugNumRequests 23320
2026-04-16 11:09:35 overview-energyDay 8652.558
2026-04-16 11:09:35 overview-energyLifetime 91.4065
2026-04-16 11:09:35 overview-energyMonth 466.5445
2026-03-31 23:51:50 overview-energyMonthOnce 728.54475
2026-04-16 11:09:35 overview-energyYear 1664.1949
2025-12-31 23:50:03 overview-energyYearOnce 9142.393
2026-04-16 11:09:35 overview-power 3043
2026-04-16 11:09:35 state active
sub UmlauteErsetzen($) {
my ($Val) = @_;
$Val =~ s/Bewölkung/Bewoelkung/;
$Val =~ s/unverändert/unveraendert/;
return $Val
}und dann den Code im DOIF geändert:## 1
([6:00|8] or [8:00|7])
({fhem("set NTFY0 publish \@FHEM-Status Taegliche Statusmeldung
\nGarage hinten:
\nTemperatur: ".ReadingsVal("Aussen.Temp","temperature","").
"\nLuftfeuchtigkeit: ".ReadingsVal("Aussen.Temp","humidity","")." %
\nHeizung: ".ReadingsVal("Buderus","OutdoorTemp","")."
\nVorne: ".ReadingsVal("MQTT2_Aussen.Temperatur.vorne","temperature","")."
\nWettervorhersage heute: ".UmlauteErsetzen(ReadingsVal("DWD","fc0_3_wwd",""))."
\nTag/Nacht: ".ReadingsVal("DWD","fc0_Tx","")." / ".ReadingsVal("DWD","fc0_Tn","")."
\nWettervorhersage morgen: ".UmlauteErsetzen(ReadingsVal("DWD","fc1_2_wwd",""))."
\nTag/Nacht: ".ReadingsVal("DWD","fc1_Tx","")." / ".ReadingsVal("DWD","fc1_Tn","")."
\nBatterie PV: ".ReadingsVal("SolarEdgeAPI","status-storage_level","")." %"
)
})On=mode,valueOn=/^(?!off$).*/,valueOff=off,cmdOn=mode+auto,cmdOff=mode+off CurrentTemperature=temperature TargetTemperature=target,cmd=target,minValue=16,maxValue=30
mode:off,cool,heat,fan_only,dry,auto esp_klima_gaeste/climate/panasonic_ac/mode/command $EVTPART1
nanoex:ON,OFF esp_klima_gaeste/switch/panasonic_ac_nanoex_switch/command $EVTPART1
swingMode:auto,up,middle,down,down_max,swing esp_klima_gaeste/climate/panasonic_ac/swing_mode/command $EVTPART1
fan:A,1,2,3,4,5 esp_klima_gaeste/climate/panasonic_ac/fan_mode/command $EVTPART1
v_swing:auto,up,up_center,center,down_center,down esp_klima_gaeste/select/panasonic_ac_vertical_swing_mode/command $EVTPART1
h_swing:auto,left,right,left_center,right_center,center esp_klima_gaeste/select/panasonic_ac_horizontal_swing_mode/command $EVTPART1
target:selectnumbers,16,0.5,30,1,lin esp_klima_gaeste/climate/panasonic_ac/target_temperature/command $EVTPART1
preset:Normal,Quiet,Powerful esp_klima_gaeste/climate/panasonic_ac/preset/command $EVTPART1
fan
1
2026-04-16 10:26:20
h_swing
center
2026-04-16 02:46:16
mild_dry
OFF
2026-03-31 10:14:24
mode
off
2026-04-16 10:26:20
nanoex
ON
2026-04-16 02:46:16
power
8
2026-04-16 02:46:16
preset
Normal
2026-04-16 10:26:20
state
off
2026-04-16 10:26:20
status
online
2026-04-16 02:46:16
swingMode
off
2026-04-16 10:26:20
target
23.0
2026-04-16 10:26:20
temperature
21.0
2026-04-16 10:28:10