-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New Firmware NanoPK V14.0HAR.p1 (new msgformat inside) #34
Comments
Hello , Here is the working msgformat (at least for me for my NANO PK 15) with inserted dummys:
|
@anderl78 , @Hellsbound , thanks for these reports. May I ask how you chose the selection for the dummy variables at the end of the analog section? And are you getting the correct values with this, both for analog and digital parameters? (You need to check the full parameter set for this, of course) |
I’ve compared the telnet output with the message format. If it expects dop=0 (int) or dop=2 (float) and if that’s in sync with the output delivered.
At channel 86 the results started to divert.
Yes I get analog and digital channel resolults.
Von: TheRealKillaruna ***@***.***>
Datum: Mittwoch, 4. September 2024 um 23:40
An: TheRealKillaruna/nano_pk ***@***.***>
Cc: Alexander Paral ***@***.***>, Mention ***@***.***>
Betreff: [EXTERN] Re: [TheRealKillaruna/nano_pk] New Firmware NanoPK V14.0HAR.p1 (new msgformat inside) (Issue #34)
@anderl78<https://github.com/anderl78> , @Hellsbound<https://github.com/Hellsbound> , thanks for these reports. May I ask how you chose the selection for the dummy variables at the end of the analog section? And are you getting the correct values with this, both for analog and digital parameters? (You need to check the full parameter set for this, of course)
—
Reply to this email directly, view it on GitHub<#34 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AFVFNBB7H2U5LLMSF2VGPIDZU543ZAVCNFSM6AAAAABNQQBGKCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMZQGE4TENZYGQ>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
@TheRealKillaruna good to see you! I was just looking for a quick fix. So I added a debugging code to hargassner.py (see pull request for this). At the same time, I compared the old channel list (from the p firmware) with the new channel list (from the p1 firmware). There are (in my case) only three changes at the end of the analog channels. So the simple fix is to add two dummies here (two based on the results of the debugging). The values I used seem to show the correct data. As far as I could see, the digital channels in the msg file are unchanged.... |
What's also interesting is that different users have massively different lengths in the msg file and the telnet output. A uniform msg file therefore seems difficult... I am currently working on adding an HA switch to the code that temporarily disables the length check (of course with a warning in the LOG and reactivated check every time HA is restarted) in order to at least be able to continue to use the plugin (even if with some error data) until an update...what do you think about this? |
As for many others, the integration stopped working for me after Hargassner updated the firmware to I now found some time to try the suggested workaround of adding dummy values to the It kind of worked, most values are available in HA again, but not all. For example the flow temperature (German "Vorlauftemperatur") is shown as 1°C while it should be 20-something (for both of my two heating circuits). The buffer0 temperature is now 0 while it should be 60-something. So I suspect that the position of the dummy values might not be correct or something else weird is going on with my By the way, how do I prevent Hargassner from initiating firmware updates on their end? I am happy to update the FW myself when there's a new one, but I am kind of tired of these constant breaking changes they introduce to the message format, just because - frankly speaking - they don't give a sh*t about folks like us who want to grab the data locally. |
@skrue You are right. I had not enough time till now to look for a solution to the dummy-entries. Perhaps look into the provided values from the integration and check what the heater displays to locate the right one? You can disable the automatic firmware update in the hargassner web-frontend. It's not available directly in the app. In the app press the three dots an select Web-Version, Login if necessary. Press the "i-Button" , go to settings. There is a checkbox named "automatic updates allowed" |
@anderl78 I have now also looked at the raw data that my heater spits out via telnet and compared it to the In my case one of the dummy channels needs to be at
Edit: Heater was on today, so I could confirm that the second dummy channel is
Due to the message length seemingly being different from heater to heater, these positions might as well be different ones. For example my Nano-PK 10 currently sends 107 analogue + 8 digital channels. Here's my current
|
Hi! With the 2 dummies at the end of the analog section this currently gives me always 0°. Any idea where to look at? Here's my current config direct from the unit, not working with my HA: Thx! |
@Spacey-Rat as I wrote above, putting the dummy channels at the end of the analog section will get the integration working again, but it will give wrong values for about half of the sensors. This is because the extra values that come in the data via telnet are not really at the end of the analog section, but somewhere in between.
With this method I could narrow down the location for my dummy channels as described above, but you have some more fields than I do, probably because my solar water heating is not integrated with the Nano-PK, so my string will not work for you. But you should start searching in similar locations. I have now disabled automatic updates (should have done this way earlier), but let's hope Hargassner fixes this with the next release... It's really a shame, it was already cumbersome to read out the string from the SD card and put it into the config manually, but with this mismatch it becomes really annoying. |
Thanks for the instructions. Unfortunately I've got a problem connecting to the heater via Telnet: I've got the communication module installed to be able to use the Hargassner app. I tried to telnet on port 23 to that IP with Putty - didn't work. I connected then to the front Ethernet port (disconnected the communication module) and restarted the whole unit. I got a different IP now (so I think the connection itself is OK) but telnet won't work here as well. What's the trick? Thx! |
I also have the Hargassner Internet Gateway, but in my case it seems that it's "transparent". |
Weird stuff... :D Edit 1: If these are all analog variables it looks like I'm missing 10 "dummy" fields. The first one Edit 2: OK - so I'm interested in my Value "Dreg Wq" - when comparing the Telnet-results in that region there's only one which would make kind of sense: I had to put in 2 dummy fields just right before the Dreg Wq one. Did that and now it seems I'm getting at least the value I'm thinking about it could be. I need to observe that - should behave like going down in the evening when the sun goes down and start to rise again on a sunny morning. |
The first numeric value after I also edited my above comment about the position of the dummy channels after I verified the position of the second dummy: #34 (comment) |
Normally the digital channels should always be the same, I don't see any changes there. Or am I wrong? What if we split the dataset and treat digital and analog separately? Then the digital channels should always remain correct. Only the analog ones would then have to be treated separately and adjusted individually if necessary. Or it should also be possible to make this more flexible. In the sense of "use all analog data up to the highest value according to msgfile or until no data is left, alternatively making a cut-off..." What do you think? |
Hello!
I think I figured something out. I compared the heater's TELNET output with the number of expected values according to (from SD-Card). It happens (at least for me) that two additional values are transferred via TELNET, (expected by the system = 127 vs 129) - and that's why it crashes. That's why I added two (analog) dummies at the end of the msgformat - Channel 119 and 120. If this is the correct position for the dummies is questionable. Please heck this and report it here.
Interesting at this point: The length of the messages seems to be quite different, see the pull request from @apaqd (which, however, did not work for me due to its different length. I could imagine that this is due to different versions of the heater?!
Here is the working msgformat (at least for me for my NANO PK 25) with inserted dummys:
"<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='BLDC_ES ist' unit='rpm' dop='0'/><CHANNEL id='38' name='BLDC_ES soll' unit='rpm' dop='0'/><CHANNEL id='39' name='LZ ES seit Füll.' unit='Min' dop='0'/><CHANNEL id='40' name='LZ ES seit Ent.' unit='Min' dop='0'/><CHANNEL id='41' name='Anzahl Entasch.' dop='0'/><CHANNEL id='42' name='Anzahl SR Beweg.' dop='0'/><CHANNEL id='43' name='Lagerstand' unit='kg' dop='0'/><CHANNEL id='44' name='Verbrauchszähler' unit='kg' dop='0'/><CHANNEL id='45' name='Heiz P Lambda' unit='W' dop='2'/><CHANNEL id='46' name='Heiz U Lambda' unit='V' dop='2'/><CHANNEL id='47' name='Heiz I Lambda' unit='mA' dop='0'/><CHANNEL id='48' name='U_Lambda' unit='mV'/><CHANNEL id='49' name='U Netzteil' unit='mV' dop='0'/><CHANNEL id='50' name='T Spülung' unit='°C'/><CHANNEL id='51' name='BRT' unit='°C'/><CHANNEL id='52' name='Tplat' unit='°C' dop='0'/><CHANNEL id='53' name='TVG' unit='°C'/><CHANNEL id='54' name='TVG2' unit='°C'/><CHANNEL id='55' name='AIN17' unit='V'/><CHANNEL id='56' name='Taus' unit='°C'/><CHANNEL id='57' name='TA Gem.' unit='°C'/><CHANNEL id='58' name='ExtHK Solltmp.' unit='°C' dop='0'/><CHANNEL id='59' name='TVL_A' unit='°C'/><CHANNEL id='60' name='TVLs_A' unit='°C' dop='0'/><CHANNEL id='61' name='TRA_A' unit='°C'/><CHANNEL id='62' name='TRs_A' unit='°C'/><CHANNEL id='63' name='HKZustand_A' dop='0'/><CHANNEL id='64' name='FRA Zustand' 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='TVL_2' unit='°C'/><CHANNEL id='72' name='TVLs_2' unit='°C' dop='0'/><CHANNEL id='73' name='TRA_2' unit='°C'/><CHANNEL id='74' name='TRs_2' unit='°C'/><CHANNEL id='75' name='HKZustand_2' dop='0'/><CHANNEL id='76' name='FR2 Zustand' dop='0'/><CHANNEL id='77' name='TVL_B' unit='°C'/><CHANNEL id='78' name='TVLs_B' unit='°C' dop='0'/><CHANNEL id='79' name='TRA_B' unit='°C'/><CHANNEL id='80' name='TRs_B' unit='°C'/><CHANNEL id='81' name='HKZustand_B' dop='0'/><CHANNEL id='82' name='FRB Zustand' dop='0'/><CHANNEL id='83' name='TBA' unit='°C'/><CHANNEL id='84' name='TBs_A' unit='°C' dop='0'/><CHANNEL id='85' name='TB1' unit='°C'/><CHANNEL id='86' name='TBs_1' unit='°C' dop='0'/><CHANNEL id='87' name='BoiZustand_1' dop='0'/><CHANNEL id='88' name='TBB' unit='°C'/><CHANNEL id='89' name='TBs_B' unit='°C' dop='0'/><CHANNEL id='90' name='HKR Anf' unit='°C'/><CHANNEL id='91' name='Anf. HKR0' unit='°C' dop='0'/><CHANNEL id='92' name='Anf. HKR1' unit='°C' dop='0'/><CHANNEL id='93' name='Anf. HKR2' unit='°C' dop='0'/><CHANNEL id='94' name='Anf. HKR3' unit='°C' dop='0'/><CHANNEL id='95' name='Anf. HKR4' unit='°C' dop='0'/><CHANNEL id='96' name='Anf. HKR5' unit='°C' dop='0'/><CHANNEL id='97' name='Anf. HKR6' unit='°C' dop='0'/><CHANNEL id='98' name='Anf. HKR7' unit='°C' dop='0'/><CHANNEL id='99' name='Anf. HKR8' unit='°C' dop='0'/><CHANNEL id='100' name='Anf. HKR9' unit='°C' dop='0'/><CHANNEL id='101' name='Anf. HKR10' unit='°C' dop='0'/><CHANNEL id='102' name='Anf. HKR11' unit='°C' dop='0'/><CHANNEL id='103' name='Anf. HKR12' unit='°C' dop='0'/><CHANNEL id='104' name='Anf. HKR13' unit='°C' dop='0'/><CHANNEL id='105' name='Anf. HKR14' unit='°C' dop='0'/><CHANNEL id='106' name='Anf. HKR15' unit='°C' dop='0'/><CHANNEL id='107' name='DiffR3TWq' unit='°C'/><CHANNEL id='108' name='DiffR3 K1' dop='0'/><CHANNEL id='109' name='DiffR3 K2' dop='0'/><CHANNEL id='110' name='DiffR3TDiff1' unit='°C'/><CHANNEL id='111' name='DiffR3TDiff2' unit='°C'/><CHANNEL id='112' name='DiffR3 P1' unit='%' dop='0'/><CHANNEL id='113' name='DiffR3 P2' unit='%' dop='0'/><CHANNEL id='114' name='DiffR3 P3' unit='%' dop='0'/><CHANNEL id='115' name='DiffR3 WMZ_Ges' unit='kWh'/><CHANNEL id='116' name='DiffR3 WMZ_Tag' unit='kWh'/><CHANNEL id='117' name='DiffR3 WMZ_Moment' unit='kW'/><CHANNEL id='118' name='Wasserdruck' unit='bar' dop='2'/><CHANNEL id='119' name='Dummy' unit='bar' dop='2'/><CHANNEL id='120' 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='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>"
One more thing:
Please edit your hargassner.py and add following (new) line 176:
self._errorLog += f"HargassnerBridge.async_update(): Unexpected message length. Expected: {self._expectedMsgLength}, Actual: {len(msg)}\n"
it should look like:
If it doesn't work, an error is reported in the HomeAssistant protocol, which shows the expected value according to msgformat and the actual value (from TELNET). It would be helpful if we basically found out this value together with the specific model of the heater. I will also send a pull request for this.
The text was updated successfully, but these errors were encountered: