Panasonic Wärmepumpe - Heishamon per mqtt auslesen

Begonnen von rasti, 22 November 2025, 11:40:10

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Andreas,

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

Viele Grüße Gisbert
Proxmox | UniFiRHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF

Hackstall

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

Gisbert

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
Proxmox | UniFiRHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF

Hackstall

#18
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


Hackstall

#19
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


Hackstall

#20
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

Gisbert

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
Proxmox | UniFiRHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF