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

Tried a few more things, including requesting it from CAN_ID 500, 514 or 601. I only get data back from the latter, but it’s the same as from 180 above and seems ‘out of bounds’. Guess that 180 is the source anyway.

For those that get energy usage details, are those available in the FEK or heatpump unit menu as well for you as my WPC13 is from 2007 and might just not have the option available?

Hello Hasselhoff,

the energy usage details are in the heatpump unit.
If you don’t see the power usage in the module of the heatpump, then maybe you don’t have this data.
But you can try 0x601, I found this in some code I have seen from another integration.
601 would be C1 01 for the read packets and C0 01 for the write packets

Hi,
I just made some changes in the code, that should make it easier to change the CAN-IDs of the heat pump and - if needed - also for the can-bus controller.
I put the code in a github repository this time.
https://github.com/roberreiter/StiebelEltron-heatpump-over-esphome-can-bus

I didn’t achieve to push every reference to the can_id 680 into global variables, but at least the lambdas are now declared by the following global variables in one single position.

#CAN read address for heat pump manager  
  - id: PumpCANread_id
#CAN write adress for heat pump manager
  - id: PumpCANwrite_id
#CAN_ID of FEK
  - id: FekCANread_id
        
#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

You can send me some feedback on the code if changes are required.

2 Likes

Dear all,

I only managed to get basic information (energy consumption) out of my LWZ304, but for now that satisfies my needs.
But: as long as it works, it doesn’t have enough functions…

I see that Roberreiter and others started on modifying operation parameters. Did anyone of you tried to influence ventilation parameters?
That would really be an improvement!
E.g. reduced air exchange when indoor humidity is low (and abs. outdoor humidity, too) or vise versa… Or active cooling during summer night. Or activation linked to air quality. or…

First step should be, to get ventilation parameters out of LWZ…

Any ideas on how to get this working?

BR Jens

Hi Jens,

i managed to set the ventilation steps on my THZ504 with:

select:
  - platform: template
    name: "Lüftungstufe Tag"
    id: lueftungsstufe_tag
    optimistic: true
    options:
      - "1"
      - "2"
      - "3"
    set_action:
      then:
          - delay: 500ms
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_tag).state) == "1";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6c,0x00,0x01 ]
                    can_id: 0x6a2
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_tag).state) == "2";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6c,0x00,0x02 ]
                    can_id: 0x6a2
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_tag).state) == "3";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6c,0x00,0x03 ]
                    can_id: 0x6a2
          - delay: 500ms
          - canbus.send: 
              data: [ 0x31, 0x00, 0xfa,0x05,0x6c,0x00,0x00 ]
              can_id: 0x6a2

  - platform: template
    name: "Lüftungstufe Nacht"
    id: lueftungsstufe_nacht
    optimistic: true
    options:
      - "1"
      - "2"
      - "3"
    set_action:
      then:
          - delay: 500ms
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_nacht).state) == "1";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6d,0x00,0x01 ]
                    can_id: 0x6a2
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_nacht).state) == "2";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6d,0x00,0x02 ]
                    can_id: 0x6a2
          - if:
              condition:
                - lambda: |-
                    return (id(lueftungsstufe_nacht).state) == "3";
              then:
                - canbus.send: 
                    data: [ 0x30, 0x00, 0xfa,0x05,0x6d,0x00,0x03 ]
                    can_id: 0x6a2
          - delay: 500ms
          - canbus.send: 
              data: [ 0x31, 0x00, 0xfa,0x05,0x6d,0x00,0x00 ]
              can_id: 0x6a2
2 Likes

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