FHEM Forum

FHEM - Anwendungen => Heizungssteuerung/Raumklima => Thema gestartet von: rasti am 22 November 2025, 11:40:10

Titel: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: rasti am 22 November 2025, 11:40:10
Hallo,

ich wollte auch wieder mal was zum Forum beitragen.....hab gerade meine Wärmepumpe (Panasonic Monobloc 9kW) in Betrieb genommen.

Die kann man mit einer kleinen Zusatzplatine namens Heishamon (einfach mal googeln) per mqtt auslesen.

Unten mein Code dazu.

Viele Grüße

Ralf


#############################################
## HeishaMon über Mosquitto (MQTT)
#############################################

define HeishaMon MQTT_DEVICE
attr HeishaMon IODev Mosquitto
attr HeishaMon alias Panasonic HeishaMon
attr HeishaMon event-on-change-reading .*
attr HeishaMon room 1__Wärmepumpe
attr HeishaMon stateFormat {\
  "Fehler :    ".ReadingsVal("HeishaMon","Error","-")."<br><br>" .\
  "AT:".sprintf("%d",ReadingsNum("HeishaMon","Outside_Temp","-"))."°C<br>" .\
  "Soll:".sprintf("%d",ReadingsNum("HeishaMon","Main_Target_Temp","-"))."°C<br>" .\
  "VL:".sprintf("%d",ReadingsNum("HeishaMon","Main_Outlet_Temp","-"))."°C<br>" .\
  "RL:".sprintf("%d",ReadingsNum("HeishaMon","Main_Inlet_Temp","-"))."°C<br>" .\
  "HK1:".sprintf("%d",ReadingsNum("HeishaMon","Z1_Water_Temp","-"))."°C<br>" .\
  "Puffer:".sprintf("%d",ReadingsNum("HeishaMon","Buffer_Temp","-"))."°C<br><br>" .\
  "Kompr:".ReadingsVal("HeishaMon","Compressor_Freq","-")." Hz<br>" .\
  "Pumpe:".ReadingsVal("HeishaMon","Pump_Flow","-")." L/min<br>" .\
  "Pth:".ReadingsVal("HeishaMon","Heat_Power_Production","-")." kW<br>" .\
  "Pel:".ReadingsVal("HeishaMon","Heat_Power_Consumption","-")." kW<br>" .\
  "COP:".ReadingsVal("HeishaMon","COP","-")\
}
attr HeishaMon subscribeReading_Buffer_Tank_Delta panasonic_heat_pump/main/Buffer_Tank_Delta
attr HeishaMon subscribeReading_Buffer_Temp panasonic_heat_pump/main/Buffer_Temp
attr HeishaMon subscribeReading_Compressor_Freq panasonic_heat_pump/main/Compressor_Freq
attr HeishaMon subscribeReading_Cool_Delta panasonic_heat_pump/main/Cool_Delta
attr HeishaMon subscribeReading_Error panasonic_heat_pump/main/Error
attr HeishaMon subscribeReading_Heat_Delta panasonic_heat_pump/main/Heat_Delta
attr HeishaMon subscribeReading_Heat_Power_Consumption panasonic_heat_pump/main/Heat_Power_Consumption
attr HeishaMon subscribeReading_Heat_Power_Production panasonic_heat_pump/main/Heat_Power_Production
attr HeishaMon subscribeReading_Heatpump_State panasonic_heat_pump/main/Heatpump_State
attr HeishaMon subscribeReading_Main_Inlet_Temp panasonic_heat_pump/main/Main_Inlet_Temp
attr HeishaMon subscribeReading_Main_Outlet_Temp panasonic_heat_pump/main/Main_Outlet_Temp
attr HeishaMon subscribeReading_Main_Target_Temp panasonic_heat_pump/main/Main_Target_Temp
attr HeishaMon subscribeReading_Operations_Counter panasonic_heat_pump/main/Operations_Counter
attr HeishaMon subscribeReading_Operations_Hours panasonic_heat_pump/main/Operations_Hours
attr HeishaMon subscribeReading_Outside_Temp panasonic_heat_pump/main/Outside_Temp
attr HeishaMon subscribeReading_Pump_Flow panasonic_heat_pump/main/Pump_Flow
attr HeishaMon subscribeReading_Room_Thermostat_Temp panasonic_heat_pump/main/Room_Thermostat_Temp
attr HeishaMon subscribeReading_Z1_Water_Temp panasonic_heat_pump/main/Z1_Water_Temp

#############################################
## Heihamon alle 3 min ein log
#############################################

define HeishaMon_tick at +*00:03 { fhem("setreading HeishaMon ping ".time()) }




#############################################
## Heihamon Logfile
#############################################



define FileLog_HeishaMon FileLog ./log/HeishaMon-%Y.log HeishaMon:.*(Main_Outlet_Temp|Main_Inlet_Temp|Outside_Temp|Main_Target_Temp|Compressor_Freq|Pump_Flow|Z1_Water_Temp|Buffer_Temp|Heat_Power_Production|Heat_Power_Consumption|COP).*
attr FileLog_HeishaMon room 1__Wärmepumpe

define SVG_HeishaMonTemp SVG FileLog_HeishaMon:SVG_HeishaMonTemp:CURRENT
attr SVG_HeishaMonTemp plotsize 1200,200
attr SVG_HeishaMonTemp room 1__Wärmepumpe

define SVG_HeishaMonTemp2 SVG FileLog_HeishaMon:SVG_HeishaMonTemp2:CURRENT
attr SVG_HeishaMonTemp2 plotsize 1200,150
attr SVG_HeishaMonTemp2 room 1__Wärmepumpe

define SVG_HeishaMonPower SVG FileLog_HeishaMon:SVG_HeishaMonPower:CURRENT
attr SVG_HeishaMonPower label HeishaMon-Leistung
attr SVG_HeishaMonPower plotsize 1200,250
attr SVG_HeishaMonPower room 1__Wärmepumpe


#############################################
## HeishaMon COP-Berechnung
## Notify reagiert auf Änderungen von Heat_Power_Production oder Heat_Power_Consumption
#############################################

define HeishaMon_COP notify HeishaMon:(Heat_Power_Production|Heat_Power_Consumption):.* { my $p=ReadingsNum("HeishaMon","Heat_Power_Production",0);; my $c=ReadingsNum("HeishaMon","Heat_Power_Consumption",0);; my $cop=($c>0)?sprintf("%.2f",$p/$c):0;; fhem("sleep 0.1;; setreading HeishaMon COP $cop");;\
}\

attr HeishaMon_COP event-on-change-reading .*
attr HeishaMon_COP room 1__Wärmepumpe

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 22 November 2025, 22:15:39
Hallo Ralf,

ich hab eine 5kW Jeisha und gehe noch einen Schritt weiter und steuere das Gerät vollständig von Fhem aus. Nach einigen Optimierungsrunden läuft die Maschine ohne jeden manuellen Eingriff meinerseits.

Bei Interesse kann ich gerne versuchen meine Automatisierung zu schildern.

Viele Grüße
Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: rasti am 24 November 2025, 20:57:22
Verbesserte Version


#############################################
## HeishaMon über Mosquitto (MQTT)
#############################################

define HeishaMon MQTT_DEVICE
attr HeishaMon IODev Mosquitto
attr HeishaMon alias Panasonic HeishaMon
attr HeishaMon event-min-interval .*:180
attr HeishaMon event-on-change-reading .*
attr HeishaMon room 1__Wärmepumpe
attr HeishaMon stateFormat {\
  "Fehler :    ".ReadingsVal("HeishaMon","Error","-")."<br><br>" .\
  "AT:".sprintf("%d",ReadingsNum("HeishaMon","Outside_Temp","-"))."°C<br>" .\
  "Soll:".sprintf("%d",ReadingsNum("HeishaMon","Main_Target_Temp","-"))."°C<br>" .\
  "VL:".sprintf("%d",ReadingsNum("HeishaMon","Main_Outlet_Temp","-"))."°C<br>" .\
  "RL:".sprintf("%d",ReadingsNum("HeishaMon","Main_Inlet_Temp","-"))."°C<br>" .\
  "HK1:".sprintf("%d",ReadingsNum("HeishaMon","Z1_Water_Temp","-"))."°C<br>" .\
  "Puffer:".sprintf("%d",ReadingsNum("HeishaMon","Buffer_Temp","-"))."°C<br><br>" .\
  "Kompr:".ReadingsVal("HeishaMon","Compressor_Freq","-")." Hz<br>" .\
  "Pumpe:".ReadingsVal("HeishaMon","Pump_Flow","-")." L/min<br>" .\
  "Pth:".ReadingsVal("HeishaMon","Heat_Power_Production","-")." W<br>" .\
  "Pel:".ReadingsVal("HeishaMon","Heat_Power_Consumption","-")." W<br>" .\
  "COP:".ReadingsVal("HeishaMon","COP","-")."<br>" .\
  "Quiet Mode Level :".ReadingsVal("HeishaMon","Quiet_Mode_Level","-")\
}
attr HeishaMon subscribeReading_Buffer_Tank_Delta panasonic_heat_pump/main/Buffer_Tank_Delta
attr HeishaMon subscribeReading_Buffer_Temp panasonic_heat_pump/main/Buffer_Temp
attr HeishaMon subscribeReading_Compressor_Freq panasonic_heat_pump/main/Compressor_Freq
attr HeishaMon subscribeReading_Cool_Delta panasonic_heat_pump/main/Cool_Delta
attr HeishaMon subscribeReading_Error panasonic_heat_pump/main/Error
attr HeishaMon subscribeReading_Heat_Delta panasonic_heat_pump/main/Heat_Delta
attr HeishaMon subscribeReading_Heat_Power_Consumption panasonic_heat_pump/main/Heat_Power_Consumption
attr HeishaMon subscribeReading_Heat_Power_Production panasonic_heat_pump/main/Heat_Power_Production
attr HeishaMon subscribeReading_Heatpump_State panasonic_heat_pump/main/Heatpump_State
attr HeishaMon subscribeReading_Main_Inlet_Temp panasonic_heat_pump/main/Main_Inlet_Temp
attr HeishaMon subscribeReading_Main_Outlet_Temp panasonic_heat_pump/main/Main_Outlet_Temp
attr HeishaMon subscribeReading_Main_Target_Temp panasonic_heat_pump/main/Main_Target_Temp
attr HeishaMon subscribeReading_Operations_Counter panasonic_heat_pump/main/Operations_Counter
attr HeishaMon subscribeReading_Operations_Hours panasonic_heat_pump/main/Operations_Hours
attr HeishaMon subscribeReading_Outside_Temp panasonic_heat_pump/main/Outside_Temp
attr HeishaMon subscribeReading_Pump_Flow panasonic_heat_pump/main/Pump_Flow
attr HeishaMon subscribeReading_Quiet_Mode_Level panasonic_heat_pump/main/Quiet_Mode_Level
attr HeishaMon subscribeReading_Room_Thermostat_Temp panasonic_heat_pump/main/Room_Thermostat_Temp
attr HeishaMon subscribeReading_Z1_Water_Temp panasonic_heat_pump/main/Z1_Water_Temp


#############################################
## Heihamon alle 3 min ein log
#############################################

define HeishaMon_tick at +*00:03 { fhem("setreading HeishaMon ping ".time()) }




#############################################
## Heihamon Logfile
#############################################



define FileLog_HeishaMon FileLog ./log/HeishaMon-%Y.log HeishaMon:.*(Main_Outlet_Temp|Main_Inlet_Temp|Outside_Temp|Main_Target_Temp|Compressor_Freq|Pump_Flow|Z1_Water_Temp|Buffer_Temp|Heat_Power_Production|Heat_Power_Consumption|COP|Quiet_Mode_Level).*
attr FileLog_HeishaMon room 1__Wärmepumpe

define SVG_HeishaMonTemp SVG FileLog_HeishaMon:SVG_HeishaMonTemp:CURRENT
attr SVG_HeishaMonTemp plotsize 1200,400
attr SVG_HeishaMonTemp room 1__Wärmepumpe

define SVG_HeishaMonTemp2 SVG FileLog_HeishaMon:SVG_HeishaMonTemp2:CURRENT
attr SVG_HeishaMonTemp2 plotsize 1200,150
attr SVG_HeishaMonTemp2 room 1__Wärmepumpe

define SVG_HeishaMonPower SVG FileLog_HeishaMon:SVG_HeishaMonPower:CURRENT
attr SVG_HeishaMonPower label HeishaMon-Leistung
attr SVG_HeishaMonPower plotsize 1200,250
attr SVG_HeishaMonPower room 1__Wärmepumpe





#############################################
## HeishaMon COP-Berechnung
## Notify reagiert auf Änderungen von Heat_Power_Production oder Heat_Power_Consumption und schreibt COP mit Event ins Device:
#############################################

define HeishaMon_COP notify HeishaMon:(Heat_Power_Production|Heat_Power_Consumption):.* { my $p=ReadingsNum("HeishaMon","Heat_Power_Production",0);; my $c=ReadingsNum("HeishaMon","Heat_Power_Consumption",0);; my $cop=($c>0)?sprintf("%.2f",$p/$c):0;; fhem("sleep 0.1;; setreading HeishaMon COP $cop");;\
}\

attr HeishaMon_COP event-on-change-reading .*
attr HeishaMon_COP room 1__Wärmepumpe

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: rasti am 24 November 2025, 21:12:00
Zitat von: Gisbert am 22 November 2025, 22:15:39Hallo Ralf,

ich hab eine 5kW Jeisha und gehe noch einen Schritt weiter und steuere das Gerät vollständig von Fhem aus. Nach einigen Optimierungsrunden läuft die Maschine ohne jeden manuellen Eingriff meinerseits.

Bei Interesse kann ich gerne versuchen meine Automatisierung zu schildern.

Viele Grüße
Gisbert

Hallo Gisbert,

ja habe prinzipiell Interesse ich muss bei meiner WP aber erst nochmal loggen und feintunen.

Was ich beispielsweise in FHEM machen würde wäre den Flüstermodus 0-1-2-3 in Abhängigkeit der Aussentemp. zu schalten.

Bei -10° brauche ich fast die volle Leistung (quitmode=0) bei Temp. um die +5°C wie jetzt muss ich den Kompressor
etwas einbremsen und schalte quietmode=3 ansonsten fängt das Ding zu takten denn bei quietmode=0 rennt er mit fast 8kw
los und bevor er runtermoduliert hat ist alles schon zu heiss und schaltet ab. Mit quietmode=3 fängt er erst um 50Hz an und moduliert
auf bis zu 20Hz runter - dauerhaft über viele Stunden. Hat gerade COP-Werte von 6-8......ich kanns kaum glauben  ;D


Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 24 November 2025, 21:47:28
Hallo Ralf,

so wie du es schilderst, könnte es sein, dass deine Wärmepumpe etwas zu groß ist.
Eine generelle Maßnahme zur Verhinderung des Taktens ist eine Taktsperre, wenn sie die Wärme nicht mehr los wird und ausgeht. Abhängig von der Außentemperatur pausiert meine Wärmepumpe dann für 2-3.5 Stunden.
Die Wärmepumpe wird durch Fhem eingeschaltet, wenn ein Mindestheizbedarf  vorliegt.
Wichtig ist, dass die Heizkurve so niedrig wie möglich eingestellt ist. Das Delta zwischen Vor- und Rücklauf hab ich auf 4°C eingestellt. 3°C hab ich auch versucht - da hatte ich aber den Eindruck, dass dies zu vorschnellem Abschalten geführt hat.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: rasti am 24 November 2025, 22:56:16
Zitat von: Gisbert am 24 November 2025, 21:47:28Hallo Ralf,
so wie du es schilderst, könnte es sein, dass deine Wärmepumpe etwas zu groß ist.

Ja das ist der Fall. Haus hat ca. 300qm, 3 beheizte Wohnungen und ist aus 1998.
Ich habe in den letzten 3 Wintern einen Großteil des Heizwärmebedarfs mit
Splitklimaanlagen gedeckt. Die (bisherige) Ölheizung habe ich immer erst dann angemacht,
wenn die Aussentemp dauerhaft unter ca. 5----6° C gefallen ist.  Wenn ich die Splitklimas
(die einen besseren COP habe als die LWWP) jetzt konsequent abschalten würde dann hab ich richtig Wärmebedarf
und dann wäre die 9kW Jeisha auch passender zum Haus. Aber allein bei über -10°C nicht ausreichend.

ZitatEine generelle Maßnahme zur Verhinderung des Taktens ist eine Taktsperre, wenn sie die Wärme nicht mehr los wird und ausgeht. Abhängig von der Außentemperatur pausiert meine Wärmepumpe dann für 2-3.5 Stunden.
Die Wärmepumpe wird durch Fhem eingeschaltet, wenn ein Mindestheizbedarf  vorliegt. Wichtig ist, dass die Heizkurve so niedrig wie möglich eingestellt ist. Das Delta zwischen Vor- und Rücklauf hab ich auf 4°C eingestellt. 3°C hab ich auch versucht - da hatte ich aber den Eindruck, dass dies zu vorschnellem Abschalten geführt hat.
Heizkurve so niedrig wie möglich ist klar. Aber das delta_T / Heizbetrieb bei der Jeisha ist nicht die Spreizung VL/RL
sondern die Einschaltbedingung für die Wärmepumpe lt. Anleitung.  Das delta T unterhalb der Solltemp. ist doch schon das was du als Mindestheizbedarf per FHEM als Startbedingung für die WP nimmt.
Ich hab den Wert bei mir auf 10k gestellt. Als Taktsperre wie du das bezeichnest. Und die Jeisha macht immer 4...5k Spreizung (VL-RL) egal was man da einstellt, siehe logs.
Oder hab ich da was nicht verstanden ?

PS: Wo unten  VL-Soll steht ist VL-Heizkreis-Temp. (im Heizungskreis-Rücklauf vor Parallelpuffer) gemeint. Die Rücklauf WP - Temp ist ca. 1k höher weil in der WP gemessen.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 25 November 2025, 13:45:11
Hallo Ralf,

den Text, den du aus der Anleitung zitierst, passt zum Wiedereinschalten der Anlage. Es könnte sich um dieses Topic handeln, welches man per MQTT zur Panasonic schicken kann:
SET18    SetFloorHeatDelta    Set floor heating delta in Kelvin    1-15Das Topic 23 könnte das DeltaT zwischen Vor- und Rücklauf im Heizbetrieb sein:
TOP23    main/Heat_Delta    Heat delta (K)Bei meiner Panasonic schwankt der Wert grob zwischen 3 bis 5°C. Wenn die Wärmepumpe bei mittlerer bis hoher Leistung läuft, dann ist dieser Wert exakt 4.0°C.
Topic 23 kann man anscheinend nur am Wand-Panel ändern, nicht über Heishamon.

Ich versuche die Panasonic mal mit
SET18    SetFloorHeatDelta 2 oder 8°C laufen zu lassen - irgendeine Reaktion wird es geben, aus der man rückschließen kann, um welche Größe es sich handelt. Blöderweise steht dieser Wert aktuell bei 4°C - wie der Wert von Topic 23.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: rasti am 25 November 2025, 14:41:22
Zitat von: Gisbert am 25 November 2025, 13:45:11Hallo Ralf,
den Text, den du aus der Anleitung zitierst, passt zum Wiedereinschalten der Anlage. Es könnte sich um dieses Topic handeln, welches man per MQTT zur Panasonic schicken kann:
SET18    SetFloorHeatDelta    Set floor heating delta in Kelvin    1-15Das Topic 23 könnte das DeltaT zwischen Vor- und Rücklauf im Heizbetrieb sein:
TOP23    main/Heat_Delta    Heat delta (K)Bei meiner Panasonic schwankt der Wert grob zwischen 3 bis 5°C. Wenn die Wärmepumpe bei mittlerer bis hoher Leistung läuft, dann ist dieser Wert exakt 4.0°C.
Topic 23 kann man anscheinend nur am Wand-Panel ändern, nicht über Heishamon.
Hallo Gisbert, Topic23 ist genau das was zur Wiedereinschaltbedingung (siehe Anleitung) gehört. Ich hab da übers Bedienpanel 10K eingestellt und sehe diesen Wert bei Topic23 in Heishamon. Ich glaube, das DeltaT zwischen Vor- und Rücklauf im Heizbetrieb was die Jeisha versucht hinzuregeln, also diesen deltaT-Wert kann man denke ich nicht einstellen, ich vermute der ist fix.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 25 November 2025, 14:42:49
Hallo Ralf,

ich hab eine neue Erkenntnis zu SET18 und TOP23. Mit dem Topic main/SetFloorHeatDelta setzt man den Vorgabewert von DeltaT zwischen Vorlauf und Rücklauf. TOP23 liest dann diesen Wert aus.
Ich hab den Wert jetzt mal auf 3°C gesetzt. Die Erwartung ist, dass der Durchfluss sich um 1/3 gegenüber einem DeltaT von 4°C erhöht. Sobald die Wärmepumpe wieder läuft und stabile Daten liefert, melde ich mich nochmals.

Zum Takten: bei der jetzigen Wetterlage (5°C) habe ich, von den Enteisungen abgesehen, ein Takt pro Tag (d.h. die Wärmepumpe geht einmal aus, pausiert einige Stunden, geht dann wieder an - das war's).

Viele Grüße Gisbert

PS:
Ich lese gerade deinen vorigen Beitrag, während ich gleichzeitig geschrieben habe.
Das DeltaT zwischen Vor- und Nachlauf kann man nach meiner Erfahrung aktiv ändern. Ich werde berichten, wenn ich den obigen Test gemacht habe.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 25 November 2025, 23:52:44
Hallo Ralf,

mein Test mit SET18 auf 3°C war insofern erfolgreich, dass ich sagen kann, dass es sich um das DeltaT im Betrieb handelt.
Mit dieser Einstellung ist die Differenz zwischen Vor- und Rücklauf grob 3°C. Zudem ist der Durchfluss jetzt 24 statt knapp 18 Liter/min - also eine Bestätigung meiner Vermutung.

Ich stelle jetzt wieder auf 4°C zurück, hauptsächlich, da meine Rohrleitungen suboptimal für den höheren Durchsatz geeignet sind.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: sigma415 am 05 Juni 2026, 13:13:55
Zitat von: Gisbert am 22 November 2025, 22:15:39Hallo Ralf,

ich hab eine 5kW Jeisha und gehe noch einen Schritt weiter und steuere das Gerät vollständig von Fhem aus. Nach einigen Optimierungsrunden läuft die Maschine ohne jeden manuellen Eingriff meinerseits.

Bei Interesse kann ich gerne versuchen meine Automatisierung zu schildern.

Viele Grüße
Gisbert

Hallo @Gisbert,
kriege demnächst auch meine Aquarea und Heishamon.
Wärest Du bereit, deinen FHEM-Code (Einbindung via MQTT und ggf. auch deine Hinweise zur Automatisierung) zur Verfügung zu stellen ?
Wäre super, vielen Dank.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 05 Juni 2026, 13:47:22
Zitat von: sigma415 am 05 Juni 2026, 13:13:55
Zitat von: Gisbert am 22 November 2025, 22:15:39Hallo Ralf,

ich hab eine 5kW Jeisha und gehe noch einen Schritt weiter und steuere das Gerät vollständig von Fhem aus. Nach einigen Optimierungsrunden läuft die Maschine ohne jeden manuellen Eingriff meinerseits.

Bei Interesse kann ich gerne versuchen meine Automatisierung zu schildern.

Viele Grüße
Gisbert

Hallo @Gisbert,
kriege demnächst auch meine Aquarea und Heishamon.
Wärest Du bereit, deinen FHEM-Code (Einbindung via MQTT und ggf. auch deine Hinweise zur Automatisierung) zur Verfügung zu stellen ?
Wäre super, vielen Dank.

Ja, das mache ich gerne.

Wie aus dem obigen Verlauf hervorgeht, schalte ich die Pana aktiv über Fhem ein, wenn das Einschaltkriterium erfüllt ist. Die Pana läuft dann solange, bis sie ihre Wärme im Haus nicht mehr los wird und dann selbständig ausschaltet. Danach bekommt die Pana eine Sperre (2-3.5h, je nach Außentemperatur) verpasst, damit sie nicht gleich wieder angeht, falls das Einschaltkriterium doch erfüllt sein sollte.
Zum Einschaltkriterium: ich kenne die einzelnen Raumtemperaturen und deren Abweichung von der Solltemperatur. Für die Räume, die unterhalb der Solltemperatur liegen, errechne ich eine flächengewichte Zahl, die über alle Räume aufaddiert wird. Wenn diese Zahl (mit willkürlicher Einheit) den Wert 30 (in meinem Fall) übersteigt, dann wird das Einschaltkriterium auf 1 gesetzt, sonst 0.

Das wäre jetzt mal der 1. Schritt. Zu erwähnen ist noch, dass ich kein Warmwasser über die Pana mache, was aber im wesentlichen keinen Einfluss auf meine Steuerung hätte. Da ich nicht weiß, ob die Pana beim Warmwasser vorher abschaltet und dann das 3-Wegeventil schaltet, oder ob sie einfach durchläuft, könnte das noch einen Einfluss auf die Steuerung haben.

Da ich immer noch MQTT statt MQTT2 benutze (nicht sinnvoll, aber noch nicht genügend Motivation zur Änderung gehabt), poste ich als erstes mal, wie ich die Pana auslese. Der nächste Step ist dann die Steuerung.

Da die Pana sehr viele Readings bereithält, habe ich die Readings inhaltlich auf drei MQTT-Devices aufgeteilt (kommt separat, da ich dafür zum PC wechseln muss).

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 05 Juni 2026, 14:03:47
Hier das 1. Device, im raw-Format. Man kann sicher einiges weglassen, aber so hast du alles, was ich auch benutze und worauf ich bei der Steuerung Bezug nehme.
defmod HeishaMon_IP MQTT_DEVICE
attr HeishaMon_IP IODev MyBroker
attr HeishaMon_IP alias HeishaMon IP
attr HeishaMon_IP autoSubscribeReadings panasonic_heat_pump/stats
attr HeishaMon_IP comment 30.4.2026:\
Dass HeishaMon nach einem Firmware-Update Werte wie 0, -1 oder -128 anzeigt, \
liegt meistens daran, dass die Kommunikation zwischen dem HeishaMon-Modul und der Panasonic-Wärmepumpe unterbrochen ist \
oder die Register nicht korrekt gelesen werden können.\
Lösung:\
Gehen Sie ins Web-Interface und klicken Sie unter "Settings" auf Save, auch ohne Änderungen vorzunehmen. \
Dies startet die internen Prozesse oft neu.\
---\
Zur Steuerung der Heizleistung wird der Wert der beheizten Fläche verwendet.\
Zusätzlich wird der Wert für SetHeatRequestTemperature für Heishamon in diesem Device anhand der beheizten Fläche und der Temperaturvorhersage berechnet.\
Zwischen 5 und 10°C wird der Wert für SetHeatRequestTemperature um 1°C reduziert: -0.5*(1+tanh(ReadingsVal($name,'Temp_eff','0')-7.5))\
Man kann Heishamon auch per Json abfragen: http://192.168.2.56/json\
---\
Anstatt den Wert SetHeatRequestTemperature zwischen 20 und 55% der beheizten Fläche stufenweise zu ändern,\
wurde eine angepasste, lineare Funktion verwendet.\
Vorher wurden für die linken Grenzen die folgenden Werte benutzt:\
20 → -1\
25 → 0\
30 → 0\
35 → 1\
45 → 2\
5.2.2025:\
Z1HeatRequestTemp weniger steil definiert, da die Anhebung nach oben in der Realität nicht funktioniert.\
Insgesamt soll sich die Änderung der Heizkurve nur zwischen ca. -2 und +3 bewegen.\
24.11.2025:\
Im DOIF-Device Panasonic_Jeisha wird nur noch eine Absenkung der Heizkurve zugelassen (<=0), \
da eine Anhebung auch bei niedrigen Außentemperaturen keine Auswirkung auf die tatsächliche Vorlauftemperatur hat.
attr HeishaMon_IP event-aggregator Beheizte_Flaeche::none:median:450
attr HeishaMon_IP event-min-interval Beheizte_Flaeche_av:300, Zeitstempel:300
attr HeishaMon_IP event-on-change-reading Beheizte_Flaeche:0.5,Beheizte_Flaeche_av:0.5,Taktsperre,Temp:0.1,Temp_eff:0.1,Z1HeatRequestTemp,Zeitstempel,clouds,dTemp_eff,wait_Wert
attr HeishaMon_IP group Panasonic Aquarea
attr HeishaMon_IP icon it_wifi
attr HeishaMon_IP room Heizung
attr HeishaMon_IP sortby 1
attr HeishaMon_IP stateFormat Beheizte Fläche: [$name:Beheizte_Flaeche_av:r1]%<br/>\
Heizkurve • check: [$name:myZ1HeatRequestTemp] • [$name:mycheck_Z1HeatRequestTemp]°C<br/>\
Aussentemperatur: [TH.Kuhlmannweg8:temperature]°C<br/>\
Cloud cover: [Leverkusen.OpenWeatherMap:cloudCover]%<br/>\
Temp<i><span style="vertical-align: -3px;; font-size: 75%;;">eff</span></i>: [$name:Temp_eff:r1]°C<br/>\
Forecast T<i><span style="vertical-align: -3px;; font-size: 75%;;">14:00</span></i> heute: [DWD.Wetter.Leverkusen:fc0_14_TTT:r1]°C<br/>\
Forecast T<i><span style="vertical-align: -3px;; font-size: 75%;;">14:00</span></i> morgen: [DWD.Wetter.Leverkusen:fc1_14_TTT:r1]°C<br/>\
[$name:IPaddress]<br/>\
<span style='vertical-align: middle;; font-size: 85%;;'>[$name:Zeitstempel]</span>
attr HeishaMon_IP subscribeReading_IP panasonic_heat_pump/ip
attr HeishaMon_IP subscribeReading_LWT panasonic_heat_pump/LWT
attr HeishaMon_IP subscribeReading_stats panasonic_heat_pump/stats
attr HeishaMon_IP userReadings Temp {if (strftime("%H", localtime) <= 18) {round(1/2*ReadingsVal('myTemperature','mytemp','') + 1/2*ReadingsVal('DWD.Wetter.Leverkusen','fc0_4_TTT',''),2)} \
else {round(1/2*ReadingsVal('myTemperature','mytemp','') + 1/2*ReadingsVal('DWD.Wetter.Leverkusen','fc1_4_TTT',''),2)}}, \
Beheizte_Flaeche {Beheizte_Flaeche_EG_OG()}, \
Beheizte_Flaeche_av {round(movingAverage($name,'Beheizte_Flaeche',900)+ReadingsNum($name,'solar_surplus',0),2)},\
clouds {if (isday() == 1) {1*(100-ReadingsVal('Leverkusen.OpenWeatherMap','cloudCover',''))/100} \
else {-1*(100-ReadingsVal('Leverkusen.OpenWeatherMap','cloudCover',''))/100}}, \
Temp_eff {if ((ReadingsVal($name,'Temp','') + ReadingsVal($name,'clouds','') >= 25)) {25} \
else {round(ReadingsVal($name,'Temp','') + ReadingsVal($name,'clouds',''),2)}}, \
dTemp_eff {if (ReadingsVal($name,'Temp_eff','') < 25) \
{round(0.545454545454545*(ReadingsVal('myTemperature','mytemp','')-ReadingsVal($name,'Temp_eff','')),3)} \
else {0}}, \
Z1HeatRequestTemp {if (ReadingsVal($name,'dtemp_eff','0')+1 > 5) {1} \
elsif (ReadingsVal($name,'dtemp_eff','0')-1 < -5) {-1} \
elsif ((22 <= strftime("%H", localtime) or strftime("%H", localtime) <= 4) and ReadingsVal($name,'Beheizte_Flaeche_av','0') < 20) \
{round((ReadingsVal($name,'dtemp_eff','0')-0.5*(1+tanh(ReadingsVal($name,'Temp_eff','0')-7.5))-1)/2+ReadingsNum('HeishaMon_main','addCompressorFreq',0),0)} \
elsif (ReadingsVal($name,'Beheizte_Flaeche_av','0') < 20) \
{round((ReadingsVal($name,'dtemp_eff','0')-0.5*(1+tanh(ReadingsVal($name,'Temp_eff','0')-7.5))-2)/2+ReadingsNum('HeishaMon_main','addCompressorFreq',0),0)} \
elsif (20 <= ReadingsVal($name,'Beheizte_Flaeche_av','0') <= 75) \
{round((ReadingsVal($name,'dtemp_eff','0')-0.5*(1+tanh(ReadingsVal($name,'Temp_eff','0')-7.5))+0.09090909*ReadingsVal($name,'Beheizte_Flaeche_av','0')-3.81818182)/2+ReadingsNum('HeishaMon_main','addCompressorFreq',0),0)} \
elsif (ReadingsVal($name,'Beheizte_Flaeche_av','0') > 75) \
{round((ReadingsVal($name,'dtemp_eff','0')-0.5*(1+tanh(ReadingsVal($name,'Temp_eff','0')-7.5))+2)/2+ReadingsNum('HeishaMon_main','addCompressorFreq',0),0)}}, \
myZ1HeatRequestTemp {my $ret = ReadingsVal($name,'Z1HeatRequestTemp','');; $ret =~ s/-0/0/g;; return $ret}, \
mycheck_Z1HeatRequestTemp {my $ret = ReadingsVal($name,'check_Z1HeatRequestTemp','');; $ret =~ s/-0/0/g;; return $ret}, \
Zeitstempel:Beheizte_Flaeche.* {substr(ReadingsTimestamp($name,'Beheizte_Flaeche',''),0,16)}, \
IPaddress {"<a href=\"http://192.168.2.56\" style=\"color: green;; text-decoration: underline;;\" target=\"_blank\" rel=\"noopener noreferrer\">http://192.168.2.56</a>"}

2. Device, hier werden die meisten Readings erhalten.
defmod HeishaMon_main MQTT_DEVICE
attr HeishaMon_main IODev MyBroker
attr HeishaMon_main alias HeishaMon main
attr HeishaMon_main autoSubscribeReadings panasonic_heat_pump/main/+
attr HeishaMon_main comment Defrost_number: Anzahl der Enteisungen ab dem 1.1.2026\
---\
8.1.2025:\
Reset von Errormeldungen:\
http://192.168.2.56/command?SetReset=1\
---\
22.10.2024:\
Funktionseinstellung (Menü 1.6):\
E-Heizstab E-Heizung EIN\
Installateur-Setup > Betriebseinstellung (Menü 6.1):\
E-Heizstab EIN/AUS, Außentemperatur: -8°C\
Verzögerung 30 min (Standard)\
E-Heizstab EIN/AUS, Zuschaltung: -5°C\
E-Heizstab EIN/AUS, Abschaltung: -3°C\
---\
Heizstab zum Abtauen aktivieren:\
https://www.haustechnikdialog.de/Forum/t/259696/Jeisha-Heizstab-Abtauen\
Spezialmenu: Taste links / Taste runter / Menu (rechts oben)\
am besten in der Reihenfolge für 10 Sekunden drücken, dann kann man den E-Heizstab aktivieren.\
W I C H T I G :\
Nach dem Aufruf des Spezialmenus ist die Heizkurve auf den Werkszustand (Heizkörper) zurückgesetzt.\
Es ist nötig, die Heizkurve neu mit einem set-Befehl zu definieren (s. Ende des Kommentars).\
Zum Nachlesen der Topics: \
https://github.com/Egyras/HeishaMon/blob/master/MQTT-Topics.md\
Ausgabe im Json-Format: \
http://192.168.2.56/json\
MQTT: send mqtt message to base_topic/commands/SetTopic\
(e.g.: panasonic_heat_pump/commands/SetHeatpump)\
SetHeatpump - Set heatpump on or off 0=off, 1=on\
SetZ1HeatRequestTemperature - Set Z1 heat shift or direct heat temperature -5 to 5 or 20 to max\
SetFloorHeatDelta - Set floor heating delta in Kelvin 1-15\
SetHeaterStartDelta - Set heater start delta T (only J-series) in kelvin\
SetHeaterStopDelta - Set heater stop delta T (only J-series) in kelvin\
SetAltExternalSensor - Set the alternative external outdoor sensor 0=disabled, 1=enabled\
SetHeatingOffOutdoorTemp - Set Outdoor Temperature to stop heating 5 to 35\
SetQuietMode - Set quiet mode level 0, 1, 2 or 3\
SetPowerfulMode - Set powerful mode run time in minutes 0=off, 1=30, 2=60 or 3=90\
SetForceDefrost - Forces defrost routine - 0, 1\
SetBivalentControl - Set bivalent control switch - 0=disabled, 1=enabled\
SetBivalentStartTemp - Set bivalent start temp - -15 to 35\
TOP59 - main/Room_Heater_State - When enabled, backup heater can be used for room heating (0=disabled, 1=enabled)\
TOP60 - main/Internal_Heater_State - Internal backup heater state (0=inactive, 1=active)\
Offenbar kann man damit nicht die Zusatzheizung steuern, denn sie tauchen nicht bei den setTopics auf.\
---\
Ändern der Heizkurve\
nicht vollständig:\
panasonic_heat_pump/commands/SetCurves {zone1:{heat:{target:{low:25}}}}\
http://IP/command?SetCurves={zone1:{heat:{target:{low:25}}}\
vollständig, Heizkurve: +10/28 -10/36:\
set HeishaMon_main SetCurves {zone1:{heat:{target:{high:36,low:28},outside:{high:10,low:-10}}}}\
17.1.2025, geändert:\
set HeishaMon_main SetCurves {zone1:{heat:{target:{high:34,low:28},outside:{high:10,low:-10}}}}\
3.2.2025, geändert:\
set HeishaMon_main SetCurves {zone1:{heat:{target:{high:31,low:28},outside:{high:10,low:0}}}}\
17.2.2025, geändert:\
set HeishaMon_main SetCurves {zone1:{heat:{target:{high:30,low:28},outside:{high:10,low:3}}}}\
14.9.2025, minimal nach unten parallel verschobene Heizkurve, im mittleren Bereich ca. 0.487°C:\
set HeishaMon_main SetCurves {zone1:{heat:{target:{high:30,low:27},outside:{high:12,low:1}}}}\
Folgende Heizkurve wäre mit der vom 17.2.2025 quasi identisch, jedoch sind die Eckwerte niedriger/höher:\
{zone1:{heat:{target:{high:31,low:27},outside:{high:13,low:0}}}} - nicht umgesetzt.\
---\
Lüftersteuerung\
Defrosting tritt bei folgenden Bedingungen auf:\
Messwerte von einem Homematic Temperatur/Feuchte-Messgerät\
<= 4°C\
> 70% rel.h.\
Während des Defrostings darf der Lüfter nicht laufen.\
Der Lüfter geht aus, wenn während des Abtauvorgangs der Kompressor ausgeht.\
Der Lüfter geht wieder an, wenn der Kompressor wieder normal anläuft.\
Das muss bei der Steuerung des Relais beachtet werden.\
---\
Sommer/Winter-Abschaltung: 14°C\
---\
Man kann Heishamon auch per Json abfragen: http://192.168.2.56/json\
---\
Um die Panasonic länger laufen zu lassen,\
wird bei einer Kompressorfrequenz <= 24 1°C zur Heizkurve (in Heishamon_IP) dazu addiert.\
https://www.haustechnikdialog.de/Forum/t/268257/Waermepumpe-schonen-lange-Standzeit-vs-Erhoehung-der-Lebensdauer\
Die Lebensdauer des Verdichters liegt grob bei 100K Ein-/Ausschaltvorgängen.\
---\
16.11.2025: Simulation des externen Temperatursensors\
Dennis Nörmann hat einen 47k-Widerstand eingebaut, der -15°C entspricht.\
Ich hatte einen höheren Widerstand eingebaut, um auf -18°C zu kommen.\
Das sollte/muss auf 47k geändert werden.\
8.1.2026: Es wurde 2x51k (~25k) eingebaut, was in etwa -4 bis -5°C ergibt.
attr HeishaMon_main event-min-interval Pana_an:120,Heatpump_State:120,heat_power:60,heat_kWh:60,Pump_Flow:60,Main_Inlet_Temp:60,Main_Outlet_Temp:60,diff_temp:60,Outside_Temp:60
attr HeishaMon_main event-on-change-reading Pana_an,Laufzeit_h,Alt_External_Sensor,mid_temp,diff_temp,Error,heat_kWh,heat_power,\
,Zeitstempel,Pump_Speed,Heatpump_State,Pump_Flow,\
,Operating_Mode_State,Main_Inlet_Temp,Main_Outlet_Temp,Main_Target_Temp,Compressor_Freq,\
,Operations_Hours,Operations_Counter,Outside_Temp,Heat_Power_Production,Heat_Power_Consumption,\
,Outside_Pipe_Temp,Heat_Delta,Inside_Pipe_Temp,Internal_Heater_State,Pump_Flowrate_Mode,\
,Z1_Heat_Request_Temp,Fan1_Motor_Speed,Defrosting_State,Defrost_Temp
attr HeishaMon_main event-on-update-reading heat_kWh,heat_power
attr HeishaMon_main group Panasonic Aquarea
attr HeishaMon_main icon sani_heating_heatpump
attr HeishaMon_main publishSet_SetAltExternalSensor panasonic_heat_pump/commands/SetAltExternalSensor
attr HeishaMon_main publishSet_SetBivalentControl panasonic_heat_pump/commands/SetBivalentControl
attr HeishaMon_main publishSet_SetBivalentStartTemp panasonic_heat_pump/commands/SetBivalentStartTemp
attr HeishaMon_main publishSet_SetCurves panasonic_heat_pump/commands/SetCurves
attr HeishaMon_main publishSet_SetFloorHeatDelta panasonic_heat_pump/commands/SetFloorHeatDelta
attr HeishaMon_main publishSet_SetForceDefrost panasonic_heat_pump/commands/SetForceDefrost
attr HeishaMon_main publishSet_SetHeaterStartDelta panasonic_heat_pump/commands/SetHeaterStartDelta
attr HeishaMon_main publishSet_SetHeaterStopDelta panasonic_heat_pump/commands/SetHeaterStopDelta
attr HeishaMon_main publishSet_SetHeatingOffOutdoorTemp panasonic_heat_pump/commands/SetHeatingOffOutdoorTemp
attr HeishaMon_main publishSet_SetHeatpump panasonic_heat_pump/commands/SetHeatpump
attr HeishaMon_main publishSet_SetPowerfulMode panasonic_heat_pump/commands/SetPowerfulMode
attr HeishaMon_main publishSet_SetQuietMode panasonic_heat_pump/commands/SetQuietMode
attr HeishaMon_main publishSet_SetZ1HeatRequestTemperature panasonic_heat_pump/commands/SetZ1HeatRequestTemperature
attr HeishaMon_main room Heizung
attr HeishaMon_main sortby 2
attr HeishaMon_main stateFormat T<b><i><span style="vertical-align: -3px;; font-size: 75%;;">s</span></i></b> [$name:Main_Target_Temp] • T<b><i><span style="vertical-align: -3px;; font-size: 75%;;">V</span></i></b> [$name:Main_Outlet_Temp:r2] • T<b><i><span style="vertical-align: -3px;; font-size: 75%;;">R</span></i></b> [$name:Main_Inlet_Temp:r2]°C<br/>\
<b>Φ</b> • <b>P</b>: [$name:heat_power:r2] • <span style='color:{(ReadingsNum('HeishaMon_s0','Watt','') > 0.05 ? "red":"#2e5e87")}'><b>[HeishaMon_s0:Watt:r3]</b></span> kW<br/>\
Pumpenfluss: [$name:Pump_Flow:r2] l/min<br/>\
Pumpendrehzahl: <span style='color:{(ReadingsNum('HeishaMon_main','Heatpump_State','') > 0 ? "red":"#2e5e87")}'><b>[$name:Pump_Speed]</b></span> Upm<br/>\
Lüfterdrehzahl: <span style='color:{(ReadingsNum('HeishaMon_main','Heatpump_State','') > 0 ? "red":"#2e5e87")}'><b>[$name:Fan1_Motor_Speed]</b></span> Upm<br/>\
Kompressorfrequenz: <span style='color:{(ReadingsNum('HeishaMon_main','Heatpump_State','') > 0 ? "red":"#2e5e87")}'><b>[$name:Compressor_Freq]</b></span> Hz<br/>\
Außentemp. Panasonic: <span style='color:{(ReadingsNum('HeishaMon_main','Alt_External_Sensor','') == 1 ? "magenta":"#2e5e87")}'><b>[$name:Outside_Temp]°C</span></b><br/>\
Outside pipe temp.: [$name:Outside_Pipe_Temp]°C<br/>\
Betriebsstunden: [$name:Operations_Hours] h<br/>\
Kompressorstarts: [$name:Operations_Counter]<br/>\
Laufzeit pro Start: [$name:Laufzeit]<br/>\
<span style='vertical-align: middle;; font-size: 85%;;'>[$name:Zeitstempel]</span>
attr HeishaMon_main subscribeReading_Alt_External_Sensor panasonic_heat_pump/main/Alt_External_Sensor
attr HeishaMon_main subscribeReading_Anti_Freeze_Mode panasonic_heat_pump/main/Anti_Freeze_Mode
attr HeishaMon_main subscribeReading_Bivalent_Advanced_DHW panasonic_heat_pump/main/Bivalent_Advanced_DHW
attr HeishaMon_main subscribeReading_Bivalent_Advanced_DHW_Del0b panasonic_heat_pump/main/Bivalent_Advanced_DHW_Del0b
attr HeishaMon_main subscribeReading_Bivalent_Advanced_DHW_Delay panasonic_heat_pump/main/Bivalent_Advanced_DHW_Delay
attr HeishaMon_main subscribeReading_Bivalent_Advanced_Heat panasonic_heat_pump/main/Bivalent_Advanced_Heat
attr HeishaMon_main subscribeReading_Bivalent_Advanced_Start_Delay panasonic_heat_pump/main/Bivalent_Advanced_Start_Delay
attr HeishaMon_main subscribeReading_Bivalent_Advanced_Start_Temp panasonic_heat_pump/main/Bivalent_Advanced_Start_Temp
attr HeishaMon_main subscribeReading_Bivalent_Advanced_Stop_Delay panasonic_heat_pump/main/Bivalent_Advanced_Stop_Delay
attr HeishaMon_main subscribeReading_Bivalent_Advanced_Stop_Temp panasonic_heat_pump/main/Bivalent_Advanced_Stop_Temp
attr HeishaMon_main subscribeReading_Bivalent_Control panasonic_heat_pump/main/Bivalent_Control
attr HeishaMon_main subscribeReading_Bivalent_Mode panasonic_heat_pump/main/Bivalent_Mode
attr HeishaMon_main subscribeReading_Bivalent_Start_Temp panasonic_heat_pump/main/Bivalent_Start_Temp
attr HeishaMon_main subscribeReading_Buffer_Installed panasonic_heat_pump/main/Buffer_Installed
attr HeishaMon_main subscribeReading_Buffer_Tank_Delta panasonic_heat_pump/main/Buffer_Tank_Delta
attr HeishaMon_main subscribeReading_Buffer_Temp panasonic_heat_pump/main/Buffer_Temp
attr HeishaMon_main subscribeReading_Bypass_Outlet_Temp panasonic_heat_pump/main/Bypass_Outlet_Temp
attr HeishaMon_main subscribeReading_Compressor_Current panasonic_heat_pump/main/Compressor_Current
attr HeishaMon_main subscribeReading_Compressor_Freq panasonic_heat_pump/main/Compressor_Freq
attr HeishaMon_main subscribeReading_Cool_Delta panasonic_heat_pump/main/Cool_Delta
attr HeishaMon_main subscribeReading_Cool_Power_Consumption panasonic_heat_pump/main/Cool_Power_Consumption
attr HeishaMon_main subscribeReading_Cool_Power_Production panasonic_heat_pump/main/Cool_Power_Production
attr HeishaMon_main subscribeReading_Cool_To_Heat_Temp panasonic_heat_pump/main/Cool_To_Heat_Temp
attr HeishaMon_main subscribeReading_Cooling_Mode panasonic_heat_pump/main/Cooling_Mode
attr HeishaMon_main subscribeReading_DHW_Heat_Delta panasonic_heat_pump/main/DHW_Heat_Delta
attr HeishaMon_main subscribeReading_DHW_Heater_Operations_Hours panasonic_heat_pump/main/DHW_Heater_Operations_Hours
attr HeishaMon_main subscribeReading_DHW_Heater_State panasonic_heat_pump/main/DHW_Heater_State
attr HeishaMon_main subscribeReading_DHW_Holiday_Shift_Temp panasonic_heat_pump/main/DHW_Holiday_Shift_Temp
attr HeishaMon_main subscribeReading_DHW_Installed panasonic_heat_pump/main/DHW_Installed
attr HeishaMon_main subscribeReading_DHW_Power_Consumption panasonic_heat_pump/main/DHW_Power_Consumption
attr HeishaMon_main subscribeReading_DHW_Power_Production panasonic_heat_pump/main/DHW_Power_Production
attr HeishaMon_main subscribeReading_DHW_Sensor_Selection panasonic_heat_pump/main/DHW_Sensor_Selection
attr HeishaMon_main subscribeReading_DHW_Target_Temp panasonic_heat_pump/main/DHW_Target_Temp
attr HeishaMon_main subscribeReading_DHW_Temp panasonic_heat_pump/main/DHW_Temp
attr HeishaMon_main subscribeReading_Defrost_Temp panasonic_heat_pump/main/Defrost_Temp
attr HeishaMon_main subscribeReading_Defrosting_State panasonic_heat_pump/main/Defrosting_State
attr HeishaMon_main subscribeReading_Discharge_Temp panasonic_heat_pump/main/Discharge_Temp
attr HeishaMon_main subscribeReading_Economizer_Outlet_Temp panasonic_heat_pump/main/Economizer_Outlet_Temp
attr HeishaMon_main subscribeReading_Error panasonic_heat_pump/main/Error
attr HeishaMon_main subscribeReading_Eva_Outlet_Temp panasonic_heat_pump/main/Eva_Outlet_Temp
attr HeishaMon_main subscribeReading_Expansion_Valve panasonic_heat_pump/main/Expansion_Valve
attr HeishaMon_main subscribeReading_External_Compressor_Control panasonic_heat_pump/main/External_Compressor_Control
attr HeishaMon_main subscribeReading_External_Control panasonic_heat_pump/main/External_Control
attr HeishaMon_main subscribeReading_External_Error_Signal panasonic_heat_pump/main/External_Error_Signal
attr HeishaMon_main subscribeReading_External_Heat_Cool_Control panasonic_heat_pump/main/External_Heat_Cool_Control
attr HeishaMon_main subscribeReading_External_Heater_State panasonic_heat_pump/main/External_Heater_State
attr HeishaMon_main subscribeReading_External_Pad_Heater panasonic_heat_pump/main/External_Pad_Heater
attr HeishaMon_main subscribeReading_Fan1_Motor_Speed panasonic_heat_pump/main/Fan1_Motor_Speed
attr HeishaMon_main subscribeReading_Fan2_Motor_Speed panasonic_heat_pump/main/Fan2_Motor_Speed
attr HeishaMon_main subscribeReading_Force_DHW_State panasonic_heat_pump/main/Force_DHW_State
attr HeishaMon_main subscribeReading_Force_Heater_State panasonic_heat_pump/main/Force_Heater_State
attr HeishaMon_main subscribeReading_Heat_Delta panasonic_heat_pump/main/Heat_Delta
attr HeishaMon_main subscribeReading_Heat_Power_Consumption panasonic_heat_pump/main/Heat_Power_Consumption
attr HeishaMon_main subscribeReading_Heat_Power_Production panasonic_heat_pump/main/Heat_Power_Production
attr HeishaMon_main subscribeReading_Heat_Pump_Model panasonic_heat_pump/main/Heat_Pump_Model
attr HeishaMon_main subscribeReading_Heat_To_Cool_Temp panasonic_heat_pump/main/Heat_To_Cool_Temp
attr HeishaMon_main subscribeReading_Heater_Delay_Time panasonic_heat_pump/main/Heater_Delay_Time
attr HeishaMon_main subscribeReading_Heater_On_Outdoor_Temp panasonic_heat_pump/main/Heater_On_Outdoor_Temp
attr HeishaMon_main subscribeReading_Heater_Start_Delta panasonic_heat_pump/main/Heater_Start_Delta
attr HeishaMon_main subscribeReading_Heater_Stop_Delta panasonic_heat_pump/main/Heater_Stop_Delta
attr HeishaMon_main subscribeReading_Heating_Control panasonic_heat_pump/main/Heating_Control
attr HeishaMon_main subscribeReading_Heating_Mode panasonic_heat_pump/main/Heating_Mode
attr HeishaMon_main subscribeReading_Heating_Off_Outdoor_Temp panasonic_heat_pump/main/Heating_Off_Outdoor_Temp
attr HeishaMon_main subscribeReading_Heatpump_State panasonic_heat_pump/main/Heatpump_State
attr HeishaMon_main subscribeReading_High_Pressure panasonic_heat_pump/main/High_Pressure
attr HeishaMon_main subscribeReading_Holiday_Mode_State panasonic_heat_pump/main/Holiday_Mode_State
attr HeishaMon_main subscribeReading_Inside_Pipe_Temp panasonic_heat_pump/main/Inside_Pipe_Temp
attr HeishaMon_main subscribeReading_Internal_Heater_State panasonic_heat_pump/main/Internal_Heater_State
attr HeishaMon_main subscribeReading_Ipm_Temp panasonic_heat_pump/main/Ipm_Temp
attr HeishaMon_main subscribeReading_Liquid_Type panasonic_heat_pump/main/Liquid_Type
attr HeishaMon_main subscribeReading_Low_Pressure panasonic_heat_pump/main/Low_Pressure
attr HeishaMon_main subscribeReading_Main_Hex_Outlet_Temp panasonic_heat_pump/main/Main_Hex_Outlet_Temp
attr HeishaMon_main subscribeReading_Main_Inlet_Temp panasonic_heat_pump/main/Main_Inlet_Temp
attr HeishaMon_main subscribeReading_Main_Outlet_Temp panasonic_heat_pump/main/Main_Outlet_Temp
attr HeishaMon_main subscribeReading_Main_Schedule_State panasonic_heat_pump/main/Main_Schedule_State
attr HeishaMon_main subscribeReading_Main_Target_Temp panasonic_heat_pump/main/Main_Target_Temp
attr HeishaMon_main subscribeReading_Max_Pump_Duty panasonic_heat_pump/main/Max_Pump_Duty
attr HeishaMon_main subscribeReading_Operating_Mode_State panasonic_heat_pump/main/Operating_Mode_State
attr HeishaMon_main subscribeReading_Operations_Counter panasonic_heat_pump/main/Operations_Counter
attr HeishaMon_main subscribeReading_Operations_Hours panasonic_heat_pump/main/Operations_Hours
attr HeishaMon_main subscribeReading_Optional_PCB panasonic_heat_pump/main/Optional_PCB
attr HeishaMon_main subscribeReading_Outside_Pipe_Temp panasonic_heat_pump/main/Outside_Pipe_Temp
attr HeishaMon_main subscribeReading_Outside_Temp panasonic_heat_pump/main/Outside_Temp
attr HeishaMon_main subscribeReading_Pool_Temp panasonic_heat_pump/main/Pool_Temp
attr HeishaMon_main subscribeReading_Powerful_Mode_Time panasonic_heat_pump/main/Powerful_Mode_Time
attr HeishaMon_main subscribeReading_Pump_Duty panasonic_heat_pump/main/Pump_Duty
attr HeishaMon_main subscribeReading_Pump_Flow panasonic_heat_pump/main/Pump_Flow
attr HeishaMon_main subscribeReading_Pump_Flowrate_Mode panasonic_heat_pump/main/Pump_Flowrate_Mode
attr HeishaMon_main subscribeReading_Pump_Speed panasonic_heat_pump/main/Pump_Speed
attr HeishaMon_main subscribeReading_Quiet_Mode_Level panasonic_heat_pump/main/Quiet_Mode_Level
attr HeishaMon_main subscribeReading_Quiet_Mode_Priority panasonic_heat_pump/main/Quiet_Mode_Priority
attr HeishaMon_main subscribeReading_Quiet_Mode_Schedule panasonic_heat_pump/main/Quiet_Mode_Schedule
attr HeishaMon_main subscribeReading_Room_Heater_Operations_Hours panasonic_heat_pump/main/Room_Heater_Operations_Hours
attr HeishaMon_main subscribeReading_Room_Heater_State panasonic_heat_pump/main/Room_Heater_State
attr HeishaMon_main subscribeReading_Room_Holiday_Shift_Temp panasonic_heat_pump/main/Room_Holiday_Shift_Temp
attr HeishaMon_main subscribeReading_Room_Thermostat_Temp panasonic_heat_pump/main/Room_Thermostat_Temp
attr HeishaMon_main subscribeReading_Second_Inlet_Temp panasonic_heat_pump/main/Second_Inlet_Temp
attr HeishaMon_main subscribeReading_Second_Room_Thermostat_Temp panasonic_heat_pump/main/Second_Room_Thermostat_Temp
attr HeishaMon_main subscribeReading_Smart_DHW panasonic_heat_pump/main/Smart_DHW
attr HeishaMon_main subscribeReading_Solar_Frost_Protection panasonic_heat_pump/main/Solar_Frost_Protection
attr HeishaMon_main subscribeReading_Solar_High_Limit panasonic_heat_pump/main/Solar_High_Limit
attr HeishaMon_main subscribeReading_Solar_Mode panasonic_heat_pump/main/Solar_Mode
attr HeishaMon_main subscribeReading_Solar_Off_Delta panasonic_heat_pump/main/Solar_Off_Delta
attr HeishaMon_main subscribeReading_Solar_On_Delta panasonic_heat_pump/main/Solar_On_Delta
attr HeishaMon_main subscribeReading_Solar_Temp panasonic_heat_pump/main/Solar_Temp
attr HeishaMon_main subscribeReading_Sterilization_Max_Time panasonic_heat_pump/main/Sterilization_Max_Time
attr HeishaMon_main subscribeReading_Sterilization_State panasonic_heat_pump/main/Sterilization_State
attr HeishaMon_main subscribeReading_Sterilization_Temp panasonic_heat_pump/main/Sterilization_Temp
attr HeishaMon_main subscribeReading_ThreeWay_Valve_State panasonic_heat_pump/main/ThreeWay_Valve_State
attr HeishaMon_main subscribeReading_ThreeWay_Valve_State2 panasonic_heat_pump/main/ThreeWay_Valve_State2
attr HeishaMon_main subscribeReading_TwoWay_Valve_State panasonic_heat_pump/main/TwoWay_Valve_State
attr HeishaMon_main subscribeReading_Water_Pressure panasonic_heat_pump/main/Water_Pressure
attr HeishaMon_main subscribeReading_Z1_Cool_Curve_Outside_High_Temp panasonic_heat_pump/main/Z1_Cool_Curve_Outside_High_Temp
attr HeishaMon_main subscribeReading_Z1_Cool_Curve_Outside_Low_Temp panasonic_heat_pump/main/Z1_Cool_Curve_Outside_Low_Temp
attr HeishaMon_main subscribeReading_Z1_Cool_Curve_Target_High_Temp panasonic_heat_pump/main/Z1_Cool_Curve_Target_High_Temp
attr HeishaMon_main subscribeReading_Z1_Cool_Curve_Target_Low_Temp panasonic_heat_pump/main/Z1_Cool_Curve_Target_Low_Temp
attr HeishaMon_main subscribeReading_Z1_Cool_Request_Temp panasonic_heat_pump/main/Z1_Cool_Request_Temp
attr HeishaMon_main subscribeReading_Z1_Heat_Curve_Outside_High_Temp panasonic_heat_pump/main/Z1_Heat_Curve_Outside_High_Temp
attr HeishaMon_main subscribeReading_Z1_Heat_Curve_Outside_Low_Temp panasonic_heat_pump/main/Z1_Heat_Curve_Outside_Low_Temp
attr HeishaMon_main subscribeReading_Z1_Heat_Curve_Target_High_Temp panasonic_heat_pump/main/Z1_Heat_Curve_Target_High_Temp
attr HeishaMon_main subscribeReading_Z1_Heat_Curve_Target_Low_Temp panasonic_heat_pump/main/Z1_Heat_Curve_Target_Low_Temp
attr HeishaMon_main subscribeReading_Z1_Heat_Request_Temp panasonic_heat_pump/main/Z1_Heat_Request_Temp
attr HeishaMon_main subscribeReading_Z1_Pump_State panasonic_heat_pump/main/Z1_Pump_State
attr HeishaMon_main subscribeReading_Z1_Sensor_Settings panasonic_heat_pump/main/Z1_Sensor_Settings
attr HeishaMon_main subscribeReading_Z1_Temp panasonic_heat_pump/main/Z1_Temp
attr HeishaMon_main subscribeReading_Z1_Valve_PID panasonic_heat_pump/main/Z1_Valve_PID
attr HeishaMon_main subscribeReading_Z1_Water_Target_Temp panasonic_heat_pump/main/Z1_Water_Target_Temp
attr HeishaMon_main subscribeReading_Z1_Water_Temp panasonic_heat_pump/main/Z1_Water_Temp
attr HeishaMon_main subscribeReading_Z2_Cool_Curve_Outside_High_Temp panasonic_heat_pump/main/Z2_Cool_Curve_Outside_High_Temp
attr HeishaMon_main subscribeReading_Z2_Cool_Curve_Outside_Low_Temp panasonic_heat_pump/main/Z2_Cool_Curve_Outside_Low_Temp
attr HeishaMon_main subscribeReading_Z2_Cool_Curve_Target_High_Temp panasonic_heat_pump/main/Z2_Cool_Curve_Target_High_Temp
attr HeishaMon_main subscribeReading_Z2_Cool_Curve_Target_Low_Temp panasonic_heat_pump/main/Z2_Cool_Curve_Target_Low_Temp
attr HeishaMon_main subscribeReading_Z2_Cool_Request_Temp panasonic_heat_pump/main/Z2_Cool_Request_Temp
attr HeishaMon_main subscribeReading_Z2_Heat_Curve_Outside_High_Temp panasonic_heat_pump/main/Z2_Heat_Curve_Outside_High_Temp
attr HeishaMon_main subscribeReading_Z2_Heat_Curve_Outside_Low_Temp panasonic_heat_pump/main/Z2_Heat_Curve_Outside_Low_Temp
attr HeishaMon_main subscribeReading_Z2_Heat_Curve_Target_High_Temp panasonic_heat_pump/main/Z2_Heat_Curve_Target_High_Temp
attr HeishaMon_main subscribeReading_Z2_Heat_Curve_Target_Low_Temp panasonic_heat_pump/main/Z2_Heat_Curve_Target_Low_Temp
attr HeishaMon_main subscribeReading_Z2_Heat_Request_Temp panasonic_heat_pump/main/Z2_Heat_Request_Temp
attr HeishaMon_main subscribeReading_Z2_Pump_State panasonic_heat_pump/main/Z2_Pump_State
attr HeishaMon_main subscribeReading_Z2_Sensor_Settings panasonic_heat_pump/main/Z2_Sensor_Settings
attr HeishaMon_main subscribeReading_Z2_Temp panasonic_heat_pump/main/Z2_Temp
attr HeishaMon_main subscribeReading_Z2_Valve_PID panasonic_heat_pump/main/Z2_Valve_PID
attr HeishaMon_main subscribeReading_Z2_Water_Target_Temp panasonic_heat_pump/main/Z2_Water_Target_Temp
attr HeishaMon_main subscribeReading_Z2_Water_Temp panasonic_heat_pump/main/Z2_Water_Temp
attr HeishaMon_main subscribeReading_Zones_State panasonic_heat_pump/main/Zones_State
attr HeishaMon_main userReadings Zeitstempel {substr(ReadingsTimestamp($name,'Main_Outlet_Temp',''),0,16)}, \
heat_power {if (ReadingsVal($name,'Main_Outlet_Temp',30)-ReadingsVal($name,'Main_Inlet_Temp',26) > 0) \
{round(60/1000*(ReadingsVal($name,'Pump_Flow',15.5)-0.13)*0.4768/(0.086836**(1+(1-(ReadingsVal($name,'mid_temp',28)+273.15)/637.287)**0.0891497))*18.016/3600\
*(276370-2090.1*(ReadingsVal($name,'mid_temp',28)+273.15)+8.125*(ReadingsVal($name,'mid_temp',28)+273.15)**2-0.014116\
*(ReadingsVal($name,'mid_temp',28)+273.15)**3+0.0000093701*(ReadingsVal($name,'mid_temp',28)+273.15)**4)/1000/18.016\
*(ReadingsVal($name,'Main_Outlet_Temp',30)-ReadingsVal($name,'Main_Inlet_Temp',26)),4)}\
else {0}}, \
mid_temp:Main_Outlet_Temp.* {(ReadingsNum($name,'Main_Outlet_Temp',30)+ReadingsNum($name,'Main_Inlet_Temp',26))/2}, \
diff_temp:Main_Outlet_Temp.* {if (ReadingsNum($name,'Pump_Flow','')-0.13 > 0) \
{ReadingsNum($name,'Main_Outlet_Temp','')-ReadingsNum($name,'Main_Inlet_Temp','')} \
else {0}}, \
heat_kWh:heat_power.* integral {ReadingsVal($name,'heat_power',5)/3600}, \
addCompressorFreq:Compressor_Freq.* {if (24 >= ReadingsNum($name,'Compressor_Freq',0) > 0 and ReadingsNum($name,'Defrosting_State','') == 0) \
{1} else {0}}, \
Pana_an:Compressor_Freq.* {if(ReadingsNum($name,'Compressor_Freq','') == 0) {0} else {1}}, \
Laufzeit:Operations_Hours.* {sec2human_hms(ReadingsNum($name,'Operations_Hours','')/ReadingsNum($name,'Operations_Counter','')*3600)}, \
Laufzeit_h:Operations_Hours.* {ReadingsNum($name,'Operations_Hours','')/ReadingsNum($name,'Operations_Counter','')*60}, \
Defrost_number:Defrosting_State.* {ReadingsNum($name,'Defrost_number','')+ReadingsNum($name,'Defrosting_State','')}

3. Device: wird nur für das Auslesen der elektrischen Energiemenge (S0-Zähler) und der Wärmemenge benötigt. Noch ein Hinweis: ich habe eine zusätzliche Umwälzpumpe (Marke: Evosta) im Haus in den Rücklauf eingebaut, die mehrere  Aufgaben hat. Die wichtigste dabei ist als Frostwächter die Umwälzung aufrecht zu halten, falls die Pana im tiefsten Winter auf Störung gehen sollte. Worst-case-Szenario: die Pana geht abends bei -10°C Außentemperatur um 22:00 auf Störung, ich kriege es nicht mit, und morgens um 8:00 ist der Wärmetauscher im Außengerät eingefroren. Es reicht dabei völlig aus, die Evosta-Pumpe 1 Minute pro Stunde laufen zu lassen, um die Pana vor Frost zu schützen.
defmod HeishaMon_s0 MQTT_DEVICE
attr HeishaMon_s0 IODev MyBroker
attr HeishaMon_s0 alias HeishaMon s0
attr HeishaMon_s0 autoSubscribeReadings panasonic_heat_pump/s0/+/+
attr HeishaMon_s0 comment Daten von den S0-Meter im Zählerschrank stimmen nicht mit den Daten in Heishamon überein.\
Deshalb gibt es im ElectricityCalculator-Device einen Offset.\
---\
15.10.2025 (ca.):\
Der Verbrauch der Evosta-Umwälzpumpe wird im Reading Watthour_Total bilanziert.\
Dadurch entfallen an verschiedenen Stellen etliche Berechnungen, die zum Ziel hatten, \
den Verbrauch der Evosta-Umwälzpumpe zu erfassen.\
Dazu war es nötig im HourCount-Modul zur Evosta-Pumpe, die Daten per set clear auf Null zu setzen. \
---\
20.10.2025:\
Bei COPday, COPlastday, COPmonth, COPlastmonth und COPyear wird geprüft, ob die zugrundelegenden Readings vom gleichen Tag (bzw. 1. Tag) stammen. \
Dadurch wird erreicht, dass kurz nach Mitternacht die richtigen Readings benutzt werden und nicht die vom Vortag.
attr HeishaMon_s0 event-min-interval COP:150,COPtoday:150,Watt1:300,Watt2:300,Watt:150,WatthourTotal1:600,WatthourTotal2:600,Watthour_Total:150
attr HeishaMon_s0 event-on-change-reading Heatpump_State,Temptoday,Templastday,Tempmonth,Templastmonth,COPtoday,COPlastday,COPmonth,COPlastmonth,COP:0.05,Watt1,Watt2,Watt:0.005,WatthourTotal1:10,WatthourTotal2:10,Watthour_Total:0.01
attr HeishaMon_s0 event-on-update-reading Watthour_Total
attr HeishaMon_s0 group Panasonic Aquarea
attr HeishaMon_s0 icon measure_power
attr HeishaMon_s0 room Heizung
attr HeishaMon_s0 sortby 3
attr HeishaMon_s0 stateFormat COP today: {(round(ReadingsNum("$name","COPtoday",0) + 0, 2))} • T: [$name:Temptoday]°C<br/>\
COP last day: {(round(ReadingsNum("$name","COPlastday",0) + 0, 2))} • T: [$name:Templastday]°C<br/>\
COP month: {(round(ReadingsNum("$name","COPmonth",0) + 0, 2))} • T: [$name:Tempmonth]°C<br/>\
COP last month: {(round(ReadingsNum("$name","COPlastmonth",0) + 0, 2))} • T: [$name:Templastmonth]°C<br/>\
COP year • last year: [$name:COPyear:r2] • [$name:COPlastyear:r2]
attr HeishaMon_s0 subscribeReading_Heatpump_State panasonic_heat_pump/main/Heatpump_State
attr HeishaMon_s0 subscribeReading_Watt1 panasonic_heat_pump/s0/Watt/1
attr HeishaMon_s0 subscribeReading_Watt2 panasonic_heat_pump/s0/Watt/2
attr HeishaMon_s0 subscribeReading_Watthour1 panasonic_heat_pump/s0/Watthour/1
attr HeishaMon_s0 subscribeReading_Watthour2 panasonic_heat_pump/s0/Watthour/2
attr HeishaMon_s0 subscribeReading_WatthourTotal1 panasonic_heat_pump/s0/WatthourTotal/1
attr HeishaMon_s0 subscribeReading_WatthourTotal2 panasonic_heat_pump/s0/WatthourTotal/2
attr HeishaMon_s0 userReadings Zeitstempel:Watt1.* {substr(ReadingsTimestamp($name,'Watt1',''),0,16)}, \
Watthour_Total {(ReadingsNum($name,'WatthourTotal1','')\
+ReadingsNum($name,'WatthourTotal2','')\
+ReadingsNum('HourCount.Evosta2','pulseTimeOverall','')/3600*30)/1000}, \
Watt:Watt1.* {round((ReadingsNum($name,'Watt1','')\
+ReadingsNum($name,'Watt2','')\
+ReadingsNum('Evosta2','POWER1_Num','')*30)/1000,3)}, \
readingsGroup_power:Watt1.* {round(ReadingsNum($name,'Watt1','')\
+ReadingsNum($name,'Watt2','')\
+ReadingsNum('Evosta2','POWER1_Num','')*30,0)}, \
readingsGroup_temp {ReadingsNum('myTemperature','mytemp','')}, \
COP:Watt1.* {if (ReadingsNum('HeishaMon_main','heat_power','') > 0) \
{round(ReadingsNum('HeishaMon_main','heat_power','')/ReadingsNum($name,'Watt',''),3)} \
else {0}},\
COPtoday:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay',''),8,2) == (localtime(time))[3] \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDay',''),8,2) == (localtime(time))[3] \
and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay','') > 0 )\
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDay','')\
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay',''),3)}\
else {0}},\
Temptoday:Watt1.* {((split ' ',ReadingsVal('TH.Kuhlmannweg8','statTemperatureDay',''))[3])},\
COPlastday:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast',''),8,2) == (localtime(time))[3] \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDayLast',''),8,2) == (localtime(time))[3] \
and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast','') > 0) \
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDayLast','')\
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast',''),3)}\
else {"n/a"}},\
Templastday:Watt1.* {((split ' ',ReadingsVal('TH.Kuhlmannweg8','statTemperatureDayLast',''))[3])},\
COPmonth:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth',''),8,2) == (localtime(time))[3] \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonth',''),8,2) == (localtime(time))[3] \
and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth','') > 0) \
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonth','') \
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth',''),3)}},\
Tempmonth:Watt1.* {((split ' ',ReadingsVal('TH.Kuhlmannweg8','statTemperatureMonth',''))[3])},\
COPlastmonth:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonthLast',''),8,2) == 1 \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonthLast',''),8,2) == 1) \
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonthLast','')\
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonthLast',''),3)}},\
Templastmonth:Watt1.* {((split ' ',ReadingsVal('TH.Kuhlmannweg8','statTemperatureMonthLast',''))[3])},\
COPyear:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear',''),8,2) == (localtime(time))[3] \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYear',''),8,2) == (localtime(time))[3] \
and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear','') > 0) \
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYear','') \
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear',''),3)}},\
COPlastyear:Watt1.* {if \
(substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYearLast',''),8,2) == 1 \
and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYearLast',''),8,2) == 1) \
{round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYearLast','')\
/ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYearLast',''),3)}}

Der nächste Step, nachdem einigermaßen Klarheit über die drei MQTT-Devices herrscht, wäre die Steuerung.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: sigma415 am 05 Juni 2026, 18:55:27
Genial, vielen Dank  :)  :)  :)
Nur noch ein paar Wochen auf meine Keisha warten, dann kann ich's ausprobieren.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 07 Juli 2026, 21:10:34
HAllo Gisbert,

ich würde auch gerne einsteigen und versuche Deine Module zu verstehen.



Ich möchte nicht nur abschreiben sondern auch aktiv mitarbeiten wenn notwendig bin aber gerade am Anfang.
Bist Du schon weiter in Deinem Design und Deiner Steuerung, Kann man davon auch profitieren oder
rätst Du davon aufgrund Deiner Erfahrung ab?

Anm:
1) Manche Funktionen fehlen ev (zBsp Beheizte_Flaeche_EG_OG)
2) Was befindet sich bei Dir unter 192.168.2.56

Danke für Deine ev. Hilfe.

Gruss Andreas
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 07 Juli 2026, 21:42:12
Hallo Andreas,

ich kann gerne helfen, komme wahrscheinlich aber erst am Donnerstag dazu.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 09 Juli 2026, 18:37:19
Super danke.
Keine Eile.

So Gott will bekomme ich meine WP Ende des Monats, aber bei den aktuellen Foerderreduktionen und Shutdown KFW bin icb mir nicht mehr sicher.
Danke
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 10 Juli 2026, 11:55:14
Zitat von: Hackstall am 09 Juli 2026, 18:37:19Super danke.
Keine Eile.

So Gott will bekomme ich meine WP Ende des Monats, aber bei den aktuellen Foerderreduktionen und Shutdown KFW bin icb mir nicht mehr sicher.
Danke

Hallo Andreas,

ich bin etwas verwirrt - installierst du die Panasonic jetzt oder doch nicht? Im letzteren Fall würde ich hier erstmal keine Zeit investieren und abwarten, bis es konkret wird.

Deine beiden Fragen kann ich dir aber schon vorab beantworten:
Unter der 192.168.2.56 ist Heishamon erreichbar.
Die Funktion Beheizte_Flaeche_EG_OG() hab ich selbst definiert. Da ich sowohl die Soll- als auch Ist-Temperaturen aller Räume kenne, kann ich ermitteln, welche Räume eine Beheizung erfordern und zusammen mit der jeweiligen Raumgröße ergibt sich eine (willkürliche) Zahl in der Größenordnung 0 bis 100, die dem "Heizbedarf" entspricht.
Mit dieser und weiteren Größen, die vom Heizerfolg (sprich Unterschied von Soll- zu Ist-Temperaturen) abhängen, schalte ich die Panasonic aktiv per Fhem über ein DOIF ein. Wenn kein Schaltbefehl kommt, dann ist die Panasonic aus. Das Ausschalten übernimmt die Panasonic zunächst selbst, d.h. wenn sie keine Wärme mehr los wird, dann geht der Kompressor aus; darauf basierend wird über das gleiche DOIF der Heatpump_State auf 0 gesetzt, d.h. sie ist dann komplett aus.

Details kommen erst dann, wenn klar ist, dass du damit was anfangen kannst, sprich die Panasonic tatsächlich verbaut wird.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 10 Juli 2026, 20:27:07
Hallo Gisbert,
die Pumpe ist schon im Lager und wird definitiv eingebaut.
Es ist eine Panasonic 9kw L-Serie.

Heishamon Modul habe ich schon hier zuhause.

Möchte mich schonmal schlau machen, daher die Fragen.

Danke

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 10 Juli 2026, 20:31:55
Hallo Gisbert,

Vielleicht noch: derzeit ist der Einbau Ende des Monats geplant. Könnte sich aber mit den aktuellen Verwirrungen bei KFW etwas verzögern.

Was ich noch sagen wollte. Ich habe ähnliche Vorraussetzungen wie Du. Ich habe Tado Raumthermosrate und steuere diese auch per FHEM. Will sagen ich kenne auch Soll und Ist von jedem Raum.
Gruß Andreas

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 11 Juli 2026, 15:47:34
Hallo Gisbert,

Ich sehe so auf Anhieb:

-die Funktion Beheizte_Flaeche_EG_OG() und
-das Device; TH.Kuhlmannweg8

Beides müsste ich sicherlich umschreiben.
Gibt es noch mehr oder Änderungen Deiner Implementierung.

Danke
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 13 Juli 2026, 21:40:49
Hallo Andreas,

[TH.Kuhlmannweg:temperature] ist das Reading der Außentemperatur und steht im Attribut stateFormat. Das kannst du auf deinen Fall anpassen.

Funktion Beheizte_Flaeche_EG_OG():
sie setht in 99_myUtils.pm
sub Beheizte_Flaeche_EG_OG() {
my $maxFlaeche=0;
foreach my $device (qw(
Temp.EG
Temp.OG)) {
foreach my $reading (qw(
E_Zimmer1
E_Zimmer2
... usw...)) {
my $flaeche = ReadingsVal($device,$reading,0);
if($flaeche < 0) {
$maxFlaeche=$maxFlaeche - $flaeche;
}
}
}
return $maxFlaeche;
}

Im Device Temp.EG und Temp.OG sind die userReadings E_Zimmer1 usw. als Differenz ist/soll definiert und gewichtet mit der Fläche:
E_Zimmer1 {round((ReadingsVal($name,'Zimmer1','') - ReadingsVal($name,'sollZimmer1',''))*Quadratmeter,2)Insgesamt ergibt sich damit eine flächengewichtete Summe der Differenzen der ist/soll-Temperaturen, die als Kriterium für ein Anschalten der Panasonic dienen kann. In meinem Fall ist 25 eine gute Zahl, d.h. oberhalb von 25 gibt es ein Einschaltsignal; andere Kriterien müssen aber auch noch erfüllt sein..

Die Steuerung in einem DOIF Panasonic_Jeisha:
myTemperature:mytemp = Außentemperatur
HeishaMon_IP:Beheizte_Flaeche_av = Beheizte Fläche, noch eine Mittelung drüber gelegt (s. oben sowie das Device HeishaMon_IP)
Ueberwachung:Sum_Ueberwachung --> s. unten, ein weiteres Kriterium fürs Einschalten
Temp.EG:UeberwachungEG --> s. unten, ein weiteres Kriterium fürs Einschalten
DWD.Wetter.Leverkusen:fc0_14_TTT = Wettervorhersage für den aktuellen Tag um 14:00

Wichtig war mir, dass die Panasonic nicht gleich wieder den Kompressor startet, wenn sie vorher ausgegangen ist. Das verhindert zuverlässig ein Takten. Die Zwangspause ist temperaturabhängig und mindestens 2 Stunden (7200 Sekunden) - das müsste auf deine Bedingung angepasst werden, damit außen in der Zeit nichts einfriert !!! Ich hab eine zusätzliche Umwälzpumpe im Rücklauf sitzen, die den Umlauf für diese Zeit aufrecht erhält - damit ist bei mir ein Einfrieren so gut wie unmöglich.

## Zweig 1: verschiebt die Heizkurve - kann wahrscheinlich weg
## Zweig 2: Sonderfall, die einer kurzfristigen Temperaturabsenkung beim Lüften im Wohnzimmer entgegenwirkt
## Zweig 3: die eigentliche Einschaltbedingung
## Zweig 4: Auschalten der Panasonic, wenn sie die Wärme nicht mehr los wird
Die restlichen Zweige waren nötig, um Dinge richtig ablaufen zu lassen. Der letzte Zweig ist für dich irrelevant.

defmod Panasonic_Jeisha DOIF ([+[1]:55] and -5 <= [?HeishaMon_IP:Z1HeatRequestTemp] <= 0 \
## Es wird nur noch eine Absenkung der Heizkurve zugelassen (<=0), \
## da eine Anhebung auch bei niedrigen Außentemperaturen keine Auswirkung auf die tatsächliche Vorlauftemperatur hat.\
and [?HeishaMon_IP:check_Z1HeatRequestTemp] != [?HeishaMon_IP:Z1HeatRequestTemp] \
and [?HeishaMon_main:Heatpump_State] == 1 and [?HeishaMon_IP:Taktsperre] == 0 \
and [?HeishaMon_main:Operating_Mode_State] != 1) \
(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]) \
(setreading HeishaMon_IP check_Z1HeatRequestTemp [HeishaMon_IP:Z1HeatRequestTemp]) \
DOELSEIF ([?{sunrise_abs(-3600,"06:00:00","08:00:00")}-{sunrise_abs(14400,"09:00:00","10:30:00")}] \
and [?myTemperature:mytemp] <= 14 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 30 \
and ([?Ueberwachung:Sum_Ueberwachung] < 12 or [?Temp.EG:UeberwachungEG] < 5) and [?DWD.Wetter.Leverkusen:fc0_14_TTT] <= 18 \
and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0 and [Heizbetrieb:_state] == 1 \
and [?HeishaMon_main:Operating_Mode_State] != 1) \
(set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1) \
DOELSEIF (([?00:00-{sunrise_abs(-3600,"06:00:00","08:00:00")}] or [?{sunrise_abs(14400,"09:00:00","10:30:00")}-23:59]) \
and [?myTemperature:mytemp] <= 14 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 25 \
and ([?Ueberwachung:Sum_Ueberwachung] < 12 or [?Temp.EG:UeberwachungEG] < 5) and [?DWD.Wetter.Leverkusen:fc0_14_TTT] <= 18 \
and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0 and [Heizbetrieb:_state] == 1 \
and [?HeishaMon_main:Operating_Mode_State] != 1) \
(set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1) \
DOELSEIF ([HeishaMon_main:Compressor_Freq] == 0 and [?HeishaMon_main:Defrosting_State] == 0 \
and [?HeishaMon_main:Heatpump_State] == 1 and [?HeishaMon_main:Operating_Mode_State] != 1) \
(setreading HeishaMon_IP Taktsperre 1) \
(IF ([HeishaMon_main:Compressor_Freq] == 0) \
(set HeishaMon_main:FILTER=Heatpump_State!=0 SetHeatpump 0)) \
(setreading HeishaMon_IP Taktsperre 0) \
DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 \
and [?HeishaMon_IP:Taktsperre] == 1 and [?HeishaMon_IP:Taktsperre:sec] > [?$SELF:wait_Wert] \
and [?HeishaMon_main:Operating_Mode_State] != 1) \
(setreading HeishaMon_IP Taktsperre 0) \
DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 \
and [?$SELF:cmd] =~ ("2.2|3.2") and [?$SELF:cmd:sec] > 2700 and [?HeishaMon_main:Operating_Mode_State] != 1) \
DOELSEIF ([myTemperature:mytemp:avg30] >= 4 and [?FBH_WZ:state] eq "off" and [?23:30-06:00] \
and [?HeishaMon_main:Operating_Mode_State] != 1) \
(set FBH_WZ on) \
(set DaikinCloud_DaikinAP09627:FILTER=onOffMode!="off" _off)
attr Panasonic_Jeisha alias Panasonic Jeisha
attr Panasonic_Jeisha devStateIcon (cmd_1.*|cmd_8.*|cmd_9.*|cmd_10.*|cmd_11.*):sani_heating_heatpump@orange (cmd_2.*|cmd_3.*):sani_heating_heatpump@red (cmd_4.*|cmd_5.*|cmd_6.*):sani_heating_heatpump@grey cmd_7.*:sani_floor_heating_neutral@grey
attr Panasonic_Jeisha do always
attr Panasonic_Jeisha icon sani_heating_heatpump
attr Panasonic_Jeisha repeatsame 0:1:1:2:1:1:1
attr Panasonic_Jeisha room Heizung
attr Panasonic_Jeisha userReadings wait_Wert:cmd.4.1 {if (ReadingsNum('myTemperature','mytemp',20) >= 12) {12600} \
elsif (9 <= ReadingsNum('myTemperature','mytemp',20) < 12) {10800} \
elsif (6 <= ReadingsNum('myTemperature','mytemp',20) < 9) {9000} \
elsif (ReadingsNum('myTemperature','mytemp',20) < 6) {7200}},\
wait_Zeit:cmd.4.1 {strftime("%a %R", localtime(time + ReadingsNum('Panasonic_Jeisha','wait_Wert',0) + 180))}, \
EndePumpe:cmd.4.1 {strftime("%a %R", localtime(time + 7200 + 180))}
attr Panasonic_Jeisha wait 5,5:0:0:0,180,[Panasonic_Jeisha:wait_Wert]:0:0:0,5

Ueberwachung:Sum_Ueberwachung
Es ist ein userReadings in einem beliebigen Device (ich hab ein weiteres DOIF Ueberwachung dazu angelegt, um mir Pushmeldungen zuzusenden, falls etwas aus dem Ruder läuft):
userReadings Sum_Ueberwachung {round(ReadingsVal('Temp.EG','UeberwachungEG','') + ReadingsVal('Temp.OG','UeberwachungOG',''),2)}
Temp.EG:UeberwachungEG --> ein userReadings im Device Temp.EG (entsprechend auf OG):
UeberwachungEG {round(
ReadingsVal($name,'Zimmer1','') - ReadingsVal($name,'sollZimmer1','') + usw....

Ich bin mir völlig im klaren, dass das maximal verwirrend für jeden anderen außer mir ist. Um es verständlich zu machen, müsste ich deutlich mehr Zeit investieren als nur copy&paste meiner Definitionen.

Die Taktsperre will wohl überdacht werden, um ein Einfrieren nach Abschalten der Wärmepumpe zu verhindern. Das Einfrieren bei niedrigen Temperaturen ist eher von theoretischer Natur, da dann die Panasonic sich nicht von selbst abschaltet, weil sie die Wärme nicht los wird - sie schaltet sich nicht ab und wird die Wärme los. Die Wärme wird sie nicht los bei moderaten Übergangstemperaturen, dann macht die Taktsperre Sinn und ein Einfrieren ist per se nicht möglich.

Ich hoffe, dass die Steuerung vom Prinzip her verstanden werden kann. Gerne Fragen, wenn etwas nach dem 3. Lesen und Nachbauen nicht verständlich ist.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 14 Juli 2026, 19:09:18
Hallo Gisbert,

Ich versuche Step by Step zu verstehen.

Step1. Gewuchtete Fläche;
Wenn ich mal 1 grad Differenz annehme und mal 15m2 zimmergroesse annehme, dann bin ich ja schon bei 2 Zimmern beim einschalten.
Ist der 25er Wert dann nicht etwas zu gering?

Wie würde das funktionieren wenn ich elektrische Thermostate Tado einsetze?
Funktioniert das dann bei mir überhaupt?

Danke
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 14 Juli 2026, 19:38:25
Hallo Andreas,

die gewichtete Fläche funktioniert bei meiner ziemlich trägen Fußbodenheizung sehr gut. Da reicht tatsächlich ein Zahlenwerte von 25 aus, um als Einschaltkriterium zu dienen. Den Zahlenwert muss man für sich selbst herausfinden.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 15 Juli 2026, 10:21:46
Zitat von: Gisbert am 14 Juli 2026, 19:38:25... die gewichtete Fläche funktioniert bei meiner ziemlich trägen Fußbodenheizung sehr gut.

Noch eine Ergänzung zum richtigen Betrieb von Wärmepumpenheizungen, soweit ich das verstanden hab.

Es hat ein hydraulischer Abgleich stattgefunden, d.h. die Einstellungen sind so gewählt worden, dass jeder Raum exakt die Wärme zugeführt bekommt, die zum Erhalt der Wunschtemperatur führt. Es finden keine Nachtabsenkungen oder andere Abschaltungen statt. Eine Wärmepumpe ist nicht darauf ausgelegt, einen kalten Raum schnell aufzuheizen, wie das eine Gas- oder Ölheizung bei einer Vorlauftemperatur jenseits von gut und böse könnte.

Wenn der hydraulische Abgleich stattgefunden hat und eine Auf- und Abdrehen der Heizkörper- oder FBH-Regler nicht stattfindet, am besten unmöglich ist, dann hat man sehr konstante Temperaturen im Haus. Natürlich muss die außentemperaturbasierte Heizkurve der Panasonic zum Haus passen (Außentemperaturfühler in der Panasonic). Im ersten Anlauf hat die Heizkurve bei mir nicht gepasst. Das muss man in kleinen Schritten anpassen, so dass man bei allen Außentemperaturen die richtige Wärmemenge trifft.
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 25 Juli 2026, 10:32:29
Hi habe alles soweit nachkodiert hätte noch eine Frage:
In den DOIF Bedingungen hast Du UeberwachungSUM und UeberwachungEG aber nicht UeberwachungOG berücksichtigt.
Hat das einen Grund?
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 25 Juli 2026, 22:08:28
Hallo Andreas,

das hat hausspezifische bzw. Nutzungsgründe, da das OG z.T. wenig bis ganz wenig beheizt wird bzw. Schlafräume weniger beheizt werden. Dadurch wird das Heizergebnis im OG eigentlich immer erreicht.
Da wir im Wohnzimmer und Küche nicht frieren wollen, ist da etwas mehr Heizung erforderlich.
Damit ergibt sich als Heizkriterium einerseits das Gesamthaus, und als Zusatzbedingung das Erdgeschoss.

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 26 Juli 2026, 20:06:47
Danke,

ich hätte "hoffentlich"  :)  abschliessend ev noch eine etwas fhemlastige Frage zu deine(n) userReadings Defintionen (siehe unten Code Extract)

Ich habe UserREadings immer verstanden als Variable die mit anderern Readings im device verknüpft udn dann aktualisiert werden.
Nun hast du aber zBsp:
  COPyear:Watt1.*
im Userreading definiert welches ich leider nicht verstehe. (bin nicht der FHEM Experte)

Andere UserReadings sind ähnlich.

a) Heisst das bei Dir gibt es das Device COPYyear mit dem Reading Watt1
b) was bedeutet dann aber der regex Ausdruck .* am Ende des UserReadings

Danke

attr HeishaMon_s0 userReadings Zeitstempel:Watt1.* {substr(ReadingsTimestamp($name,'Watt1',''),0,16)}, \
      Watthour_Total {(ReadingsNum($name,'WatthourTotal1','')\
          + ReadingsNum($name,'WatthourTotal2','')\
          + ReadingsNum('HourCount.Evosta2','pulseTimeOverall','')/3600*30)/1000}, \
      Watt:Watt1.* {round((ReadingsNum($name,'Watt1','')\
          + ReadingsNum($name,'Watt2','')\
          + ReadingsNum('Evosta2','POWER1_Num','')*30)/1000,3)}, \
      readingsGroup_power:Watt1.* {round(ReadingsNum($name,'Watt1','')\
          + ReadingsNum($name,'Watt2','')\
          + ReadingsNum('Evosta2','POWER1_Num','')*30,0)}, \
          readingsGroup_temp {ReadingsNum('Rosenstr.35_Cdm','Temperature','')}, \
      COP:Watt1.* {if (ReadingsNum('HeishaMon_main','heat_power','') > 0) \
                      {round(ReadingsNum('HeishaMon_main','heat_power','')/ReadingsNum($name,'Watt',''),3)} \
                   else {0}},\
      COPtoday:Watt1.* {if \
                          (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay',''),8,2) == (localtime(time))[3] \
                          and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDay',''),8,2) == (localtime(time))[3] \
                          and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay','') > 0 )\
                          {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDay','')\
                          /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDay',''),3)}\
                       else {0}},\
      Temptoday:Watt1.* {((split ' ',ReadingsVal('Rosenstr.35_Cdm','statTemperatureDay',''))[3])},\
      COPlastday:Watt1.* {if \
                   (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast',''),8,2) == (localtime(time))[3] \
                        and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDayLast',''),8,2) == (localtime(time))[3] \
                        and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast','') > 0) \
                        {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyDayLast','')\
                         /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyDayLast',''),3)}\
                   else {"n/a"}},\
      Templastday:Watt1.* {((split ' ',ReadingsVal('Rosenstr.35_Cdm','statTemperatureDayLast',''))[3])},\
      COPmonth:Watt1.* {if \
                   (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth',''),8,2) == (localtime(time))[3] \
                   and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonth',''),8,2) == (localtime(time))[3] \
                   and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth','') > 0) \
                   {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonth','') \
                   /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonth',''),3)}},\
      Tempmonth:Watt1.* {((split ' ',ReadingsVal('Rosenstr.35_Cdm','statTemperatureMonth',''))[3])},\
      COPlastmonth:Watt1.* {if \
                   (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonthLast',''),8,2) == 1 \
                    and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonthLast',''),8,2) == 1) \
                    {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyMonthLast','')\
                     /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyMonthLast',''),3)}},\
      Templastmonth:Watt1.* {((split ' ',ReadingsVal('Rosenstr.35_Cdm','statTemperatureMonthLast',''))[3])},\
      COPyear:Watt1.* {if \
                    (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear',''),8,2) == (localtime(time))[3] \
                    and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYear',''),8,2) == (localtime(time))[3] \
                    and ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear','') > 0) \
                    {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYear','') \
                    /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYear',''),3)}},\
      COPlastyear:Watt1.* {if \
                    (substr(ReadingsTimestamp('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYearLast',''),8,2) == 1 \
                    and substr(ReadingsTimestamp('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYearLast',''),8,2) == 1) \
                    {round(ReadingsNum('myHeishaheat','HeishaMon_main_heat_kWh_EnergyYearLast','')\
                    /ReadingsNum('myHeishaelectricity','HeishaMon_s0_Watthour_Total_EnergyYearLast',''),3)}}

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 26 Juli 2026, 20:38:44
Hallo Andreas,

ich bin mir nicht sicher, ob ich dir die beiden Statistik-Devices für den elektrischen Strom und die (in meinem Fall) berechnete Wärmemenge schon mitgeteilt hab. Für die Steuerung der Panasonic sind sie natürlich nicht notwendig, aber will ja wissen, wie gut die Panasonic sich bzgl. COP schlägt.

Grundsätzlich kann man userReadings mit allem befüllen, was einem so in den Sinn kommt, solange man sich an Pearl- und Fhem-Regeln hält.

Das 1. Device ist für die Bilanzierung der Wärme und das 2. für den elektrischen Strom zuständig. Bitte nicht durch den Device TYPE beim 1. Device verwirren lassen - auch da hab ich den ElectricityCalculator benutzt.

defmod myHeishaheat ElectricityCalculator HeishaMon_main:heat_kWh.*
attr myHeishaheat BasicPricePerAnnum 0
attr myHeishaheat Currency €
attr myHeishaheat DecimalPlace 3
attr myHeishaheat ElectricityCounterOffset 3.80000000000291
attr myHeishaheat ElectricityKwhPerCounts 1
attr myHeishaheat ElectricityPricePerKWh 0.2567
attr myHeishaheat MonthOfAnnualReading 5
attr myHeishaheat MonthlyPayment 0
attr myHeishaheat ReadingDestination CalculatorDevice
attr myHeishaheat SiPrefixPower kW
attr myHeishaheat alias Heisha Φ
attr myHeishaheat event-min-interval HeishaMon_main_heat_kWh_EnergyDay:60\
,HeishaMon_main_heat_kWh_EnergyMonth:60\
,HeishaMon_main_heat_kWh_EnergyYear:60\
,HeishaMon_main_heat_kWh_EnergyDayLast:43200\
,HeishaMon_main_heat_kWh_EnergyMonthLast:43200\
,HeishaMon_main_heat_kWh_EnergyYearLast:43200
attr myHeishaheat event-on-change-reading HeishaMon_main_heat_kWh_EnergyDay:0.1,\
,HeishaMon_main_heat_kWh_EnergyMonth:0.1,\
,HeishaMon_main_heat_kWh_EnergyYear:0.1,\
,HeishaMon_main_heat_kWh_EnergyDayLast:0.1,\
,HeishaMon_main_heat_kWh_EnergyMonthLast:0.1,\
,HeishaMon_main_heat_kWh_EnergyYearLast:0.1
attr myHeishaheat group Panasonic Aquarea
attr myHeishaheat icon sani_therme_on1
attr myHeishaheat room Heizung
attr myHeishaheat sortby 5
attr myHeishaheat stateFormat today • last: {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyDay",0)+0,1))} • {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyDayLast",0)+0,1))} kWh<br/>\
month • last: {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyMonth",0)+0,0))} • {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyMonthLast",0)+0,0))} kWh<br/>\
year • last: {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyYear",0)+0,0))} • {(round(ReadingsNum("$name","HeishaMon_main_heat_kWh_EnergyYearLast",0)+0,0))} kWh

defmod myHeishaelectricity ElectricityCalculator HeishaMon_s0:Watthour_Total.*
attr myHeishaelectricity BasicPricePerAnnum 0
attr myHeishaelectricity Currency €
attr myHeishaelectricity DecimalPlace 3
attr myHeishaelectricity ElectricityCounterOffset 743.86
attr myHeishaelectricity ElectricityKwhPerCounts 1
attr myHeishaelectricity ElectricityPricePerKWh 0.2567
attr myHeishaelectricity MonthOfAnnualReading 5
attr myHeishaelectricity MonthlyPayment 0
attr myHeishaelectricity ReadingDestination CalculatorDevice
attr myHeishaelectricity SiPrefixPower kW
attr myHeishaelectricity alias Heisha P
attr myHeishaelectricity event-min-interval HeishaMon_s0_Watthour_Total_EnergyDay:150,HeishaMon_s0_Watthour_Total_EnergyMonth:150\
,HeishaMon_s0_Watthour_Total_EnergyYear:150,HeishaMon_s0_Watthour_Total_EnergyDayLast:43200\
,HeishaMon_s0_Watthour_Total_EnergyMonthLast:43200,HeishaMon_s0_Watthour_Total_EnergyYearLast:43200
attr myHeishaelectricity event-on-change-reading HeishaMon_s0_Watthour_Total_EnergyDay:0.025,\
,HeishaMon_s0_Watthour_Total_EnergyMonth:0.025,HeishaMon_s0_Watthour_Total_EnergyYear:0.025,\
,HeishaMon_s0_Watthour_Total_EnergyDayLast:0.025,HeishaMon_s0_Watthour_Total_EnergyMonthLast:0.025,\
,HeishaMon_s0_Watthour_Total_EnergyYearLast:0.025
attr myHeishaelectricity group Panasonic Aquarea
attr myHeishaelectricity icon measure_power
attr myHeishaelectricity oldreadings HeishaMon_s0_Watthour_Total_EnergyYear,oldreadingsAlways
attr myHeishaelectricity room Heizung
attr myHeishaelectricity sortby 6
attr myHeishaelectricity stateFormat today • last: [$name:HeishaMon_s0_Watthour_Total_EnergyDay:r1] • [$name:HeishaMon_s0_Watthour_Total_EnergyDayLast:r1] kWh<br/>\
month • last: [$name:HeishaMon_s0_Watthour_Total_EnergyMonth:r0] • [$name:HeishaMon_s0_Watthour_Total_EnergyMonthLast:r0] kWh<br/>\
year • last: [$name:HeishaMon_s0_Watthour_Total_EnergyYear:r0] • [$name:HeishaMon_s0_Watthour_Total_EnergyYearLast:r0] kWh

Viele Grüße Gisbert
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 01 August 2026, 21:22:20
Danke für den Hinweis, ich werde mich in den nächsten Tagen darum kümmern.

aber wie auch imnmer

Sie ist drin und funktioniert auch.
Heishamon angeschlossen und geht auch.

Jetzt habe ich noch 2 probleme:

1) was macht sec2human_ms
Laufzeit:Operations_Hours.* \
      { \
    sec2human_hms(ReadingsNum($name,'Operations_Hours','')/ReadingsNum($name,'Operations_Counter','')*3600) \
  }, \

2) ich bekommen folgenden Ausdruck nicht aufgelöst HeishaMon_s0:Watt:r3:
Φ • P: 4.01 • [HeishaMon_s0:Watt:r3] kW

Danke für Deine Hilfe
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 01 August 2026, 22:06:39
ad1)
sec2human_hms ist eine eigene Funktion, die die Laufzeit der Wärmepumpe pro Start in eine leserfreundliche Form bringt.
# Umrechnung von Sekunden
sub sec2human_hms($){
  my ($diff) = @_;
  my ($h,$m,$s,$ret);
  ($h,$diff) = _s2h_Div($diff,3600);
  ($m,$diff) = _s2h_Div($diff,60);
  ($s,$diff) = _s2h_Div($diff,1);
  $ret  = "$h"."<span style='vertical-align: +4px;; font-size: 75%;;'>h</span><font size=2> </font>"."$m"."<span style='vertical-align: +4px;; font-size: 75%;;'>m</span><font size=2> </font>"."$s"."<span style='vertical-align: +4px;; font-size: 75%;;'>s</span>";
  return $ret;
}

sub _s2h_Div($$) {
  my ($p1,$p2) = @_;
  return (int($p1/$p2), $p1 % $p2);
}
Das sieht dann so wie im angefügtem Screenshot aus. Ich find's schön mit den hochgestellten Ziffern, ist aber nur Optik.

ad 2)
Das ist in dem userReadings definiert. Den letzten Part musst du weglassen. Das ist meine zusätzlich Umwälzpumpe, die ich im Rücklauf verbaut habe.
Watt:Watt1.* {round((ReadingsNum($name,'Watt1','')
+ReadingsNum($name,'Watt2','')
+ReadingsNum('Evosta2','POWER1_Num','')*30)/1000,3)}

Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Hackstall am 07 August 2026, 15:50:14
Hi Gisbert,

ich habe jetzt alle Messsonden drin (Wattmessung/Wärmemengenmesser etc.)
Ich hätte da doch noch eine Frage:

attr HeishaMon_s0 subscribeReading_Watt1 panasonic_heat_pump/s0/Watt/1
attr HeishaMon_s0 subscribeReading_Watt2 panasonic_heat_pump/s0/Watt/2
attr HeishaMon_s0 subscribeReading_Watthour1 panasonic_heat_pump/s0/Watthour/1
attr HeishaMon_s0 subscribeReading_Watthour2 panasonic_heat_pump/s0/Watthour/2
attr HeishaMon_s0 subscribeReading_WatthourTotal1 panasonic_heat_pump/s0/WatthourTotal/1
attr HeishaMon_s0 subscribeReading_WatthourTotal2 panasonic_heat_pump/s0/WatthourTotal/2

Was misst du mit Watt1 und was mit Watt2?
Danke
Titel: Aw: Panasonic Wärmepumpe - Heishamon per mqtt auslesen
Beitrag von: Gisbert am 07 August 2026, 16:17:24
Hallo Andreas,

das ist einmal der elektrische Anschluss für die Wärmepumpe (Kompressor, Umwälzpumpe, Steuerung) und der zweite Anschluss ist für den elektrischen Heizstab. Die Daten kommen von 2 S0-Zählern, die am Heishamon hängen und entsprechend in Fhem ausgewertet werden.

Viele Grüße Gisbert