Daikin Altherma heat pump monitoring

you might be right, this COM3 is always there. When I plug this thing in, this is how it shows up in device manager, under Other Devices, complaining about no driver pulled for it…

kép

I tried to install many VCP driver, even that one you proposed, without any luck… frankly, installing these VPC drivers seemet to me (on all computers!) that they didn’t even install anything, it was so fast, and the situation never changed afterwards, no device showed up in device manager…

Should I try with a proper UART-USB cable, and find a computer with actual serial port?

Hmmm, I’m out of idea here… The official doc won’t probably bring anything new… m5-docs

It might be possible that the m5 usb chip is broken, but that would be a first for me and it still manages to get its right name… So I would still go for a software problem.
On another computer, is it the same? It also ends up in Other devices?

I CAN’T FREAKING BELIEVE THIS.

Installed (again!) this FTDI driver you linked, and it worked right out of the box this time.


Thank you @raomin , your name shall be worshipped until eternity. Finally I see this instead of the stupid demo and I can continue to follow your path :smiley:

Great! I’m glad you got it working. I know how frustrating these drivers issues can be and I could feel your relief from here! I’m sure you’ll get your data on HA very soon!

:rofl:

1 Like

@raomin , in the meantime I fired up ESPAltherma on the stick as well, now I can’t wait to get back home and tear apart my Altherma :joy: :joy: :joy: :joy:


kép

1 Like

@raomin , been looking for this for years… Excellent work…

I am using an old Altherma, EKHBRD016ABV1 indoor unit. It uses P1P2 protocol as mentioned in the Arnold P1P2 repository. It uses a BRC21A51 cabled remote unit which is connected to X3M on main PCB with two wires, P1 and P2. I haven’t opened up the unit yet; but from what i see in the manuals there is X10A port only on control PCB A3P; and it is only 2 pins, standing side to side with 2 pins X9A. Is there a way to make your project work with this type of Altherma? Or in another saying, is Daikin I protocol in line with P1P2 protocol?

Thanks again for the great work…

Hi @febalci, is your altherma dual zone? if so, what you see as a 2 pin port might very well be that your X10A is already used to connect to the A3P control board. In such case, you’re in the situation described here: X10A already used · Issue #40 · raomin/ESPAltherma · GitHub
And I don’t have yet a definitive solution for this but you can have a look at potential workaround in the issue #40.

Dear @raomin , just a short question, if I may.

I’ll soon have some time to pull the trigger on the project, and really tear apart my Altherma. I’d just like to ask, where exactly should I open it?

I have this version: the triangle in the upper left corner can be opened (marked with red outline) to get to the console and buttons, and there are some screws there. Should I only open here, or should I take off the the whole front cover (marked with green outline)? Turning it off and pulling down the circuit breaker is mandatory I assume, shouldn’t put the dupont on the serial port while it’s on, correct?

oh, only one last question (as Columbo would say :slight_smile: ):

Is there any instructions on how to set up that beautiful graphic lovelace card in home asisstant? :slight_smile:
kép

Dear @raomin ,

I pulled the trigger, tore apart the the pump. Localized the X10A connector:

after turning off the unit, I connected the ESP with dupont cables (made by me from UTP cable), correct pin layout checked a lot of times, they connect to the correct I/Os:

The stick is powered on, it’s on the wifi network, can see it on the router, can ping it, but cannot read the first register, it says check connection, and retries in 60 sec loops:

I tried recable with factory rapsberry dupont cables, the result was the very same, only check connection error message. I did not receive any MQTT message, not even zeros, MQTT setting is correct. Sensor shows up in HA, but only contains a few M5stickc related data, and the first two register value (which doesn’t make much sense), nothing else:

Do you have any suggestion for me how to troubleshoot further the problem? Should I provide you with any settings file from platformio? I did make translations in the heatpump definition file, maybe there I made some error? I couldn’t find any, but here it is:

#include "labeldef.h"
//  This file is a definition file for the ESPAtherma.
//  uncomment each value you want to query for your installation.

LabelDef PROGMEM labelDefs[] = {
//{0x00,0,801,0,-1,"* Szivattyú típus"},
//{0x00,0,152,1,-1,"Érzékelő adat db"},
//{0x00,1,152,1,-1,"Inverteres kompresszor db"},
//{0x00,2,152,1,-1,"Szabványos kompresszor db"},
//{0x00,3,152,1,-1,"Kültéri egység ventilátor adat db"},
//{0x00,4,152,1,-1,"Tágulási szelepek db"},
//{0x00,5,152,1,-1,"4 utas szelep adat db"},
//{0x00,6,152,1,-1,"Olajteknő fűtőberendezések db"},
//{0x00,7,152,1,-1,"Mágnesszelepek db"},
//{0x00,8,152,1,-1,"Csatlakoztatható beltéri egységek maximális száma"},
//{0x00,9,152,1,-1,"Csatlakoztatott beltéri egységek észlelt száma (max. 59 megjeleníthető)"},
//{0x00,10,152,1,-1,"O / U MPU azonosító (xx)"},
//{0x00,11,152,1,-1,"O / U MPU azonosító (yy)"},
{0x00,12,105,1,-1,"Kültéri egység teljesítménye (kW)"},
{0x10,0,217,1,-1,"Aktuális üzemmód"},
//{0x10,1,307,1,-1,"Termosztát BE / KI"},
//{0x10,1,306,1,-1,"Újraindítás késleltetése"},
//{0x10,1,305,1,-1,"Indítás ellenőrzése"},
{0x10,1,304,1,-1,"Kiolvasztás"},
//{0x10,1,303,1,-1,"Olaj visszatérés"},
//{0x10,1,302,1,-1,"Nyomáskiegyenlítési folyamat"},
//{0x10,1,301,1,-1,"Terhelés"},
{0x10,1,300,1,-1,"Zajcsökkentett működés"},
{0x10,4,203,1,-1,"Hiba típusa"},
{0x10,5,204,1,-1,"Hibakód"},
//{0x10,6,114,2,1,"Célpárolgás ° C-ban"},
//{0x10,8,114,2,1,"Célkondenzáció ° C-ban"},
//{0x10,10,307,1,-1,"A kompresszor hőmérséklet védelme aktív"},
{0x10,10,310,1,-1,"Kompresszor hőmérséklet védelmi újrapróbálkozások száma"},
//{0x10,10,303,1,-1,"A kompresszor túláramvédelme aktív"},
{0x10,10,311,1,-1,"Kompresszor túláramvédelem újrapróbálkozások száma"},
//{0x10,11,307,1,-1,"A nagynyomású védelem aktív"},
{0x10,11,310,1,-1,"Nagynyomású védelem újrapróbálkozások száma"},
//{0x10,11,303,1,-1,"Alacsony nyomásvédelem aktív"},
{0x10,11,311,1,-1,"Alacsony nyomás elleni védelem újrapróbálkozások száma"},
//{0x10,12,307,1,-1,"Az inverter panel hőmérséklet-védelme aktív"},
{0x10,12,310,1,-1,"Inverter panel hőmérséklet-védelem újrapróbálkozások száma"},
//{0x10,12,303,1,-1,"Egyéb védelmi mód"},
//{0x10,12,311,1,-1,"Nem használt"},
//{0x11,0,215,1,-1,"O / U EEPROM (1. számjegy)"},
//{0x11,1,215,1,-1,"O / U EEPROM (3. 4. számjegy)"},
//{0x11,2,215,1,-1,"O / U EEPROM (5. 6. számjegy)"},
//{0x11,3,215,1,-1,"O / U EEPROM (7. 8. számjegy)"},
//{0x11,4,215,1,-1,"O / U EEPROM (10. számjegy)"},
//{0x11,5,214,1,-1,"O / U EEPROM (11. számjegy)"},
//{0x00,0,995,1,-1,"NextDataGrid"},
{0x20,0,105,2,1,"Külső levegő hőmérséklete (R1T)"},
{0x20,2,105,2,1,"O / U hőcserélő hőm."},
{0x20,4,105,2,1,"Leeresztő vezeték hőmérséklete"},
{0x20,6,105,2,1,"Szívóvezeték hőmérséklete"},
{0x20,8,105,2,1,"Hőcserélő közeghőmérséklet."},
{0x20,10,105,2,1,"Folyadékvezeték hőmérséklete (R6T)"},
{0x20,12,105,2,1,"Hűtőborda hőmérséklete"},
{0x20,14,105,2,2,"Nyomás"},
{0x20,14,405,2,1,"Nyomás (T)"},
//{0x20,16,105,2,-1,"Nem használt"},
//{0x20,18,105,2,-1,"Nem használt"},
{0x21,0,105,2,-1,"Kompresszor elsődleges áramfelvétel (A)"},
{0x21,2,105,2,-1,"Kompresszor másodlagos áramfelvétel (A)"},
{0x21,4,101,2,-1,"Feszültség (N-fázis) (V)"},
{0x21,6,307,1,-1,"Fagyálló folyadékkapcsoló"},
//{0x21,6,306,1,-1,"Nem használt"},
//{0x21,6,305,1,-1,"Nem használt"},
//{0x21,6,304,1,-1,"Nem használt"},
//{0x21,6,303,1,-1,"Nem használt"},
//{0x21,6,302,1,-1,"Nem használt"},
//{0x21,6,301,1,-1,"Nem használt"},
//{0x21,6,300,1,-1,"Nem használt"},
{0x21,7,105,2,1,"Fagyálló bejövő hőmérséklete"},
{0x21,9,105,2,1,"Fagyálló kimenő hőmérséklete"},
//{0x21,11,105,2,1,"Hűtési hőmérséklet Párologtató be "},
//{0x21,13,105,2,1,"Hűtési hőmérséklet Párologtató ki"},
//{0x21,15,105,1,-1,"Nem használt"},
//{0x21,16,105,1,-1,"Nem használt"},
//{0x21,17,105,1,-1,"Nem használt"},
//{0x21,18,105,1,-1,"Nem használt"},
//{0x00,0,995,1,-1,"NextDataGrid"},
{0x30,0,152,1,-1,"Kompresszor fordulatszám (ford / sec)"},
//{0x30,1,211,1,-1,"1. ventilátor (szint)"},
//{0x30,2,211,1,-1,"2. ventilátor (szint)"},
//{0x30,3,151,2,-1,"Tágulási szelep1 (pls)"},
//{0x30,5,151,2,-1,"Y1E tágulási szelep közepes nyomású alhűtő"},
//{0x30,7,307,1,-1,"4 utas szelep 1"},
//{0x30,7,306,1,-1,"4 utas szelep 2"},
//{0x30,7,305,1,-1,"4 utas szelep 3"},
//{0x30,7,304,1,-1,"4 utas szelep 4"},
//{0x30,7,303,1,-1,"4 utas szelep 5"},
//{0x30,8,307,1,-1,"Olajteknő fűtése 1"},
//{0x30,8,306,1,-1,"Olajteknő fűtése 2"},
//{0x30,8,305,1,-1,"Olajteknő fűtése 3"},
//{0x30,8,304,1,-1,"Olajteknő fűtése 4"},
//{0x30,9,307,1,-1,"SV1 (forró gáz)"},
//{0x30,9,306,1,-1,"SV2 (BPH)"},
//{0x30,9,305,1,-1,"Mágnesszelep 3"},
//{0x30,9,304,1,-1,"Mágnesszelep 4"},
//{0x30,9,303,1,-1,"Mágnesszelep 5"},
//{0x00,0,998,1,-1,"In-out elválasztó"},
//{0x60,0,304,1,-1,"Adatok be- és kikapcsolása"},
//{0x60,1,152,1,-1,"Beltéri egység címe"},
//{0x60,2,315,1,-1,"I / U üzemmód"},
//{0x60,2,303,1,-1,"Termosztát BE / KI"},
{0x60,2,302,1,-1,"Fagyvédelem"},
{0x60,2,301,1,-1,"Csendes mód"},
//{0x60,2,300,1,-1,"Fagyvédelem vízvezetékekhez"},
{0x60,3,204,1,-1,"Hibakód"},
//{0x60,4,314,2,-1,"Beltéri egység kódja"},
//{0x60,6,219,1,-1,"I / U kapacitáskód"},
{0x60,7,105,2,1,"A használati melegvíz alapértéke"},
{0x60,9,105,2,1,"Fűtési alapáram alapjel"},
//{0x60,11,307,1,-1,"Víz áramlás kapcsoló"},
//{0x60,11,306,1,-1,"Hővédelem BUH"},
//{0x60,11,305,1,-1,"Hővédelem BSH"},
//{0x60,11,304,1,-1,"Előnyben részesített kWh áram tarifa"},
//{0x60,11,303,1,-1,"Napelemes kapcsolat"},
//{0x60,11,302,1,-1,"Nem használt"},
//{0x60,11,301,1,-1,"Nem használt"},
//{0x60,11,300,1,-1,"Kétértékű működés"},
{0x60,12,307,1,-1,"2 utas szelep (be: fűtés, ki: hűtés)"},
{0x60,12,306,1,-1,"3 utas szelep (be: HMV,  ki: fűtés/hűtés)"},
//{0x60,12,305,1,-1,"BSH"},
//{0x60,12,304,1,-1,"1. fűtőelem szakasz"},
//{0x60,12,303,1,-1,"2. fűtőelem szakasz"},
//{0x60,12,302,1,-1,"BPH"},
{0x60,12,301,1,-1,"Vízszivattyú működése"},
//{0x60,12,300,1,-1,"Napelemes szivattyú működése"},
//{0x60,13,152,1,-1,"Belső opciós kód"},
//{0x60,15,215,1,-1,"Hydrobox szoftver (xx)"},
//{0x60,14,215,1,-1,"Hidrobox szoftver (yy)"},
//{0x60,16,152,1,-1,"EEPROM Hydrobox verzió"},
//{0x61,0,307,1,-1,"Adatok be- és kikapcsolása"},
//{0x61,1,152,1,-1,"Beltéri egység címe"},
{0x61,2,105,2,1,"Kimenő víz hőmérséklet hőcserélő előtt (R1T)"},
{0x61,4,105,2,1,"Kimenő víz hőmérséklet hőcserélő után (R1T)"},
{0x61,6,105,2,1,"Hűtőközeg folyadék hőmérséklete (R3T)"},
{0x61,8,105,2,1,"Visszatérő víz hőmérséklete hőcserélő előtt (R4T)"},
{0x61,10,105,2,1,"HMV hőmérséklet a tárolóban (R5T)"},
{0x61,12,105,2,1,"Beltéri környezeti hőmérséklet (R1T)"},
//{0x61,14,105,2,1,"Külső beltéri környezeti érzékelő (R6T)"},
//{0x62,0,307,1,-1,"Adatok be- és kikapcsolása"},
//{0x62,1,152,1,-1,"Beltéri egység címe"},
//{0x62,2,307,1,-1,"Újrafűtés BE / KI"},
{0x62,2,306,1,-1,"Gazdaságos betárolásBE / KI"},
{0x62,2,305,1,-1,"Komfortbetárolás BE / KI"},
{0x62,2,304,1,-1,"Nagy teljesítményű HMV készítés BE / KI"},
{0x62,2,303,1,-1,"Helyiségfűtés BE / KI"},
{0x62,2,302,1,-1,"Teljes rendszer KI"},
//{0x62,2,301,1,-1,"Nem használt"},
{0x62,2,300,1,-1,"Vészhelyzeti működés BE / KI"},
//{0x62,3,105,2,1,"LW alapérték (kiegészítő)"},
//{0x62,5,105,2,1,"RT alapérték"},
//{0x62,7,307,1,-1,"Kiegészítő külső RT bemeneti hűtés"},
//{0x62,7,306,1,-1,"Kiegészítő külső RT bemeneti fűtés"},
//{0x62,7,305,1,-1,"Fő RT hűtés"},
//{0x62,7,304,1,-1,"Fő RT fűtés"},
//{0x62,7,303,1,-1,"Energiafogyasztási határ 4"},
//{0x62,7,302,1,-1,"Energiafogyasztási határ 3"},
//{0x62,7,301,1,-1,"Energiafogyasztási határ 2"},
//{0x62,7,300,1,-1,"Energiafogyasztási határ 1"},
//{0x62,8,307,1,-1,"Egyik sem"},
//{0x62,8,306,1,-1,"Nem használt"},
//{0x62,8,305,1,-1,"Nem használt"},
//{0x62,8,304,1,-1,"Nem használt"},
{0x62,8,303,1,-1,"HMV tartály előmelegítés BE / KI"},
{0x62,8,302,1,-1,"Keringető szivattyú működése"},
//{0x62,8,301,1,-1,"Riasztás kimenet"},
//{0x62,8,300,1,-1,"Helyiségfűtési üzemi teljesítmény"},
{0x62,9,105,2,-1,"Áramlási sebesség (l / perc)"},
{0x62,11,105,1,2,"Víznyomás"},
{0x62,12,152,1,-1,"Szivattyú fordulatszáma (0: max-100: stop)"},
//{0x62,13,152,1,-1,"[Jövő] 3 utas szelepkeverék 1"},
//{0x62,14,152,1,-1,"[Jövő] 3 utas szelepkeverék 2"},
//{0x62,15,152,1,-1,"Nem használt"},
//{0x62,16,307,1,-1,"Nem használt"},
//{0x62,16,306,1,-1,"Nem használt"},
//{0x62,16,305,1,-1,"Nem használt"},
//{0x62,16,304,1,-1,"Nem használt"},
//{0x62,16,303,1,-1,"Nem használt"},
//{0x62,16,302,1,-1,"Nem használt"},
//{0x62,16,301,1,-1,"Nem használt"},
//{0x62,16,300,1,-1,"Nem használt"},
//{0x63,0,307,1,-1,"Adatok be- és kikapcsolása"},
//{0x63,1,152,1,-1,"Beltéri egység címe"},
//{0x63,2,215,1,-1,"I / U EEPROM (3. számjegy)"},
//{0x63,3,215,1,-1,"I / U EEPROM (4. 5. számjegy)"},
//{0x63,4,215,1,-1,"I / U EEPROM (6. 7. számjegy)"},
//{0x63,5,215,1,-1,"I / U EEPROM (8. 9. számjegy)"},
//{0x63,6,215,1,-1,"I / U EEPROM (11. számjegy)"},
//{0x63,7,214,1,-1,"I / U EEPROM (12. számjegy) (rev.)"},
//{0x64,0,307,1,-1,"Adatok be- és kikapcsolása"},
//{0x64,1,152,1,-1,"Beltéri egység címe"},
//{0x64,2,316,1,-1,"Hibrid üzemmód"},
//{0x64,2,303,1,-1,"A kazán működési igény"},
{0x64,2,302,1,-1,"HMV kazán igény"},
//{0x64,2,301,1,-1,"Bypass szelep kimenete"},
//{0x64,3,105,2,-1,"BE_COP"},
//{0x64,5,105,2,1,"Hibrid fűtési célhőmérséklet."},
{0x64,7,105,2,1,"A kazán fűtési célhőmérséklete"},
{0x64,9,301,1,-1,"Kiegészítő szivattyú"},
{0x64,9,300,1,-1,"Fő szivattyú"},
{0x64,10,118,2,1,"Kevert vízhőmérséklet"},
};

Many many thanks

UPDATE: FINALLY IT WORKS :smiley: :smiley: :smiley:
sorry for acting like a whining bit*h
Pulled off, then replugged the cables (even tested them with a multimeter, they were fine), but now it works!!! Now I just have to figure out what are the useful registers for me :slight_smile: Beer(s) will be sent to you Raomin for your wonderful job done here, and I’ll document the setup on github to show off :slight_smile:

1 Like

@raomin thanks for the great project!

Yesterday I started to monitor my Daikin Altherma 3 Geo (EGSAH06DA9W) with ESPAltherma and Hass.
I used the /German/default.h but I miss some important values (flow & pressure sensors; Voltage… etc) and the German translation is not that good as it is in the German UI… never the less, are there a possibility to make a special config-file for the device… Where I can find the right registers or can I read it out or something like that.

Hi @mdkeil, thanks for the positive feedback and congrats for your setup.

You can try different definition files, to match the GS nature of your HP I would try with ALTHERMA(GSHP).h in your case.

Generally speaking, if you are missing values it can mean 2 things:

  • Either the register value is wrong (you can find the list of all registers and occurrences in the definition files here Information on values and adjust yours.
  • or your heatpump does not report the value (if you look in the issues on github you’ll find people complaining that the voltage is always 0 for instance). It depends on your HP model.

For the German translation, it’s based on the DaikinMonitor tool. But improvement are welcomed :slight_smile:

Cheers

Thanks @raomin for this great tool!

I’ve managed to retrieve all relevant data from my Daikin and am now trying to visualise Electrical & Thermal performance as well as the COP to enable further analysis/tuning of my heating system. Unfortunately it seems that something is wrong with either my input data and/or my calculations since I keep seeing spikes of COP >10 occasionally. This can’t be real, can it?

For example this morning I took a sample of data (from my Altherma 3 R ECH2O) which seems valid to me but results in a very high COP calculation. I would be interested to see what others calculate for Electrical and Thermal performance as well as the COP based on this data set.

Here’s the extract from the MQTT message:

{“Operation Mode”:“Heating”,“Defrost Operation”:“OFF”,“Outdoor air temp.”:11,“Discharge pipe temp.”:48,“O/U Heat Exch. Mid-temp.”:8,“Pressure”:0,“INV primary current (A)”:1.3,“Voltage (V)”:232,“INV frequency (rps)”:8,“Fan 1 (10 rpm)”:67,“Expansion valve 1 (pls)”:105,“Expansion valve 2 (pls)”:0,“DHW setpoint”:51,“LW setpoint (main)”:26.8,“BUH Step1”:“OFF”,“BUH Step2”:“OFF”,“Outlet Water Heat Exch. Temp. (R1T)”:27.9,“Outlet Water BUH Temp. (R2T)”:27.6,“Refrig. Temp. liquid side (R3T)”:26.5,“Inlet water temp.(R4T)”:26.1,“DHW tank temp. (R5T)”:46.5,“Circulation pump operation”:“OFF”,“Flow sensor (l/min)”:15.7,“Water pressure”:0,“Water pump signal (0:max-100:stop)”:49,“Pressure sensor”:18.7,“Mixed water temp.”:0,“M5VIN”:“5.02V”,“M5AmpIn”:“61.875mA”,“M5BatV”:“4.13V”,“M5BatCur”:“0mA”,“M5BatPwr”:“0mW”}

Best regards!

Did you find a cool grapic for the lovelace card? I am going to try buildig next week (wifi in the now home is not yet live)

Hi Niek,

you mean this perhaps?

I also have it in a slightly higher res, I can share if you need this…

Hi,

I Was actualy looking for the one that @raomin used, see the screenshot on the github page.

Regards

What I included is from one kind of a user manual pdf I found online for my version of Altherma. I recall Raomin’s version from the newer model’s manual, but I did not save ut unfortunately, I bet you’ll find it online somewhere!!

Hi there, I used a combination of images from Stock Photo and Image Portfolio by sivVector | Shutterstock plus other I grabbed here and there.

Hi @sahni,
Your values look legit to me but you are missing the Leaving water temp. before BUH (R1T) value which is referred to in the formula on the home page. What is the formula you’re using?

Hi @raomin, for my Altherma 3 R ECH2O I use the ALTHERMA(HPSU6_ULTRA).h definition file. Here there is no label “Leaving water temp. before BUH (R1T)” but “Outlet Water Heat Exch. Temp. (R1T)” at register 0x61,2,105,2,1 instead. Isn’t that the same value?

The formula I’ve been using to calculate COP is this:

{{
  (( state_attr('sensor.althermasensors','Outlet Water Heat Exch. Temp. (R1T)') | float - state_attr('sensor.althermasensors','Inlet water temp.(R4T)') | float ) * 1.163 * 60 * state_attr('sensor.althermasensors','Flow sensor (l/min)')  | float )
  /
  ( state_attr('sensor.althermasensors','INV primary current (A)') | float * 230 )
}}