Hargassner heating integration

Hi Michael, would you be so kind and maybe share your message format string? I got the same software version and still can’t get it to run properly.

I have no access to my system at the moment. I can post it in 10 days.

1 Like

That would be great. Thanks in advance!

@MauzenLi
Here is my message format:

  msgformat: "<DAQPRJ><ANALOG><CHANNEL id='0' name='ZK' dop='0'/><CHANNEL id='1' name='O2' unit='%'/><CHANNEL id='2' name='O2soll' unit='%'/><CHANNEL id='3' name='TK' unit='°C'/><CHANNEL id='4' name='TKsoll' unit='°C'/><CHANNEL id='5' name='TRL' unit='°C'/><CHANNEL id='6' name='TRLsoll' unit='°C' dop='0'/><CHANNEL id='7' name='Spreizung' unit='°C'/><CHANNEL id='8' name='TRG' unit='°C'/><CHANNEL id='9' name='SZist' unit='%' dop='0'/><CHANNEL id='10' name='SZsoll' unit='%'/><CHANNEL id='11' name='TPo' unit='°C'/><CHANNEL id='12' name='TPm' unit='°C'/><CHANNEL id='13' name='TPu' unit='°C'/><CHANNEL id='14' name='Puff Füllgrad' unit='%' dop='0'/><CHANNEL id='15' name='Puffer_soll oben' unit='°C' dop='0'/><CHANNEL id='16' name='Puffer_soll unten' unit='°C' dop='0'/><CHANNEL id='17' name='PuffZustand' dop='0'/><CHANNEL id='18' name='Max Anf Kessel' dop='0'/><CHANNEL id='19' name='TFW' unit='°C' dop='0'/><CHANNEL id='20' name='Leistung' unit='%' dop='0'/><CHANNEL id='21' name='ESsoll' unit='%'/><CHANNEL id='22' name='min.Leist.TRG' unit='%'/><CHANNEL id='23' name='max.Leist.TRG' unit='%'/><CHANNEL id='24' name='max.Leist.Fuell' unit='%'/><CHANNEL id='25' name='max.Leist.TPO' unit='%'/><CHANNEL id='26' name='ESRegler' unit='%' dop='0'/><CHANNEL id='27' name='Regler K'/><CHANNEL id='28' name='KeBrstScale' unit='%' dop='0'/><CHANNEL id='29' name='Programm' dop='0'/><CHANNEL id='30' name='Störungs Nr' dop='0'/><CHANNEL id='31' name='Max Anf ZenPuf' unit='°C' dop='0'/><CHANNEL id='32' name='I Es' unit='mA' dop='0'/><CHANNEL id='33' name='I Ra' unit='mA' dop='0'/><CHANNEL id='34' name='I Aa' unit='mA' dop='0'/><CHANNEL id='35' name='I Sr' unit='mA' dop='0'/><CHANNEL id='36' name='I Rein' unit='mA' dop='0'/><CHANNEL id='37' name='LZ ES seit Füll.' unit='Min' dop='0'/><CHANNEL id='38' name='LZ ES seit Ent.' unit='Min' dop='0'/><CHANNEL id='39' name='Anzahl Entasch.' dop='0'/><CHANNEL id='40' name='Anzahl SR Beweg.' dop='0'/><CHANNEL id='41' name='Lagerstand' unit='kg' dop='0'/><CHANNEL id='42' name='Verbrauchszähler' unit='kg' dop='0'/><CHANNEL id='43' name='Heiz P Lambda' unit='W' dop='2'/><CHANNEL id='44' name='Heiz U Lambda' unit='V' dop='2'/><CHANNEL id='45' name='Heiz I Lambda' unit='mA' dop='0'/><CHANNEL id='46' name='U_Lambda' unit='mV'/><CHANNEL id='47' name='U Netzteil' unit='mV' dop='0'/><CHANNEL id='48' name='T Spülung' unit='°C'/><CHANNEL id='49' name='BRT' unit='°C'/><CHANNEL id='50' name='Tplat' unit='°C' dop='0'/><CHANNEL id='51' name='TVG' unit='°C'/><CHANNEL id='52' name='TVG2' unit='°C'/><CHANNEL id='53' name='AIN17' unit='V'/><CHANNEL id='54' name='Taus' unit='°C'/><CHANNEL id='55' name='TA Gem.' unit='°C'/><CHANNEL id='56' name='Effizienz' unit='%'/><CHANNEL id='57' name='ExtHK Solltmp.' unit='°C' dop='0'/><CHANNEL id='58' name='TVL_A' unit='°C'/><CHANNEL id='59' name='TVLs_A' unit='°C' dop='0'/><CHANNEL id='60' name='TRA_A' unit='°C'/><CHANNEL id='61' name='TRs_A' unit='°C'/><CHANNEL id='62' name='HKZustand_A' dop='0'/><CHANNEL id='63' name='FRA Zustand' dop='0'/><CHANNEL id='64' name='HKPA Status' dop='0'/><CHANNEL id='65' name='TVL_1' unit='°C'/><CHANNEL id='66' name='TVLs_1' unit='°C' dop='0'/><CHANNEL id='67' name='TRA_1' unit='°C'/><CHANNEL id='68' name='TRs_1' unit='°C'/><CHANNEL id='69' name='HKZustand_1' dop='0'/><CHANNEL id='70' name='FR1 Zustand' dop='0'/><CHANNEL id='71' name='HKP1 Status' dop='0'/><CHANNEL id='72' name='TVL_2' unit='°C'/><CHANNEL id='73' name='TVLs_2' unit='°C' dop='0'/><CHANNEL id='74' name='TRA_2' unit='°C'/><CHANNEL id='75' name='TRs_2' unit='°C'/><CHANNEL id='76' name='HKZustand_2' dop='0'/><CHANNEL id='77' name='FR2 Zustand' dop='0'/><CHANNEL id='78' name='HKP2 Status' dop='0'/><CHANNEL id='79' name='TVL_B' unit='°C'/><CHANNEL id='80' name='TVLs_B' unit='°C' dop='0'/><CHANNEL id='81' name='TRA_B' unit='°C'/><CHANNEL id='82' name='TRs_B' unit='°C'/><CHANNEL id='83' name='HKZustand_B' dop='0'/><CHANNEL id='84' name='FRB Zustand' dop='0'/><CHANNEL id='85' name='HKPB Status' dop='0'/><CHANNEL id='86' name='TBA' unit='°C'/><CHANNEL id='87' name='TBs_A' unit='°C' dop='0'/><CHANNEL id='88' name='TB1' unit='°C'/><CHANNEL id='89' name='TBs_1' unit='°C' dop='0'/><CHANNEL id='90' name='BoiZustand_1' dop='0'/><CHANNEL id='91' name='TBB' unit='°C'/><CHANNEL id='92' name='TBs_B' unit='°C' dop='0'/><CHANNEL id='93' name='HKR Anf' unit='°C'/><CHANNEL id='94' name='Anf. HKR0' unit='°C' dop='0'/><CHANNEL id='95' name='Anf. HKR1' unit='°C' dop='0'/><CHANNEL id='96' name='Anf. HKR2' unit='°C' dop='0'/><CHANNEL id='97' name='Anf. HKR3' unit='°C' dop='0'/><CHANNEL id='98' name='Anf. HKR4' unit='°C' dop='0'/><CHANNEL id='99' name='Anf. HKR5' unit='°C' dop='0'/><CHANNEL id='100' name='Anf. HKR6' unit='°C' dop='0'/><CHANNEL id='101' name='Anf. HKR7' unit='°C' dop='0'/><CHANNEL id='102' name='Anf. HKR8' unit='°C' dop='0'/><CHANNEL id='103' name='Anf. HKR9' unit='°C' dop='0'/><CHANNEL id='104' name='Anf. HKR10' unit='°C' dop='0'/><CHANNEL id='105' name='Anf. HKR11' unit='°C' dop='0'/><CHANNEL id='106' name='Anf. HKR12' unit='°C' dop='0'/><CHANNEL id='107' name='Anf. HKR13' unit='°C' dop='0'/><CHANNEL id='108' name='Anf. HKR14' unit='°C' dop='0'/><CHANNEL id='109' name='Anf. HKR15' unit='°C' dop='0'/><CHANNEL id='110' name='Wasserdruck' unit='bar' dop='2'/><CHANNEL id='111' name='dummy' unit='bar' dop='2'/><CHANNEL id='112' name='dummy2' unit='bar' dop='2'/></ANALOG><DIGITAL><CHANNEL id='0' bit='0' name='Störung'/><CHANNEL id='0' bit='1' name='Stb'/><CHANNEL id='0' bit='2' name='Fuellstand'/><CHANNEL id='0' bit='3' name='RLP/PuffP'/><CHANNEL id='0' bit='4' name='RLm_auf'/><CHANNEL id='0' bit='5' name='RLm_zu'/><CHANNEL id='0' bit='10' name='WS freig.'/><CHANNEL id='0' bit='11' name='Akt. Code'/><CHANNEL id='0' bit='14' name='FW Freig.'/><CHANNEL id='0' bit='15' name='gFlP'/><CHANNEL id='0' bit='16' name='gFlM auf'/><CHANNEL id='0' bit='17' name='gFlM zu'/><CHANNEL id='0' bit='18' name='gFl2P'/><CHANNEL id='0' bit='19' name='gFl2M auf'/><CHANNEL id='0' bit='20' name='gFl2M zu'/><CHANNEL id='1' bit='0' name='L Heiz.'/><CHANNEL id='1' bit='1' name='Z Heiz.'/><CHANNEL id='1' bit='2' name='Z Geb.'/><CHANNEL id='1' bit='3' name='AA Run'/><CHANNEL id='1' bit='4' name='AA Dir'/><CHANNEL id='1' bit='5' name='ES Run'/><CHANNEL id='1' bit='6' name='ES Dir'/><CHANNEL id='1' bit='7' name='AS Saug'/><CHANNEL id='1' bit='8' name='AS RA Run'/><CHANNEL id='1' bit='9' name='AS RA Dir'/><CHANNEL id='1' bit='10' name='Rein En'/><CHANNEL id='1' bit='11' name='Rein Run'/><CHANNEL id='1' bit='12' name='Es Rein Endl'/><CHANNEL id='1' bit='13' name='sAS Anf Füll'/><CHANNEL id='2' bit='0' name='HKPA'/><CHANNEL id='2' bit='1' name='MAA'/><CHANNEL id='2' bit='2' name='MAZ'/><CHANNEL id='2' bit='3' name='HKP1'/><CHANNEL id='2' bit='4' name='M1A'/><CHANNEL id='2' bit='5' name='M1Z'/><CHANNEL id='2' bit='6' name='HKP2'/><CHANNEL id='2' bit='7' name='M2A'/><CHANNEL id='2' bit='8' name='M2Z'/><CHANNEL id='2' bit='9' name='HKP3'/><CHANNEL id='2' bit='10' name='M3A'/><CHANNEL id='2' bit='11' name='M3Z'/><CHANNEL id='2' bit='12' name='HKP4'/><CHANNEL id='2' bit='13' name='M4A'/><CHANNEL id='2' bit='14' name='M4Z'/><CHANNEL id='2' bit='15' name='HKP5'/><CHANNEL id='2' bit='16' name='M5A'/><CHANNEL id='2' bit='17' name='M5Z'/><CHANNEL id='2' bit='18' name='HKP6'/><CHANNEL id='2' bit='19' name='M6A'/><CHANNEL id='2' bit='20' name='M6Z'/><CHANNEL id='2' bit='21' name='HKPB'/><CHANNEL id='2' bit='22' name='MBA'/><CHANNEL id='2' bit='23' name='MBZ'/><CHANNEL id='2' bit='24' name='HK-P Poolp'/><CHANNEL id='2' bit='25' name='HK-P Primp'/><CHANNEL id='2' bit='26' name='HK-P MA'/><CHANNEL id='2' bit='27' name='HK-P MZ'/><CHANNEL id='3' bit='0' name='BPA'/><CHANNEL id='3' bit='1' name='BP1'/><CHANNEL id='3' bit='2' name='BP2'/><CHANNEL id='3' bit='3' name='BP3'/><CHANNEL id='3' bit='4' name='BPB'/><CHANNEL id='3' bit='5' name='BZPA'/><CHANNEL id='3' bit='6' name='BZP1'/><CHANNEL id='3' bit='7' name='BZP2'/><CHANNEL id='3' bit='8' name='BZP3'/><CHANNEL id='3' bit='9' name='BZPB'/><CHANNEL id='4' bit='0' name='Aschebox'/><CHANNEL id='4' bit='1' name='Netztrafo'/><CHANNEL id='4' bit='2' name='Netzrelais'/><CHANNEL id='4' bit='4' name='Lagerraum'/><CHANNEL id='4' bit='6' name='FLP'/><CHANNEL id='4' bit='8' name='ATW'/><CHANNEL id='4' bit='9' name='Entasch gesp.'/><CHANNEL id='4' bit='13' name='HKV'/><CHANNEL id='4' bit='14' name='Spülung Aktiv'/><CHANNEL id='4' bit='15' name='ExtHK vorh'/><CHANNEL id='4' bit='16' name='ExtHK_2 vorh'/><CHANNEL id='4' bit='17' name='ExtHK_3 vorh'/><CHANNEL id='6' bit='0' name='ExtHK Anf'/><CHANNEL id='6' bit='2' name='ExtHK_2 Anf'/><CHANNEL id='6' bit='3' name='ExtHK_3 Anf'/><CHANNEL id='6' bit='4' name='ExtHK Pumpe'/><CHANNEL id='6' bit='6' name='ExtHK_2 Pumpe'/><CHANNEL id='6' bit='7' name='ExtHK_3 Pumpe'/><CHANNEL id='6' bit='8' name='KASK1 MinLeist'/><CHANNEL id='6' bit='9' name='KASK2 MinLeist'/><CHANNEL id='6' bit='10' name='KASK3 MinLeist'/><CHANNEL id='6' bit='11' name='KASK4 MinLeist'/><CHANNEL id='6' bit='12' name='KASK1 MaxLeist'/><CHANNEL id='6' bit='13' name='KASK2 MaxLeist'/><CHANNEL id='6' bit='14' name='KASK3 MaxLeist'/><CHANNEL id='6' bit='15' name='KASK4 MaxLeist'/><CHANNEL id='6' bit='16' name='KASK1 Run'/><CHANNEL id='6' bit='17' name='KASK2 Run'/><CHANNEL id='6' bit='18' name='KASK3 Run'/><CHANNEL id='6' bit='19' name='KASK4 Run'/><CHANNEL id='6' bit='20' name='KASK1 OK'/><CHANNEL id='6' bit='21' name='KASK2 OK'/><CHANNEL id='6' bit='22' name='KASK3 OK'/><CHANNEL id='6' bit='23' name='KASK4 OK'/><CHANNEL id='6' bit='24' name='Kask KWK Out'/><CHANNEL id='6' bit='25' name='Kask FW Out'/><CHANNEL id='6' bit='26' name='KASK KWK OK'/><CHANNEL id='6' bit='27' name='KASK FW OK'/><CHANNEL id='7' bit='0' name='DReg P2'/><CHANNEL id='7' bit='1' name='DReg P3'/><CHANNEL id='7' bit='2' name='DReg Mi auf'/><CHANNEL id='7' bit='3' name='DReg Mi zu'/><CHANNEL id='7' bit='5' name='DReg2 P2'/><CHANNEL id='7' bit='6' name='DReg2 Mi auf'/><CHANNEL id='7' bit='7' name='DReg2 Mi zu'/><CHANNEL id='7' bit='9' name='DReg3 P2'/><CHANNEL id='7' bit='10' name='DReg3 P3'/><CHANNEL id='7' bit='11' name='DReg3 Mi auf'/><CHANNEL id='7' bit='12' name='DReg3 Mi zu'/></DIGITAL></DAQPRJ>"

Thanks for the message format. Unfortunately it still does not work for me. I don’t get anymore the message length error but now it just prints “Invalid State” and “Invalid value” in the logs. No entity holds any value…any idea?

EDIT: After some analysis I could see that the connection state toggles between ok and disconnected every 5 seconds… not sure why this happens.
Checking the connection on telnet directly is fine. There I receive constantly the messages

Could you post your complete nano_pk related configuration.yaml? Could be just a spelling error somewhere.

Here is my configuration:

nano_pk:
host: 192.168.0.41
msgformat: “NANO_V14HARp2”
devicename: Nano-PK
parameters: FULL
language: DE

same here connection is flapping every 5 sec

So you inserted the new message format in hargassner.py?
Did you tried to insert it directly in configuration.yaml? I know it shouldn’t make a difference, but worth a try.


no difference with the connection

For you the message length is still not accurate. It is missing 13 channels. “Expected 135, actual 122”

Today I got my new Hargassner Nano PK and I get the same error as the users above…
@Michael1101W could you please tell me, where exactly I need to copy your mgsformat? I’m still very new to Home Assistant, and don’t know where to put that exactly in the Hargassner.py…
Thank you very much! :slight_smile:

Just copying my msg format will not make you happy, most probably. Check in the GitHub folder for the instructions how to get the correct msg format for your system and where to add it

https://github.com/TheRealKillaruna/nano_pk

You need to extract it directly from your system as a lot of people do have different software versions. If this doesn’t work you can add the pull request from anderl78 to get more info why it’s not working. Maybe it’s just a wrong number of channels, which you can add manually.
Good luck.
If this is not working you can message me directly.

I made a new msgformat from my heating as the instructions said and added the new line in the hargassner.py and logged the data.
“HargassnerBridge.async_update(): Unexpected message length. Expected: 149, Actual: 118”
I tried a few different dummy entries, but the error is still the same as above with 118, even if I add 20 dummy lines to it.

So I tried to add the line directly into msgformat in the configuration.yaml instead of the “NANO_V14L” from the Github page.
“HargassnerBridge.async_update(): Unexpected message length. Expected: 116, Actual: 118”

Why is the expected line number changing from 149 to 116? And what should i do when my heating is sending 118 when only 116 are allowed?

Hi Guys, i’ve developped a project to pilot my NanoPK, including modifying the temperature, the boiler mode and the zone mode.

project can be found here: GitHub - hlehoux2021/MyHargassner: my personnal hargassner experiments

boiler is presented using MQTT-Discovery ; unfortunatly i’m not a home assistant user, but still it might be useful to share

Hi,

I juste updated to HA 2025.9.4 and the NanoPK integration is down.
Here is the log I got saying init.py file needs adjustements about :

async_setup await hass.helpers.discovery.async_load_platform(‘sensor’, DOMAIN, {}, config)

How can I manage to get it to work with last HA updates ?

Enregistreur: homeassistant.setup
Source: setup.py:425
S'est produit pour la première fois: 17:26:28 (1 occurrence)
Dernier enregistrement: 17:26:28

Error during setup of component nano_pk: 'HomeAssistant' object has no attribute 'helpers'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/setup.py", line 425, in _async_setup_component
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/nano_pk-main_bkp/__init__.py", line 43, in async_setup
    await hass.helpers.discovery.async_load_platform('sensor', DOMAIN, {}, config)
          ^^^^^^^^^^^^
AttributeError: 'HomeAssistant' object has no attribute 'helpers'

Hi, I managed to get rid of this error updating my custom component using Anderl78’s fork : this specitfic modification manage to pass this error message.

However, my NanoPK12 has been updated to V14.0HAR.p2 this morning.
I had added my new MSGformat to hargassner.py file, adding a dummy channel (114 were excepted but 115 received).
To get it to work, I had to compare the data received from telnet and the MsgFormat expected.
I had to add a dummy Channel106 at the end of the Analog section, thanks to @skrue for the HowTo :slight_smile:

Thank you!!!
Finally it works again.

I tried now many things and played around a little but now I am stuck here:

HargassnerBridge.getStateClass(): Parameter key Verbrauchszähler not known.
HargassnerBridge.getValue(): Parameter key Verbrauchszähler not known.
HargassnerBridge.async_update(): Unexpected message length. Expected: 132, Actual: 134
HargassnerBridge.async_update(): Unexpected message length. Expected: 132, Actual: 134
HargassnerBridge.async_update(): Unexpected message length. Expected: 132, Actual: 134

Any idea what’s now wrong here?

What should I now add to the message definition?
What about “Verbrauchszähler”?

You need to add two dummy channels in your analog MSGFORMAT.
You will find the method to identify where are these here :