Configured my ESPHome with MCP2515 CAN-Bus for Stiebel Eltron heating pump

Wow, thank you very much! Works great!!!

Hi there,
I’ve run code from Github on my ESP8266, and I’ve faced problems with my WPC04. My heat pump stops heating up water and flor until turn off ESP. Thanks in advance for any findings and remarks. Perhaps someone had a similar problem and solved it.

Hi,
Xylone reported the same problem at the beginning of this Thread.
I don‘t know if he managed to get it working but I think he gave up.
Maybe you have to change the Can ID if the Heat Pump is using the same address somewhere else

I’ve changed CAN ID with no luck.

A great graph. A question regarding the temperatures. Why does the heating circuit temperatures rise → 50 C at one point? Is it because domestic hot water is heated at that time? Still, why does it raise the heating circuit temperatures?

Yes exactly, it is the heating of the domestic water. In the meantime, I have expanded the graph a little, among other things, the domestic hot water temperature and also the compressor pressure because we had a low-pressure problem a few weeks ago.

1 Like

I am still struggling to get this to work. I believe I have a working CAN-Bus by now as I receive frames.
I disabled all sending to the CAN-Bus for now as this crashed my heatpump. So currently I am just listening to the bus. I frequently receive frames on 0x404 of various sizes (0-8).

[23:15:17][D][canbus:068]: received can message (#1) std can_id=0x404 size=8
[23:15:17][V][canbus:075]:   can_message.data[0]=80
[23:15:17][V][canbus:075]:   can_message.data[1]=80
[23:15:17][V][canbus:075]:   can_message.data[2]=80
[23:15:17][V][canbus:075]:   can_message.data[3]=80
[23:15:17][V][canbus:075]:   can_message.data[4]=fb
[23:15:17][V][canbus:075]:   can_message.data[5]=80
[23:15:17][V][canbus:075]:   can_message.data[6]=90
[23:15:17][V][canbus:075]:   can_message.data[7]=80

Any idea what 0x404 could be?

Hi, I use an ESP8266 to read the data of a 2017 wpc05 and have no problems with it so far. You can find my config further ahead in the thread (October 22 2022). If you want, I can also send you my current configuration. For comparison a screenshot of the bus configuration. Maybe you will find a difference here.

This is mine:

Unfortunately I do not receive anything on 0x180.

does this also work if i already use the ISG Module from Stiebel?

I see no reason why not

I have a LWZ 5S Trend (404) and some values are showing up nicely, some are not showing and I am just trying to understand the whole process.
Example Volumenstrom:
In @roberreiter 's code there is:

#Volumenstrom (l/min)
        - lambda: |-
            if(x[0]==id(internalResponse_id)[0] and x[1]==id(internalResponse_id)[1] and x[2]==0xfa and x[3]==0x06 and x[4]==0x73) {
              float current =(float((int16_t((x[6])+( (x[5])<<8))))/100);
              id(volumenstrom_log).publish_state(current);
              id(volumenstrom_float)=current;
              ESP_LOGD("main", "l/min Volumenstrom empfangen over can is %f", current);
            }

Why is it 0x06 and 0x73? If I look at ElsterTable there is:

  { "TEST_OBJEKT_50"                                   , 0x0673, 0},

There is also:

  { "VOLUMENSTROM"                                     , 0x01da, 0},

So when I changed it to:

#Volumenstrom (l/min)
        - lambda: |-
            if(x[0]==id(internalResponse_id)[0] and x[1]==id(internalResponse_id)[1] and x[2]==0xfa and x[3]==0x01 and x[4]==0xDA) {
              float current =(float((int16_t((x[6])+( (x[5])<<8))))/10);
              id(volumenstrom_log).publish_state(current);
              id(volumenstrom_float)=current;
              ESP_LOGD("main", "l/min Volumenstrom empfangen over can is %f", current);
            }

then it worked (also had to adjust the divider from 100 to 10).

Are there big differences between those heatpumps? If yes, are the places where those things are already documented?

Hi,

there are some differences and I didn’t find any documentation yet.
I think the value “Volumenstrom” was something I found by trying out some values.
There are some people who make a scan of all values. juerg5524 put some code on his homepage to do a scan.

Here is an excerpt of another script I found, where I took some values from that are not listed in the elster table.
I don’t know anymore where I found it, so don’t ask for the source :wink:
WeTransfer

my %WPL15_sets =(
# input has always to end with a blank
"T_WW_Soll_Tag"			=> {EIdx => "0013", ID => "3000", type => "dec", input =>":40,41,42,43,44,45,46,47,48,49,50,60 "},  
"T_WW_Soll_Nacht"		=> {EIdx => "0A06", ID => "3000", type => "dec", input =>":40,41,42,43,44,45,46,47,48,49,50,60 "},
"PU_HK_Soll"		 	=> {EIdx => "070A", ID => "9000", type => "num", input =>":21,30,40,50,60,70,80,90,100 "},
"T_Raumsoll_Tag"		=> {EIdx => "0005", ID => "6001", type => "dec", input =>":16,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22 "},
"T_Raumsoll_Nacht"		=> {EIdx => "0008", ID => "6001", type => "dec", input =>":16,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22 "},
"Antilegionellen"		=> {EIdx => "0101", ID => "9000", type => "bool", input =>":on,off "}
);


my %WPL15_errors =(
  "Fehler01_hh"		=> { EIdx => "0B01", ID => "3100", type	=> "fnum", next => "0B02"}, 
  "Fehler01_d"		=> { EIdx => "0B02", ID => "3100", type	=> "fnum", next => "0B03"}, 
  "Fehler01_m"		=> { EIdx => "0B03", ID => "3100", type	=> "fnum", next => "0B04"},
  "Fehler01_yr"		=> { EIdx => "0B04", ID => "3100", type	=> "fnum", next => "0B05"}, 
  "Fehler01_dev"	=> { EIdx => "0B05", ID => "3100", type => "fnum", next => "0B06"},
  "Fehler01_nr"		=> { EIdx => "0B06", ID => "3100", type => "fnum", next => "0B07"},
  "Fehler02_hh"		=> { EIdx => "0B08", ID => "3100", type => "fnum", next => "0B09"},
  "Fehler02_d"		=> { EIdx => "0B09", ID => "3100", type => "fnum", next => "0B0A"},
  "Fehler02_m"		=> { EIdx => "0B0A", ID => "3100", type => "fnum", next => "0B0B"},
  "Fehler02_yr"		=> { EIdx => "0B0B", ID => "3100", type => "fnum", next => "0B0C"},
  "Fehler02_dev"	=> { EIdx => "0B0C", ID => "3100", type => "fnum", next => "0B0D"},
  "Fehler02_nr"		=> { EIdx => "0B0D", ID => "3100", type => "fnum", next => "0B0E"},
  "Fehler03_hh"		=> { EIdx => "0B0F", ID => "3100", type => "fnum", next => "0B10"},
  "Fehler03_d"   	=> { EIdx => "0B10", ID => "3100", type => "fnum", next => "0B11"},
  "Fehler03_m"   	=> { EIdx => "0B11", ID => "3100", type => "fnum", next => "0B12"},
  "Fehler03_yr"   	=> { EIdx => "0B12", ID => "3100", type => "fnum", next => "0B13"},
  "Fehler03_dev"   	=> { EIdx => "0B13", ID => "3100", type => "fnum", next => "0B14"},
  "Fehler03_nr"   	=> { EIdx => "0B14", ID => "3100", type => "fnum", next => "0B15"},
  "Fehler04_hh"		=> { EIdx => "0B16", ID => "3100", type => "fnum", next => "0B17"},
  "Fehler04_d"   	=> { EIdx => "0B17", ID => "3100", type => "fnum", next => "0B18"},
  "Fehler04_m"   	=> { EIdx => "0B18", ID => "3100", type => "fnum", next => "0B19"},
  "Fehler04_yr"   	=> { EIdx => "0B19", ID => "3100", type => "fnum", next => "0B1A"},
  "Fehler04_dev"   	=> { EIdx => "0B1A", ID => "3100", type => "fnum", next => "0B1B"},
  "Fehler04_nr"   	=> { EIdx => "0B1B", ID => "3100", type => "fnum", next => "0B1C"},
  "Fehler05_hh"		=> { EIdx => "0B1D", ID => "3100", type => "fnum", next => "0B1E"},
  "Fehler05_d"   	=> { EIdx => "0B1E", ID => "3100", type => "fnum", next => "0B1F"},
  "Fehler05_m"   	=> { EIdx => "0B1F", ID => "3100", type => "fnum", next => "0B20"},
  "Fehler05_yr"   	=> { EIdx => "0B20", ID => "3100", type => "fnum", next => "0B21"},
  "Fehler05_dev"  	=> { EIdx => "0B21", ID => "3100", type => "fnum", next => "0B22"},
  "Fehler05_nr"   	=> { EIdx => "0B22", ID => "3100", type => "fnum", next => "0B23"},
  "Fehler06_hh"		=> { EIdx => "0B24", ID => "3100", type => "fnum", next => "0B25"},
  "Fehler06_d"		=> { EIdx => "0B25", ID => "3100", type => "fnum", next => "0B26"},
  "Fehler06_m"		=> { EIdx => "0B26", ID => "3100", type => "fnum", next => "0B27"},
  "Fehler06_yr"   	=> { EIdx => "0B27", ID => "3100", type => "fnum", next => "0B28"},
  "Fehler06_dev"   	=> { EIdx => "0B28", ID => "3100", type => "fnum", next => "0B29"},
  "Fehler06_nr"   	=> { EIdx => "0B29", ID => "3100", type => "fnum", next => "0B2A"},
  "Fehler07_hh"		=> { EIdx => "0B2B", ID => "3100", type => "fnum", next => "0B2C"},
  "Fehler07_d"   	=> { EIdx => "0B2C", ID => "3100", type => "fnum", next => "0B2D"},
  "Fehler07_m"   	=> { EIdx => "0B2D", ID => "3100", type => "fnum", next => "0B2E"},
  "Fehler07_yr"   	=> { EIdx => "0B2E", ID => "3100", type => "fnum", next => "0B2F"},
  "Fehler07_dev"   	=> { EIdx => "0B2F", ID => "3100", type => "fnum", next => "0B30"},
  "Fehler07_nr"   	=> { EIdx => "0B30", ID => "3100", type => "fnum", next => "0B31"},
  "Fehler08_hh"		=> { EIdx => "0B32", ID => "3100", type => "fnum", next => "0B33"},
  "Fehler08_d"   	=> { EIdx => "0B33", ID => "3100", type => "fnum", next => "0B34"},
  "Fehler08_m"   	=> { EIdx => "0B34", ID => "3100", type => "fnum", next => "0B35"},
  "Fehler08_yr"   	=> { EIdx => "0B35", ID => "3100", type => "fnum", next => "0B36"},
  "Fehler08_dev"   	=> { EIdx => "0B36", ID => "3100", type => "fnum", next => "0B37"},
  "Fehler08_nr"   	=> { EIdx => "0B37", ID => "3100", type => "fnum", next => "0B38"},
  "Fehler09_hh"		=> { EIdx => "0B39", ID => "3100", type => "fnum", next => "0B3A"},
  "Fehler09_d"   	=> { EIdx => "0B3A", ID => "3100", type => "fnum", next => "0B3B"},
  "Fehler09_m"   	=> { EIdx => "0B3B", ID => "3100", type => "fnum", next => "0B3C"},
  "Fehler09_yr"   	=> { EIdx => "0B3C", ID => "3100", type => "fnum", next => "0B3D"},
  "Fehler09_dev"   	=> { EIdx => "0B3D", ID => "3100", type => "fnum", next => "0B3E"},
  "Fehler09_nr"   	=> { EIdx => "0B3E", ID => "3100", type => "fnum", next => "0B3F"},
  "Fehler10_hh"		=> { EIdx => "0B40", ID => "3100", type => "fnum", next => "0B41"},
  "Fehler10_d"   	=> { EIdx => "0B41", ID => "3100", type => "fnum", next => "0B42"},
  "Fehler10_m"   	=> { EIdx => "0B42", ID => "3100", type => "fnum", next => "0B43"},
  "Fehler10_yr"   	=> { EIdx => "0B43", ID => "3100", type => "fnum", next => "0B44"},
  "Fehler10_dev"   	=> { EIdx => "0B44", ID => "3100", type => "fnum", next => "0B45"},
  "Fehler10_nr"   	=> { EIdx => "0B45", ID => "3100", type => "fnum", next => "0B46"},
  "Fehler11_hh"		=> { EIdx => "0B47", ID => "3100", type => "fnum", next => "0B48"},
  "Fehler11_d"   	=> { EIdx => "0B48", ID => "3100", type => "fnum", next => "0B49"},
  "Fehler11_m"   	=> { EIdx => "0B49", ID => "3100", type => "fnum", next => "0B4A"},
  "Fehler11_yr"   	=> { EIdx => "0B4A", ID => "3100", type => "fnum", next => "0B4B"},
  "Fehler11_dev"   	=> { EIdx => "0B4B", ID => "3100", type => "fnum", next => "0B4C"},
  "Fehler11_nr"   	=> { EIdx => "0B4C", ID => "3100", type => "fnum", next => "0B4D"},
  "Fehler12_hh"		=> { EIdx => "0B4E", ID => "3100", type => "fnum", next => "0B4F"},
  "Fehler12_d"   	=> { EIdx => "0B4F", ID => "3100", type => "fnum", next => "0B50"},
  "Fehler12_m"   	=> { EIdx => "0B50", ID => "3100", type => "fnum", next => "0B51"},
  "Fehler12_yr"   	=> { EIdx => "0B51", ID => "3100", type => "fnum", next => "0B52"},
  "Fehler12_dev"   	=> { EIdx => "0B52", ID => "3100", type => "fnum", next => "0B53"},
  "Fehler12_nr"   	=> { EIdx => "0B53", ID => "3100", type => "fnum", next => "0B54"},
  "Fehler13_hh"		=> { EIdx => "0B55", ID => "3100", type => "fnum", next => "0B56"},
  "Fehler13_d"   	=> { EIdx => "0B56", ID => "3100", type => "fnum", next => "0B57"},
  "Fehler13_m"   	=> { EIdx => "0B57", ID => "3100", type => "fnum", next => "0B58"},
  "Fehler13_yr"   	=> { EIdx => "0B58", ID => "3100", type => "fnum", next => "0B59"},
  "Fehler13_dev"   	=> { EIdx => "0B59", ID => "3100", type => "fnum", next => "0B5A"},
  "Fehler13_nr"   	=> { EIdx => "0B5A", ID => "3100", type => "fnum", next => "0B5B"},
  "Fehler14_hh"		=> { EIdx => "0B5C", ID => "3100", type => "fnum", next => "0B5D"},
  "Fehler14_d"   	=> { EIdx => "0B5D", ID => "3100", type => "fnum", next => "0B5E"},
  "Fehler14_m"   	=> { EIdx => "0B5E", ID => "3100", type => "fnum", next => "0B5F"},
  "Fehler14_yr"   	=> { EIdx => "0B5F", ID => "3100", type => "fnum", next => "0B60"},
  "Fehler14_dev"   	=> { EIdx => "0B60", ID => "3100", type => "fnum", next => "0B61"},
  "Fehler14_nr"   	=> { EIdx => "0B61", ID => "3100", type => "fnum", next => "0B62"},
  "Fehler15_hh"		=> { EIdx => "0B63", ID => "3100", type => "fnum", next => "0B64"},
  "Fehler15_d"   	=> { EIdx => "0B64", ID => "3100", type => "fnum", next => "0B65"},
  "Fehler15_m"   	=> { EIdx => "0B65", ID => "3100", type => "fnum", next => "0B66"},
  "Fehler15_yr"   	=> { EIdx => "0B66", ID => "3100", type => "fnum", next => "0B67"},
  "Fehler15_dev"   	=> { EIdx => "0B67", ID => "3100", type => "fnum", next => "0B68"},
  "Fehler15_nr"   	=> { EIdx => "0B68", ID => "3100", type => "fnum", next => "0B69"},
  "Fehler16_hh"		=> { EIdx => "0B6A", ID => "3100", type => "fnum", next => "0B6B"},
  "Fehler16_d"   	=> { EIdx => "0B6B", ID => "3100", type => "fnum", next => "0B6C"},
  "Fehler16_m"   	=> { EIdx => "0B6C", ID => "3100", type => "fnum", next => "0B6D"},
  "Fehler16_yr"   	=> { EIdx => "0B6D", ID => "3100", type => "fnum", next => "0B6E"},
  "Fehler16_dev"   	=> { EIdx => "0B6E", ID => "3100", type => "fnum", next => "0B6F"},
  "Fehler16_nr"   	=> { EIdx => "0B6F", ID => "3100", type => "fnum", next => "0B70"},
  "Fehler17_hh"		=> { EIdx => "0B71", ID => "3100", type => "fnum", next => "0B72"},
  "Fehler17_d"   	=> { EIdx => "0B72", ID => "3100", type => "fnum", next => "0B73"},
  "Fehler17_m"   	=> { EIdx => "0B73", ID => "3100", type => "fnum", next => "0B74"},
  "Fehler17_yr"   	=> { EIdx => "0B74", ID => "3100", type => "fnum", next => "0B75"},
  "Fehler17_dev"   	=> { EIdx => "0B75", ID => "3100", type => "fnum", next => "0B76"},
  "Fehler17_nr"   	=> { EIdx => "0B76", ID => "3100", type => "fnum", next => "0B77"},
  "Fehler18_hh"		=> { EIdx => "0B78", ID => "3100", type => "fnum", next => "0B79"},
  "Fehler18_d"   	=> { EIdx => "0B79", ID => "3100", type => "fnum", next => "0B7A"},
  "Fehler18_m"   	=> { EIdx => "0B7A", ID => "3100", type => "fnum", next => "0B7B"},
  "Fehler18_yr"   	=> { EIdx => "0B7B", ID => "3100", type => "fnum", next => "0B7C"},
  "Fehler18_dev"   	=> { EIdx => "0B7C", ID => "3100", type => "fnum", next => "0B7D"},
  "Fehler18_nr"   	=> { EIdx => "0B7D", ID => "3100", type => "fnum", next => "0B7E"},
  "Fehler19_hh"		=> { EIdx => "0B7F", ID => "3100", type => "fnum", next => "0B80"},
  "Fehler19_d"   	=> { EIdx => "0B80", ID => "3100", type => "fnum", next => "0B81"},
  "Fehler19_m"   	=> { EIdx => "0B81", ID => "3100", type => "fnum", next => "0B82"},
  "Fehler19_yr"   	=> { EIdx => "0B82", ID => "3100", type => "fnum", next => "0B83"},
  "Fehler19_dev"   	=> { EIdx => "0B83", ID => "3100", type => "fnum", next => "0B84"},
  "Fehler19_nr"   	=> { EIdx => "0B84", ID => "3100", type => "fnum", next => "0B85"},
  "Fehler20_hh"		=> { EIdx => "0B86", ID => "3100", type => "fnum", next => "0B87"},
  "Fehler20_d"   	=> { EIdx => "0B87", ID => "3100", type => "fnum", next => "0B88"},
  "Fehler20_m"   	=> { EIdx => "0B88", ID => "3100", type => "fnum", next => "0B89"},
  "Fehler20_yr"   	=> { EIdx => "0B89", ID => "3100", type => "fnum", next => "0B8A"},
  "Fehler20_dev"	=> { EIdx => "0B8A", ID => "3100", type => "fnum", next => "0B8B"},
  "Fehler20_nr"   	=> { EIdx => "0B8B", ID => "3100", type => "fnum", next => ""},
  "Fehler02_mm"		=> { EIdx => "0B07", ID => "3100", type => "fnum", next => "0B08"},
  "Fehler03_mm"		=> { EIdx => "0B0E", ID => "3100", type => "fnum", next => "0B0F"},
  "Fehler04_mm"		=> { EIdx => "0B15", ID => "3100", type => "fnum", next => "0B16"},
  "Fehler05_mm"		=> { EIdx => "0B1C", ID => "3100", type => "fnum", next => "0B1D"},
  "Fehler06_mm"		=> { EIdx => "0B23", ID => "3100", type => "fnum", next => "0B24"},
  "Fehler07_mm"		=> { EIdx => "0B2A", ID => "3100", type => "fnum", next => "0B2B"},
  "Fehler08_mm"		=> { EIdx => "0B31", ID => "3100", type => "fnum", next => "0B32"},
  "Fehler09_mm"		=> { EIdx => "0B38", ID => "3100", type => "fnum", next => "0B39"},
  "Fehler10_mm"		=> { EIdx => "0B3F", ID => "3100", type => "fnum", next => "0B40"},
  "Fehler11_mm"		=> { EIdx => "0B46", ID => "3100", type => "fnum", next => "0B47"},
  "Fehler12_mm"		=> { EIdx => "0B4D", ID => "3100", type => "fnum", next => "0B4E"},
  "Fehler13_mm"		=> { EIdx => "0B54", ID => "3100", type => "fnum", next => "0B55"},
  "Fehler14_mm"		=> { EIdx => "0B5B", ID => "3100", type => "fnum", next => "0B5C"},
  "Fehler15_mm"		=> { EIdx => "0B62", ID => "3100", type => "fnum", next => "0B63"},
  "Fehler16_mm"		=> { EIdx => "0B69", ID => "3100", type => "fnum", next => "0B6A"},
  "Fehler17_mm"		=> { EIdx => "0B70", ID => "3100", type => "fnum", next => "0B71"}, 
  "Fehler18_mm"		=> { EIdx => "0B77", ID => "3100", type => "fnum", next => "0B78"},
  "Fehler19_mm"		=> { EIdx => "0B7E", ID => "3100", type => "fnum", next => "0B7F"},
  "Fehler20_mm"		=> { EIdx => "0B85", ID => "3100", type => "fnum", next => "0B86"},
 );


my %WPL15_gets= (
#Fehlerliste
  "Sammelfehler"	=> { EIdx => "0001", ID => "3100", type => "", next => ""},
  "Fehlerliste"		=> { EIdx => "0B00", ID => "3100", type => "fnum", next => "0B01"}, #Fehler01_mm
  
#Anlage
	"SE_Firmware"			=> {EIdx => "0199", ID => "6101", type => "", next => ""},
	"SE_Firmware-Id" 		=> {EIdx => "019A", ID => "6101", type => "", next => ""},
	"Betriebsart"			=> {EIdx => "0112", ID => "6101", type => "", next => ""},	
#Heizkreis	
	"T_Aussentemperatur"	=> {EIdx => "000C", ID => "3100", type => "dec", next => ""},
	"T_Vorlauf_IST"			=> {EIdx => "000D", ID => "3100", type => "dec", next => ""},
	#"T_Vorlauf_IST"			=> {EIdx => "FDF5", ID => "E100", type => "dec", next => ""}, # automatisch
	"T_Ruecklauf_IST"		=> {EIdx => "0016", ID => "3100", type => "dec", next => ""},
	#"T_Ruecklauf_IST"	=> {EIdx => "FDF4", ID => "E100", type => "dec", next => ""}, 	  # automatisch
	"T_Heizkreis_Ist"		=> {EIdx => "02CA", ID => "3100", type => "dec", next => ""},
	"T_Heizkreis_Soll"		=> {EIdx => "01D7", ID => "3100", type => "dec", next => ""},
	"T_Raumsoll_Tag"		=> {EIdx => "0005", ID => "6101", type => "dec", next => ""},
	"T_Raumsoll_Nacht"		=> {EIdx => "0008", ID => "6101", type => "dec", next => ""},
	"T_Ruecklauf_max_HK1"	=> {EIdx => "0028", ID => "3100", type => "dec", next => ""}, 				
	"T_Vorlaufmax_HK1"		=> {EIdx => "01E8", ID => "3100", type => "dec", next => ""}, 
	"Verzoegerung_DHC_HK1"	=> {EIdx => "05A0", ID => "3100", type => "num", next => ""}, 				
	"Max_DHC_Stufen_HK1"	=> {EIdx => "059F", ID => "3100", type => "num", next => ""}, 	
	"Anlagendruck"			=> {EIdx => "064C", ID => "9100", type => "cent", next => ""},
#Warmwasser
	"T_Warmwasser_IST"		=> {EIdx => "000E", ID => "3100", type => "dec", next => ""}, # T_Warmwasser_IST=T_WW_Fuehler+T_WW_Korrektur
	"T_WW_Korrektur"		=> {EIdx => "0263", ID => "3100", type => "dec", next => ""}, 
	"T_WW_Soll_Tag"			=> {EIdx => "0013", ID => "3100", type => "dec", next => ""},
	"T_WW_Soll_Nacht"		=> {EIdx => "0A06", ID => "3100", type => "dec", next => ""},
	"T_Vorlaufmax_WW"		=> {EIdx => "0181", ID => "3100", type => "dec", next => ""}, 		
	"Max_DHC_Stufen_WW"		=> {EIdx => "058A", ID => "3100", type => "num", next => ""}, 				
	"Verzoegerung_DHC_WW"	=> {EIdx => "0588", ID => "3100", type => "num", next => ""}, 
	"T_WW_Hysterese"		=> {EIdx => "0022", ID => "3100", type => "dec", next => ""}, 
	"WW_ECO"				=> {EIdx => "027E", ID => "3100", type => "bool", next => ""}, 
	"Antilegionellen"		=> {EIdx => "0101", ID => "3100", type => "bool", next => ""},
#Wärmepumpe
	"T_Vorlauf_NHZ"			=> {EIdx => "0A31", ID => "3100", type => "dec", next => ""},	
	"Volumenstrom_aktuell"	=> {EIdx => "0A33", ID => "3100", type => "dec5", next => ""}, # runden wir auf 0,5 l/min Schritte, sonst erzeugt es zu viele Daten
	"Volumenstrom_max"		=> {EIdx => "0A34", ID => "3100", type => "dec5", next => ""},       # Das ist der max Volumenstrom zum Abtauen
	"rMindestlaufzeit_WE"	=> {EIdx => "0914", ID => "3100", type => "dec", next => ""}, 
	"rStillstandszeit"		=> {EIdx => "FDB1", ID => "3100", type => "l_endian", next => ""}, 	
	"WP_Leistung"			=> {EIdx => "002C", ID => "9100", type => "l_endian", next => ""},  # Leistung WP 0-100%	
   	"WP_Leistung_WW"		=> {EIdx => "13F2", ID => "9100", type => "num", next => ""}, 
	"WP_Status"				=> {EIdx => "FDAD", ID => "3100", type => "", next => ""}, 			# Verdichter,Abtauen   Fehler und Betrieb unklar
	"WP_Sammelstatus_Relais"=> {EIdx => "0A20", ID => "3100", type => "", next => ""},			
								# Heizkreispumpe, Mischerpumpe, WW-Ventil, 
								# Pufferladepumpe, DHC1, DHC2 Mischer AUf, Mischer zu
	"EVUAktiv"				=> {EIdx => "0074", ID => "9100", type => "bool", next => ""},
	"EVU_Sperre"			=> {EIdx => "01D3", ID => "3100", type => "bool", next => ""}, 
	"WP_EVU_Freigabe"		=> {EIdx => "FDAB", ID => "9100", type => "l_endian", next => ""},
	"WP_Status1"			=> {EIdx => "0A30", ID => "3100", type => "", next => ""},          #818
    "WP_Status2"			=> {EIdx => "0A2B", ID => "3100", type => "", next => ""},          #818
#Sommerbertieb SommerBetrieb SB_*
	"SB_SOMMERBETRIEB"		=> {EIdx => "FDB4", ID => "3100", type => "bool", next => ""},
	"SB_GEBAEUDEART"		=> {EIdx => "FDB3", ID => "3100", type => "l_endian", next => ""}, 
	"SB_AUSSENTEMP"			=> {EIdx => "01BF", ID => "3100", type => "dec", next => ""}, 			
#Regelung r*
	"rI-Anteil"				=> {EIdx => "029E", ID => "3100", type => "num", next => ""},
	"rP-Anteil"				=> {EIdx => "029F", ID => "3100", type => "dec", next => ""},
	"rVL-Anteil"			=> {EIdx => "059D", ID => "3100", type => "dec", next => ""},
	"rHeizkurve"			=> {EIdx => "010E", ID => "6101", type => "cent", next => ""},
	"rFestwert"				=> {EIdx => "01C0", ID => "3100", type => "bool", next => ""}, 
	"rAUSLEGUNG_WE_LEISTUNG_TA"=> {EIdx => "0919", ID => "9100", type => "dec", next => ""},	
	"T_AUSSEN_FROSTTEMP"	=> {EIdx => "0A00", ID => "3100", type => "dec", next => ""}, 			
	"T_Bivalenz_WW"			=> {EIdx => "01AD", ID => "3100", type => "dec", next => ""},
	"T_Bivalenz_HZG"		=> {EIdx => "01AC", ID => "3100", type => "dec", next => ""},
#Pumpensteuerung PUmpe  PU_
	"PU_HK_Soll"		 	=> {EIdx => "070A", ID => "6101", type => "num", next => ""},
	"PU_PUMPENZYKLEN"		=> {EIdx => "FDB2", ID => "3100", type => "bool", next => ""},
	"PU_DAUERLAUF_PUP"		=> {EIdx => "FDAF", ID => "3100", type => "bool", next => ""}, 
# Datum und Uhrzeit TiMe TM_*
#	"TM_FERIENANFANG_TAG"	=> {EIdx => "011B", ID => "9100", type => "l_endian", next => "011C"},
#	"TM_FERIENANFANG_MONAT"	=> {EIdx => "011C", ID => "9100", type => "l_endian", next => "011D"},
#	"TM_FERIENANFANG_JAHR"	=> {EIdx => "011D", ID => "9100", type => "year", next => ""},

#	"TM_FERIENENDE_TAG"		=> {EIdx => "011E", ID => "9100", type => "l_endian", next => "011F"},
#	"TM_FERIENENDE_MONAT"	=> {EIdx => "011F", ID => "9100", type => "l_endian", next => "0120"},
#	"TM_FERIENENDE_JAHR"	=> {EIdx => "0120", ID => "9100", type => "year", next => ""},

#	"TM_Wochentag"			=> {EIdx => "0121", ID => "9100", type => "l_endian", next => ""},

#	"TM_Tag"				=> {EIdx => "0122", ID => "9100", type => "l_endian", next => "0123"},
#	"TM_Monat"				=> {EIdx => "0123", ID => "9100", type => "l_endian", next => "0124"},
#	"TM_Jahr"				=> {EIdx => "0124", ID => "9100", type => "year", next => ""},

#	"TM_Stunde"				=> {EIdx => "0125", ID => "9100", type => "l_endian", next => ""},
#	"TM_Minute"				=> {EIdx => "0126", ID => "9100", type => "l_endian", next => ""},
#	"TM_Sekunde"			=> {EIdx => "0127", ID => "9100", type => "l_endian", next => ""},
#	"TM_Uhrzeit"			=> {EIdx => "0009", ID => "9100", type => "time", next => ""},
#	"HeizProg_MO"			=> {EIdx => "1410", ID => "9100", type => "timespan", next => "1411"},
#	"HeizProg_MO_SCHALT_2"	=> {EIdx => "1411", ID => "9100", type => "timespan", next => "1412"},
#	"HeizProg_MO_SCHALT_3"	=> {EIdx => "1412", ID => "9100", type => "timespan", next => "1420"},
#	"HeizProg_DI"			=> {EIdx => "1420", ID => "9100", type => "timespan", next => "1421"},
#	"HeizProg_DI_SCHALT_2"	=> {EIdx => "1421", ID => "9100", type => "timespan", next => "1422"},
#	"HeizProg_DI_SCHALT_3"	=> {EIdx => "1422", ID => "9100", type => "timespan", next => "1430"},
#	"HeizProg_MI"			=> {EIdx => "1430", ID => "9100", type => "timespan", next => "1431"},
#	"HeizProg_MI_SCHALT_2"	=> {EIdx => "1431", ID => "9100", type => "timespan", next => "1432"},
#	"HeizProg_MI_SCHALT_3"	=> {EIdx => "1432", ID => "9100", type => "timespan", next => "1440"},
#	"HeizProg_DO"			=> {EIdx => "1440", ID => "9100", type => "timespan", next => "1441"},
#	"HeizProg_DO_SCHALT_2"	=> {EIdx => "1441", ID => "9100", type => "timespan", next => "1442"},
#	"HeizProg_DO_SCHALT_3"	=> {EIdx => "1442", ID => "9100", type => "timespan", next => "1450"},
#	"HeizProg_FR"			=> {EIdx => "1450", ID => "9100", type => "timespan", next => "1451"},
#	"HeizProg_FR_SCHALT_2"	=> {EIdx => "1451", ID => "9100", type => "timespan", next => "1452"},
#	"HeizProg_FR_SCHALT_3"	=> {EIdx => "1452", ID => "9100", type => "timespan", next => "1460"},
#	"HeizProg_SA"			=> {EIdx => "1460", ID => "9100", type => "timespan", next => "1461"},
#	"HeizProg_SA_SCHALT_2"	=> {EIdx => "1461", ID => "9100", type => "timespan", next => "1462"},
#	"HeizProg_SA_SCHALT_3"	=> {EIdx => "1462", ID => "9100", type => "timespan", next => "1470"},
#	"HeizProg_SO"			=> {EIdx => "1470", ID => "9100", type => "timespan", next => "1471"},
#	"HeizProg_SO_SCHALT_2"	=> {EIdx => "1471", ID => "9100", type => "timespan", next => "1472"},
#	"HeizProg_SO_SCHALT_3"	=> {EIdx => "1472", ID => "9100", type => "timespan", next => ""},
##################### Heizkreis 2 nicht vorhanden bei mir ##############################
#	"X_HEIZPROG_2_MO"			=> {EIdx => "1510", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_MO_SCHALT_2"	=> {EIdx => "1511", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_MO_SCHALT_3"	=> {EIdx => "1512", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DI"			=> {EIdx => "1520", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DI_SCHALT_2"	=> {EIdx => "1521", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DI_SCHALT_3"	=> {EIdx => "1522", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_MI"			=> {EIdx => "1530", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_MI_SCHALT_2"	=> {EIdx => "1531", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_MI_SCHALT_3"	=> {EIdx => "1532", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DO"			=> {EIdx => "1540", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DO_SCHALT_2"	=> {EIdx => "1541", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_DO_SCHALT_3"	=> {EIdx => "1542", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_FR"			=> {EIdx => "1550", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_FR_SCHALT_2"	=> {EIdx => "1551", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_FR_SCHALT_3"	=> {EIdx => "1552", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SA"			=> {EIdx => "1560", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SA_SCHALT_2"	=> {EIdx => "1561", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SA_SCHALT_3"	=> {EIdx => "1562", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SO"			=> {EIdx => "1570", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SO_SCHALT_2"	=> {EIdx => "1571", ID => "9100", type => "timespan", next => ""},
#	"X_HEIZPROG_2_SO_SCHALT_3"	=> {EIdx => "1572", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MO"			=> {EIdx => "1710", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MO_SCHALT_2"	=> {EIdx => "1711", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MO_SCHALT_3"	=> {EIdx => "1712", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DI"			=> {EIdx => "1720", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DI_SCHALT_2"	=> {EIdx => "1721", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DI_SCHALT_3"	=> {EIdx => "1722", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MI"			=> {EIdx => "1730", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MI_SCHALT_2"	=> {EIdx => "1731", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_MI_SCHALT_3"	=> {EIdx => "1732", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DO"			=> {EIdx => "1740", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DO_SCHALT_2"	=> {EIdx => "1741", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_DO_SCHALT_3"	=> {EIdx => "1742", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_FR"			=> {EIdx => "1750", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_FR_SCHALT_2"	=> {EIdx => "1751", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_FR_SCHALT_3"	=> {EIdx => "1752", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SA"			=> {EIdx => "1760", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SA_SCHALT_2"	=> {EIdx => "1761", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SA_SCHALT_3"	=> {EIdx => "1762", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SO"			=> {EIdx => "1770", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SO_SCHALT_2"	=> {EIdx => "1771", ID => "9100", type => "timespan", next => ""},
#	"WW_PROG_SO_SCHALT_3"	=> {EIdx => "1772", ID => "9100", type => "timespan", next => ""},
#Verbrauch	
	"Laufzeit_DHC1"				=> {EIdx => "0259", ID => "3100", type => "num", next => ""},
	"Laufzeit_DHC2"				=> {EIdx => "025A", ID => "3100", type => "num", next => ""},
	"Laufzeit_Verdichter_HK"	=> {EIdx => "07FC", ID => "3100", type => "num", next => ""},
	"Laufzeit_Verdichter_WW"	=> {EIdx => "0802", ID => "3100", type => "num", next => ""},
	"Waermeertrag"				=> {EIdx => "0931", ID => "3100", type => "Wnum", next => "0930"}
	);
	
my %Double_gets=(
    "Waermeertrag_HK_Summe_kWh"	=> {EIdx => "0930", ID => "3100", type => "Wnum", next => "091A"},
	
	"EL_Leistung_Tag_WW_Wh"		=> {EIdx => "091A", ID => "3100", type => "Wnum", next => "091B"},
	"EL_Leistung_Tag_WW"		=> {EIdx => "091B", ID => "3100", type => "Wnum", next => "092A"},
	"Waermeertrag_Tag_WW_Wh"	=> {EIdx => "092A", ID => "3100", type => "Wnum", next => "092B"},
	"Waermeertrag_Tag_WW"		=> {EIdx => "092B", ID => "3100", type => "Wnum", next => "092C"},
	"Waermeertrag_WW_Summe_kWh"	=> {EIdx => "092C", ID => "3100", type => "Wnum", next => "092D"},
	"Waermeertrag_WW_Summe"		=> {EIdx => "092D", ID => "3100", type => "Wnum", next => "092E"},
	"Waermeertrag_Tag_HK_Wh"	=> {EIdx => "092E", ID => "3100", type => "Wnum", next => "092F"},
	"Waermeertrag_Tag_HK"		=> {EIdx => "092F", ID => "3100", type => "Wnum", next => "0922"},
	
	"X_WAERMEERTRAG_2WE_WW_TAG_WH" 		=> {EIdx => "0922", ID => "6101", type => "num", next => "0926"},
	"X_WAERMEERTRAG_2WE_HEIZ_TAG_WH"	=> {EIdx => "0926", ID => "6101", type => "num", next => "0928"},
	"X_WAERMEERTRAG_2WE_HEIZ_SUM_KWH"	=> {EIdx => "0928", ID => "6101", type => "num", next => ""}


1 Like

I just added the information, how to send individual CAN-messages to the bus from home-assistant in the readme on my git

Also added the information to change the comfort-temperature and eco-temperature for water heating via homeassistant

1 Like

how do i have to change the address?
the can-id is easy. but what do i have to do here?

 
#CAN read address for heat pump manager  
  - id: PumpCANread_id
    type: int[2]
    initial_value: '{0x31, 0x00}'
    restore_value: no
#CAN write adress for heat pump manager
  - id: PumpCANwrite_id
    type: int[2]
    initial_value: '{0x30, 0x00}'
    restore_value: no

#CAN_ID of FEK
  - id: FekCANread_id
    type: int[2]
    initial_value: '{0xc0, 0x01}'
    restore_value: no
        
#CAN ID of esp-home device is set to 680 here, change this if you have to change the CAN-id
#Don't forget to also change the CAN-ID below
  - id: internalResponse_id
    type: int[2]
    initial_value: '{0xd2, 0x00}'
    restore_value: no
################################################################

What is the CAN-id of the heat pump manager?

Hi,

this is not the CAN-id, it is the software version.
Did you ever try to log the events of your ESPHome Device? Maybe you don’t have to change the CAN-id at all.
Otherwise you should at least see something in the logs showing up, that can help you to find the correct CAN-id.
So your first step should be, to connect the ESPhome device to the CAN-bus and log the events.

edit: opened a separate thread for the CAN hardware stuff here: PCB design: ESP32 to CAN supporting ESPHome / Matter

hey there,

big thanks to roberreiter for sharing the project!

I never did anything with ESPHome before I found this thread and I have to admin, that I am amazed, with how few efforts I achieved good results (hardware engineer here, so I am used to stuff not working :wink: ).

Btw. my heatpump is a Tecalor (==Stiebel Eltron) TTF 07 cool.

Some findings about the hardware setup, I like to share:

Before creating the hardware protoype I analyzed the heatpumps CAN bus with a oscilloscope. As expexted it is a commonly used 5V CAN:

The MCP2515 eval kit everyone apparently everyone here is using, comes with a MCP2515 (Can Controller, 3V3 and 5V capable) and the transceiver TJA1050 IC. The TJA’s datasheet states that it requires min. 5V to work (someone here wrote that it worked, which confuses me)

Anyway, I replaced the TJA1050 with a SN65HVD230, which is a 3V3 compatible CAN transceiver. Now I could put everything together based on a common 3V3 power supply. Then I don’t have to worry about the 5V MISO line between MCP2515 and the ESP (yes, a current-limiting resistor also mitigates the risks of burning the ESP).

This is the output of the modul, NOT attached to the heatpump.

As the CAN bus is capable of being used simultaneously by 3V3 and 5V bus participants, this works very good. Unfortunately, I forgot to take some pictures of the mixed voltage bus.

I started to create a ‘general’ PCB for ESP to CAN bus, because in the long run, I don’t want to have some prototype with jumper wires attached to the expensive heatpump :slight_smile:

As JLCPCB is my favorite PCB service provider for simple designs, I would have at least 3 spare PCBs. Is anybody interested? Did not calculate the exact costs, yet, but I estimate it around 20-30€ / PCB including all parts and assembly.
Also, it uses the 18V CAN bus power and does not require USB for power supply.

Finishing this long post:
Again, @roberreiter: thank you for the great project, I hope I can contribute by hardware (like that more than programming :wink: )

Could you maybe also share your automations on your github? (already left you a ‘star’)

~Martin

one thing I like to add about the ground connection, because earlier I read about it in this thread and want to strongly contradict:

If two chips communicate with each other by wires, they need a common ground. Therefore the heatpump, FEK2 and the ESP sensor need a common ground. It MAY work without, but thats more a coincidence due to the CANs differential physical layer.

Many problems in PCB design arise due to faulty or unsufficient ground connections. ALWAYS care for a good ground and power supply :slight_smile: