Yet another Stiebel Eltron Heating Pump newbee entusiast with a WPL 18 E and esphome

Hello,

I am new in the wonderfull world of German heating pump.
As a former system engineer for Nixdorf/Siemens in the last century, I am able to understand some German technical words.

I just bought a house that had a heat pump installed in 2019.
this is a WPL 18 E
there is a WPM 2 (where I Connected X15 H and L to the mcp2515) (do I need a ground or + or - ? ) the ESP is running on a battery until the solution works.
there is a SBP200E and a SBB302WPL and outside there is the rest.
No schematic, no explanations, just “demerden sie sich”

INFO ESPHome 2025.5.2
INFO Reading configuration /config/esphome/heatpump.yaml...
INFO Detected timezone 'Europe/Paris'
WARNING GPIO12 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.1.121 using esphome API
INFO Successfully connected to heatpump @ 192.168.1.121 in 0.139s
INFO Successful handshake with heatpump @ 192.168.1.121 in 0.099s
[18:22:51][I][app:115]: ESPHome version 2025.5.2 compiled on Jun 18 2025, 18:55:23
[18:22:51][C][wifi:600]: WiFi:
[18:22:51][C][wifi:428]:   Local MAC: FF:FF:FF:FF:76:08
[18:22:51][C][wifi:433]:   SSID: 'XXXXX'[redacted]
[18:22:51][C][wifi:436]:   IP Address: 192.168.1.121
[18:22:51][C][wifi:440]:   BSSID: FF:FF:FF:FF:2C:30[redacted]
[18:22:51][C][wifi:441]:   Hostname: 'heatpump'
[18:22:51][C][wifi:443]:   Signal strength: -77 dB ▂▄▆█
[18:22:51][C][wifi:447]:   Channel: 2
[18:22:51][C][wifi:448]:   Subnet: 255.255.255.0
[18:22:51][C][wifi:449]:   Gateway: 192.168.1.1
[18:22:51][C][wifi:450]:   DNS1: 192.168.1.2
[18:22:51][C][wifi:451]:   DNS2: 0.0.0.0
[18:22:51][C][logger:224]: Logger:
[18:22:51][C][logger:225]:   Max Level: DEBUG
[18:22:51][C][logger:226]:   Initial Level: DEBUG
[18:22:51][C][logger:228]:   Log Baud Rate: 115200
[18:22:51][C][logger:229]:   Hardware UART: UART0
[18:22:51][C][logger:233]:   Task Log Buffer Size: 768
[18:22:51][C][spi:068]: SPI bus:
[18:22:51][C][spi:069]:   CLK Pin: GPIO14
[18:22:51][C][spi:070]:   SDI Pin: GPIO12
[18:22:51][C][spi:071]:   SDO Pin: GPIO13
[18:22:51][C][spi:076]:   Using HW SPI: SPI
[18:22:51][C][template.sensor:022]: Template Sensor 'Température extérieure'
[18:22:51][C][template.sensor:022]:   Device Class: 'temperature'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: '°C'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 1
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:thermometer-lines'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Température de l'eau'
[18:22:51][C][template.sensor:022]:   Device Class: 'temperature'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: '°C'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 1
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:thermometer-lines'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Flux de chauffe'
[18:22:51][C][template.sensor:022]:   Device Class: 'temperature'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: '°C'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 1
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:waves-arrow-right'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Flux de retour'
[18:22:51][C][template.sensor:022]:   Device Class: 'temperature'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: '°C'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 1
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:waves-arrow-left'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Objectif de flux de retour'
[18:22:51][C][template.sensor:022]:   Device Class: 'temperature'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: '°C'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 1
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:waves-arrow-up'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Conso électrique pour ECS Aujourd'hui'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Conso électrique pour chauffage Aujourd'hui'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Conso électrique pour ECS Totale'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'Conso électrique pour Chauffage Totale'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC Chauffage Aujourd'hui'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC Chauffage Total'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC ECS Aujourd'hui'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC ECS Total'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC Conso ECS total'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.sensor:022]: Template Sensor 'PAC Conso Chauffage total'
[18:22:51][C][template.sensor:022]:   Device Class: 'energy'
[18:22:51][C][template.sensor:022]:   State Class: 'measurement'
[18:22:51][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[18:22:51][C][template.sensor:022]:   Accuracy Decimals: 3
[18:22:51][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[18:22:51][C][template.sensor:023]:   Update Interval: 60.0s
[18:22:51][C][template.binary_sensor:028]: Template Binary Sensor 'EVU Lock'
[18:22:51][C][canbus:021]: config standard id=0x2a8
[18:22:52][C][homeassistant.time:010]: Home Assistant Time:
[18:22:52][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[18:22:52][C][captive_portal:089]: Captive Portal:
[18:22:52][C][web_server:285]: Web Server:
[18:22:52][C][web_server:286]:   Address: heatpump.domain.loc:80
[18:22:52][C][mdns:120]: mDNS:
[18:22:52][C][mdns:121]:   Hostname: heatpump
[18:22:52][C][esphome.ota:073]: Over-The-Air updates:
[18:22:52][C][esphome.ota:074]:   Address: heatpump.domain.loc:3232
[18:22:52][C][esphome.ota:075]:   Version: 2
[18:22:52][C][esphome.ota:078]:   Password configured
[18:22:52][C][safe_mode:018]: Safe Mode:
[18:22:52][C][safe_mode:020]:   Boot considered successful after 60 seconds
[18:22:52][C][safe_mode:021]:   Invoke after 10 boot attempts
[18:22:52][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[18:22:52][C][api:170]: API Server:
[18:22:52][C][api:171]:   Address: heatpump.domain.loc:6053
[18:22:52][C][api:173]:   Using noise encryption: YES
[18:23:00][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:00][W][canbus:053]: send to standard id=0x700 failed!
[18:23:01][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:01][W][canbus:053]: send to standard id=0x700 failed!
[18:23:01][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:01][W][canbus:053]: send to standard id=0x700 failed!
[18:23:01][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:01][W][canbus:053]: send to standard id=0x700 failed!
[18:23:01][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:01][W][canbus:053]: send to standard id=0x700 failed!
[18:23:02][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:02][W][canbus:053]: send to standard id=0x700 failed!
[18:23:02][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:02][W][canbus:053]: send to standard id=0x700 failed!
[18:23:02][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:02][W][canbus:053]: send to standard id=0x700 failed!
[18:23:02][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:02][W][canbus:053]: send to standard id=0x700 failed!
[18:23:02][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:02][W][canbus:053]: send to standard id=0x700 failed!
[18:23:03][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:03][W][canbus:053]: send to standard id=0x700 failed!
[18:23:03][D][canbus:035]: send standard id=0x700 rtr=FALSE size=7
[18:23:03][W][canbus:053]: send to standard id=0x700 failed!

I even don’t know if my HW is running
and how to get the addresses of my config…
Up to now, I just powered down and up my Heating Pump after plugging the MCP2515.on the can-bus

help !!!

Well.after one week or testings, I could get something that seem to start working.

an esp32 and a MCP2515 spi canbus adapter.

while sniffing the bus I could get some addresses:

8      Received    19:36:37    98    Data frame    Standard frame    0x00000180    7             a0    79    0c    01    19    00    00
7      Received    19:36:37    81    Data frame    Standard frame    0x00000480    7             a0    00    5f    04    00    00    00
11     Received    19:36:40    92    Data frame    Standard frame    0x00000500    7             92    00    fa    01    99    00    43
104    Received    19:37:52    110   Data frame    Standard frame    0x00000601    7             66    01    fe    01    00    00    00
105    Received    19:37:52    126   Data frame    Standard frame    0x00000602    7             66    02    fe    01    00    00    00

esphome:
  name: heatpump
  friendly_name: PaC Stiebel Eltron

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_key
    
ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  domain: !secret domain_name
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Heatpump Fallback Hotspot"
    password: !secret ap_password

web_server:
  port: 80

captive_portal:

# ESPHome with MCP2515 CAN-Bus for Stiebel Eltron heating pump
# https://community.home-assistant.io/t/configured-my-esphome-with-mcp2515-can-bus-for-stiebel-eltron-heating-pump/366053
# Original by R. Oberreiter (roberreiter)
# Modified for use with WPL13/WPM2 by P.Studer (pst)
# Modified for use with WPL18/WPM2 by bentou (me)

globals:
  - id: el_aufnahmeleistung_ww_tag_wh_float
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_ww_tag_wh_flag
    type: bool
    restore_value: yes
  - id: el_aufnahmeleistung_ww_tag_kwh
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_ww_tag_kwh_flag
    type: bool
    restore_value: yes

  - id: el_aufnahmeleistung_heiz_tag_wh_float
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_tag_wh_flag
    type: bool
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_tag_kwh
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_tag_kwh_flag
    type: bool
    restore_value: yes

  - id: el_aufnahmeleistung_ww_total_kWh_float
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_ww_total_kWh_flag
    type: bool
    restore_value: yes
  - id: el_aufnahmeleistung_ww_total_mWh
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_ww_total_mWh_flag
    type: bool
    restore_value: yes

  - id: el_aufnahmeleistung_heiz_total_kWh_float
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_total_kWh_flag
    type: bool
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_total_mWh
    type: float
    restore_value: yes
  - id: el_aufnahmeleistung_heiz_total_mWh_flag
    type: bool
    restore_value: yes

  - id: waermemertrag_ww_tag_wh_float
    type: float
    restore_value: yes
  - id: waermemertrag_ww_tag_wh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_ww_tag_kwh
    type: float
    restore_value: yes
  - id: waermemertrag_ww_tag_kwh_flag
    type: bool
    
  - id: waermemertrag_electr_ww_tag_wh_float
    type: float
    restore_value: yes
  - id: waermemertrag_electr_ww_tag_wh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_electr_ww_tag_kwh
    type: float
    restore_value: yes
  - id: waermemertrag_electr_ww_tag_kwh_flag
    type: bool    
    restore_value: yes

  - id: waermemertrag_heiz_tag_wh_float
    type: float
    restore_value: yes
  - id: waermemertrag_heiz_tag_wh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_heiz_tag_kwh
    type: float
    restore_value: yes
  - id: waermemertrag_heiz_tag_kwh_flag
    type: bool
    restore_value: yes 

  - id: waermemertrag_electr_heiz_tag_wh_float
    type: float
    restore_value: yes
  - id: waermemertrag_electr_heiz_tag_wh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_electr_heiz_tag_kwh
    type: float
    restore_value: yes
  - id: waermemertrag_electr_heiz_tag_kwh_flag
    type: bool
    restore_value: yes 

  - id: waermemertrag_ww_total_kWh_float
    type: float
    restore_value: yes
  - id: waermemertrag_ww_total_kWh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_ww_total_mWh
    type: float
    restore_value: yes
  - id: waermemertrag_ww_total_mWh_flag
    type: bool
    restore_value: yes

  - id: waermemertrag_heiz_total_kWh_float
    type: float
    restore_value: yes
  - id: waermemertrag_heiz_total_kWh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_heiz_total_mWh
    type: float
    restore_value: yes
  - id: waermemertrag_heiz_total_mWh_flag
    type: bool
    restore_value: yes

  - id: waermemertrag_electr_heiz_total_kWh_float
    type: float
    restore_value: yes
  - id: waermemertrag_electr_heiz_total_kWh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_electr_heiz_total_mWh
    type: float
    restore_value: yes
  - id: waermemertrag_electr_heiz_total_mWh_flag
    type: bool
    restore_value: yes

  - id: waermemertrag_electr_ww_total_kWh_float
    type: float
    restore_value: yes
  - id: waermemertrag_electr_ww_total_kWh_flag
    type: bool
    restore_value: yes
  - id: waermemertrag_electr_ww_total_mWh
    type: float
    restore_value: yes
  - id: waermemertrag_electr_ww_total_mWh_flag
    type: bool
    restore_value: yes

sensor:
  - platform: template
    name: "Température Extérieure"
    id: temperature_outside
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-lines"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 1

  - platform: template
    name: "Température de la source"
    id: temperature_source
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-lines"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 1

  - platform: template
    name: "Température de l'ECS"
    id: temperature_water
    unit_of_measurement: "°C"
    icon: "mdi:thermometer-lines"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 1

  - platform: template
    name: "Température de départ du chauffage"
    id: temperature_forerun
    unit_of_measurement: "°C"
    icon: "mdi:waves-arrow-right"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 1

  - platform: template
    name: "Température de retour de chauffage"
    id: temperature_return
    unit_of_measurement: "°C"
    icon: "mdi:waves-arrow-left"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 1

  - platform: template
    name: "Consommation d'électricité pour l'ECS aujourd'hui"
    id: daily_electric_energy_water
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "measurement"
    accuracy_decimals: 3
    icon: "mdi:transmission-tower"

  - platform: template
    name: "Consommation d'électricité pour le chauffage aujourd'hui"
    id: daily_electric_energy_heating
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "measurement"
    icon: "mdi:transmission-tower"
    accuracy_decimals: 3

  - platform: template
    name: "Consommation totale d'électricité pour l'ECS"
    id: total_electric_energy_water
    unit_of_measurement: "MWh"
    device_class: "energy"
    state_class: "total_increasing"
    icon: "mdi:transmission-tower"
    accuracy_decimals: 3

  - platform: template
    name: "Consommation totale d'électricité pour le chauffage"
    id: total_electric_energy_heating
    unit_of_measurement: "MWh"
    device_class: "energy"
    icon: "mdi:transmission-tower"
    state_class: "total_increasing"
    accuracy_decimals: 3

  - platform: template
    name: "WM Chauffage aujourd'hui"
    id: daily_heating_energy
    unit_of_measurement: "kWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "measurement"
    accuracy_decimals: 3
   
  - platform: template
    name: "WM Chauffage total"
    id: total_heating_energy
    unit_of_measurement: "MWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "total_increasing"
    accuracy_decimals: 3

  - platform: template
    name: "WM ECS Aujourd'hui"
    id: daily_heating_energy_water
    unit_of_measurement: "kWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "measurement"
    accuracy_decimals: 3

  - platform: template
    name: "WM ECS total"
    id: total_heating_energy_water
    unit_of_measurement: "MWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "total_increasing"
    accuracy_decimals: 3

  - platform: template
    name: "WM electr. ECS total"
    id: total_electric_heating_energy_water
    unit_of_measurement: "kWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "measurement"
    accuracy_decimals: 3

  - platform: template
    name: "WM electr. Chauffage total"
    id: total_electric_heating_energy
    unit_of_measurement: "kWh"
    device_class: "energy"
    icon: "mdi:water-boiler"
    state_class: "measurement"
    accuracy_decimals: 3

binary_sensor:
  - platform: template
    name: "EVU verouillé"
    id: "evu_lock"

time:
  - platform: homeassistant
    id: homeassistant_time
    on_time:
     
      - seconds: /180
        then:


#WM NE WW Summe wh  - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x22,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms
#WM NE WW Summe kwh  - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x23,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM NE Heizen Summe wh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x26,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms
#WM NE Heizen Summe kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x27,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM WW Tag wh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2a,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM WW Tag kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2b,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms
#WM WW Summe kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2c,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM WW Summe Mwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2d,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM Heizen Tag wh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2e,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM Heizen Tag kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x2f,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#WM Heizen Summe kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x30,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms
#WM Heizen Summe Mwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x31,0x00,0x00 ]
              can_id: 0x680
          - delay: 10s

          - lambda: |-
              if (id(waermemertrag_electr_ww_total_mWh_flag) and id(waermemertrag_electr_ww_total_kWh_flag)){
              id(waermemertrag_electr_ww_total_mWh) += id(waermemertrag_electr_ww_total_kWh_float);
              id(total_electric_heating_energy_water).publish_state(id(waermemertrag_electr_ww_total_mWh));
              };
              id(waermemertrag_electr_ww_total_mWh_flag)=false;
              id(waermemertrag_electr_ww_total_kWh_flag)=false;
          - lambda: |-
              if (id(waermemertrag_electr_heiz_total_kWh_flag) and id(waermemertrag_electr_heiz_total_mWh_flag)){
              id(waermemertrag_electr_heiz_total_mWh) += id(waermemertrag_electr_heiz_total_kWh_float);
              id(total_electric_heating_energy).publish_state(id(waermemertrag_electr_heiz_total_mWh));
              };
              id(waermemertrag_electr_heiz_total_kWh_flag)=false;
              id(waermemertrag_electr_heiz_total_mWh_flag)=false;       
          - lambda: |-
              if (id(waermemertrag_ww_total_mWh_flag) and id(waermemertrag_ww_total_kWh_flag)){
              id(waermemertrag_ww_total_mWh) += id(waermemertrag_ww_total_kWh_float);
              id(total_heating_energy_water).publish_state(id(waermemertrag_ww_total_mWh));
              };
              id(waermemertrag_ww_total_mWh_flag)=false;
              id(waermemertrag_ww_total_kWh_flag)=false;
          - lambda: |-
              if (id(waermemertrag_heiz_total_kWh_flag) and id(waermemertrag_heiz_total_mWh_flag)){
              id(waermemertrag_heiz_total_mWh) += id(waermemertrag_heiz_total_kWh_float);
              id(total_heating_energy).publish_state(id(waermemertrag_heiz_total_mWh));
              };
              id(waermemertrag_heiz_total_kWh_flag)=false;
              id(waermemertrag_heiz_total_mWh_flag)=false;       
          - lambda: |-
              if (id(waermemertrag_heiz_tag_kwh_flag) and id(waermemertrag_heiz_tag_wh_flag)){
              id(waermemertrag_heiz_tag_kwh) += id(waermemertrag_heiz_tag_wh_float);
              id(daily_heating_energy).publish_state(id(waermemertrag_heiz_tag_kwh));
              };
              id(waermemertrag_heiz_tag_kwh_flag)=false;
              id(waermemertrag_heiz_tag_wh_flag)=false;
          - lambda: |-
              if (id(waermemertrag_ww_tag_kwh_flag) and id(waermemertrag_ww_tag_wh_flag)){
              id(waermemertrag_ww_tag_kwh) += id(waermemertrag_ww_tag_wh_float);
              id(daily_heating_energy_water).publish_state(id(waermemertrag_ww_tag_kwh));
              };
              id(waermemertrag_ww_tag_kwh_flag)=false;
              id(waermemertrag_ww_tag_wh_flag)=false;

#el. Leistungsaufnahme WW Tag Wh -  ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1a,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme WW Tag kWh -  ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1b,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme WW Summe kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1c,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme WW Summe Mwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1d,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme Heizen Tag Wh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1e,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme Heizen Tag Wh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x1f,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme Heizen Summe kwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x20,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#el. Leistungsaufnahme Heizen Summe Mwh - ok
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x21,0x00,0x00 ]
              can_id: 0x680
          - delay: 10s

          - lambda: |-
              if (id(el_aufnahmeleistung_ww_total_mWh_flag) and id(el_aufnahmeleistung_ww_total_kWh_flag)){
              id(el_aufnahmeleistung_ww_total_mWh) += id(el_aufnahmeleistung_ww_total_kWh_float);
              id(total_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_total_mWh));
              };
              id(el_aufnahmeleistung_ww_total_mWh_flag)=false;
              id(el_aufnahmeleistung_ww_total_kWh_flag)=false;
          - lambda: |-
              if (id(el_aufnahmeleistung_heiz_total_mWh_flag) and id(el_aufnahmeleistung_heiz_total_kWh_flag)){
              id(el_aufnahmeleistung_heiz_total_mWh) += id(el_aufnahmeleistung_heiz_total_kWh_float);
              id(total_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_total_mWh));
              };
              id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;
              id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;       
          - lambda: |-
              if (id(el_aufnahmeleistung_ww_tag_kwh_flag) and id(el_aufnahmeleistung_ww_tag_wh_flag)){
              id(el_aufnahmeleistung_ww_tag_kwh) += id(el_aufnahmeleistung_ww_tag_wh_float);
              id(daily_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_tag_kwh));
              };
              id(el_aufnahmeleistung_ww_tag_kwh_flag)=false;
              id(el_aufnahmeleistung_ww_tag_wh_flag)=false;
          - lambda: |-
              if (id(el_aufnahmeleistung_heiz_tag_kwh_flag) and id(el_aufnahmeleistung_heiz_tag_wh_flag)){
              id(el_aufnahmeleistung_heiz_tag_kwh) += id(el_aufnahmeleistung_heiz_tag_wh_float);
              id(daily_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_tag_kwh));
              };
              id(el_aufnahmeleistung_heiz_tag_kwh_flag)=false;
              id(el_aufnahmeleistung_heiz_tag_wh_flag)=false;
          - lambda: |-
              ESP_LOGD("main", "EVU Sperre requested");

#Aussentemperatur 1/10 Frad et dec value - ok /10 0x000c, et_dec_val
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x00,0x0c,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms

#Vorlauftemperatur Hzg - ok 1/10 0x01d6 WPVORLAUFIST
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x01,0xd6,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms 

#Ruecklauftemperatur Hzg - ok 1/10 0x0016 RUECKLAUFISTTEMP
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x00,0x16,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms 

#WW Temperatur - ok + offset 0x000e SPEICHERISTTEMP
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x00,0x0e,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms 

#Quelle IST: - ok 1/10 0x01d4 QUELLE_IST
          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x01,0xd4,0x00,0x00 ]
              can_id: 0x680
          - delay: 200ms 

spi:
  id: McpSpi
  clk_pin:  GPIO14
  mosi_pin: GPIO13
  miso_pin: GPIO12

canbus:
  - platform: mcp2515
    id: my_mcp2515
    spi_id: McpSpi
    cs_pin: GPIO15
    can_id: 0x6a2
    use_extended_id: false
    bit_rate: 20kbps
    on_frame:

#Warmwasser-Temperaturabfrage + Offset 3.9 Grad
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0e) {
              float temperature =float((float((int((x[6])+( (x[5])<<8))))/10)+3.9);
              id(temperature_water).publish_state(temperature);
              ESP_LOGD("main", "Temperature received over can is %f", temperature);
            }

#Quellen-Temperaturabfrage
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x01 and x[4] == 0xd4) {
              float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
              id(temperature_source).publish_state(temperature);
              ESP_LOGD("main", "Temperature received over can is %f", temperature);
            }
            
#Vorlauftemperaturabfrage
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x01 and x[4] == 0xd6) {
              float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
              id(temperature_forerun).publish_state(temperature);
              ESP_LOGD("main", "Temperature received over can is %f", temperature);
            }

#Ruecklauftemperaturabfrage
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x16) {
              float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
              id(temperature_return).publish_state(temperature);
              ESP_LOGD("main", "Temperature received over can is %f", temperature);
            }

#Aussentemperaturabfrage
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0c) {
              float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
              id(temperature_outside).publish_state(temperature);
              ESP_LOGD("main", "Temperature received over can is %f", temperature);
            }

#Elektrische Leistungsaufnahme Wh /kWh
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
              if (x[4]==0x1a){
                id(el_aufnahmeleistung_ww_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
                id(el_aufnahmeleistung_ww_tag_wh_flag)=true;
                ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_wh_float));}
              else if (x[4]==0x1e){
                id(el_aufnahmeleistung_heiz_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
                id(el_aufnahmeleistung_heiz_tag_wh_flag) = true;
                ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_wh received over can is %f", id(el_aufnahmeleistung_heiz_tag_wh_float));}
              else if (x[4]==0x1c){
                id(el_aufnahmeleistung_ww_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
                id(el_aufnahmeleistung_ww_total_kWh_flag)=true;
                ESP_LOGD("main", "el_aufnahmeleistung_ww_total_kkWh received over can is %f", id(el_aufnahmeleistung_ww_total_kWh_float));}
              else if (x[4]==0x20){
                id(el_aufnahmeleistung_heiz_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
                id(el_aufnahmeleistung_heiz_total_kWh_flag) = true;
                ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_kWh received over can is %f", id(el_aufnahmeleistung_heiz_total_kWh_float));}
              }
              if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x00 and x[4]==0x74){
              if(x[5]==0x80 and x[6]==0x00){
                id(evu_lock).publish_state(false);
                }
              else{
                id(evu_lock).publish_state(true);
              };
            };

#Elektrische Leistungsaufnahme kWh / MWH
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
              if(x[4]==0x1b){
              id(el_aufnahmeleistung_ww_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
              id(el_aufnahmeleistung_ww_tag_kwh_flag)=true;
              ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_kwh));}
              else if(x[4]==0x1f){
                id(el_aufnahmeleistung_heiz_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
                id(el_aufnahmeleistung_heiz_tag_kwh_flag)=true;
                ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_kwh received over can is %f", id(el_aufnahmeleistung_heiz_tag_kwh));}
              else if(x[4]==0x1d){
              id(el_aufnahmeleistung_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
              id(el_aufnahmeleistung_ww_total_mWh_flag)=true;
              ESP_LOGD("main", "el_aufnahmeleistung_ww_total_mWh received over can is %f", id(el_aufnahmeleistung_ww_total_mWh));}
              else if(x[4]==0x21){
                id(el_aufnahmeleistung_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
                id(el_aufnahmeleistung_heiz_total_mWh_flag)=true;
                ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_mWh received over can is %f", id(el_aufnahmeleistung_heiz_total_mWh));}
            }

#Wärmeertrag WW/Heizung MWh / kWH
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
              if(x[4]==0x23){
                id(waermemertrag_electr_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
                id(waermemertrag_electr_ww_total_mWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_electr_ww_tag_kwh received over can is %f", id(waermemertrag_electr_ww_total_mWh));}
              else if(x[4]==0x27){
                id(waermemertrag_electr_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
                id(waermemertrag_electr_heiz_total_mWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_electr_heiz_tag_kwh received over can is %f", id(waermemertrag_electr_heiz_total_mWh));}
              else if(x[4]==0x2b){
              id(waermemertrag_ww_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
              id(waermemertrag_ww_tag_kwh_flag)=true;
              ESP_LOGD("main", "waermemertrag_ww_tag_kwh received over can is %f", id(waermemertrag_ww_tag_kwh));}
              else if(x[4]==0x2d){
              id(waermemertrag_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
              id(waermemertrag_ww_total_mWh_flag)=true;
              ESP_LOGD("main", "waermemertrag_ww_total_mWh received over can is %f", id(waermemertrag_ww_total_mWh));}
              else if(x[4]==0x2f){
                id(waermemertrag_heiz_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
                id(waermemertrag_heiz_tag_kwh_flag)=true;
                ESP_LOGD("main", "waermemertrag_heiz_tag_kwh received over can is %f", id(waermemertrag_heiz_tag_kwh));}
              else if(x[4]==0x31){
                id(waermemertrag_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
                id(waermemertrag_heiz_total_mWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_heiz_total_kWh_float received over can is %f", id(waermemertrag_heiz_total_mWh));}
            }

#Wärmeertrag WW/Heizung Wh / kWH
    - can_id: 0x180
      then:
        - lambda: |-
            if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
              if(x[4]==0x22){
                id(waermemertrag_electr_ww_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
                id(waermemertrag_electr_ww_total_kWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_electr_ww_tag_wh_float received over can is %f", id(waermemertrag_electr_ww_total_kWh_float));}
              else if(x[4]==0x26){
                id(waermemertrag_electr_heiz_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
                id(waermemertrag_electr_heiz_total_kWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_electr_heiz_tag_wh_float received over can is %f", id(waermemertrag_electr_heiz_total_kWh_float));}
              else if(x[4]==0x2a){
              id(waermemertrag_ww_tag_wh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
              id(waermemertrag_ww_tag_wh_flag)=true;
              ESP_LOGD("main", "waermemertrag_ww_tag_wh_float received over can is %f", id(waermemertrag_ww_tag_wh_float));}
              else if(x[4]==0x2c){
              id(waermemertrag_ww_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
              id(waermemertrag_ww_total_kWh_flag)=true;
              ESP_LOGD("main", "waermemertrag_ww_total_kWh_float received over can is %f", id(waermemertrag_ww_total_kWh_float));}
              else if(x[4]==0x2e){
                id(waermemertrag_heiz_tag_wh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
                id(waermemertrag_heiz_tag_wh_flag)=true;
                ESP_LOGD("main", "waermemertrag_heiz_tag_wh_float received over can is %f", id(waermemertrag_heiz_tag_wh_float));}
              else if(x[4]==0x30){
                id(waermemertrag_heiz_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
                id(waermemertrag_heiz_total_kWh_flag)=true;
                ESP_LOGD("main", "waermemertrag_heiz_total_kWh_float received over can is %f", id(waermemertrag_heiz_total_kWh_float));}
            }

as you can see, all about electricity consumption is completely wrong.
the outside temperature is one degree below the value writed on the WMW2 display, but seems fine,
only the source temperature is completely crasy.

by the way ECS stand for the french acronym “Eau Chaude Sanitaire” witch means domestic hot water or warm water in our case.

end of the post…

here is the log of my esp32:

INFO ESPHome 2025.6.3
INFO Reading configuration /config/esphome/heatpump.yaml...
INFO Detected timezone 'Europe/Paris'
WARNING GPIO12 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.1.121 using esphome API
INFO Successfully resolved heatpump @ 192.168.1.121 in 0.000s
INFO Successfully connected to heatpump @ 192.168.1.121 in 0.047s
INFO Successful handshake with heatpump @ 192.168.1.121 in 0.106s
[11:30:21][I][app:137]: ESPHome version 2025.6.3 compiled on Jul  5 2025, 18:11:18
[11:30:21][C][wifi:613]: WiFi:
[11:30:21][C][wifi:434]:   Local MAC: A8:42:E3:xx:xx:xx
[11:30:21][C][wifi:439]:   SSID: 'xxxxxx'[redacted]
[11:30:21][C][wifi:442]:   IP Address: 192.168.1.121
[11:30:21][C][wifi:451]:   BSSID: 28:80:23:xx:xx:xx[redacted]
[11:30:21][C][wifi:451]:   Hostname: 'heatpump'
[11:30:21][C][wifi:451]:   Signal strength: -88 dB ▂▄▆█
[11:30:21][C][wifi:462]:   Channel: 2
[11:30:21][C][wifi:462]:   Subnet: 255.255.255.0
[11:30:21][C][wifi:462]:   Gateway: 192.168.1.1
[11:30:21][C][wifi:462]:   DNS1: 192.168.1.2
[11:30:21][C][wifi:462]:   DNS2: 0.0.0.0
[11:30:21][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:30:21][D][canbus:078]: received can message (#2) std can_id=0x480 size=7
[11:30:21][D][canbus:078]: received can message (#3) std can_id=0x480 size=7
[11:30:21][C][logger:215]: Logger:
[11:30:21][C][logger:215]:   Max Level: DEBUG
[11:30:21][C][logger:215]:   Initial Level: DEBUG
[11:30:21][C][logger:220]:   Log Baud Rate: 115200
[11:30:21][C][logger:220]:   Hardware UART: UART0
[11:30:21][C][logger:224]:   Task Log Buffer Size: 768
[11:30:21][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:30:21][C][spi:068]: SPI bus:
[11:30:21][C][spi:069]:   CLK Pin: GPIO14
[11:30:21][C][spi:070]:   SDI Pin: GPIO12
[11:30:21][C][spi:071]:   SDO Pin: GPIO13
[11:30:21][C][spi:076]:   Using HW SPI: SPI
[11:30:21][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:30:21][C][template.sensor:022]: Template Sensor 'Température Extérieure'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: '°C'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 1
[11:30:21][C][template.sensor:022]:   Device Class: 'temperature'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:thermometer-lines'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Température de la source'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: '°C'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 1
[11:30:21][C][template.sensor:022]:   Device Class: 'temperature'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:thermometer-lines'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Température de l'ECS'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: '°C'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 1
[11:30:21][C][template.sensor:022]:   Device Class: 'temperature'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:thermometer-lines'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Température de départ du chauffage'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: '°C'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 1
[11:30:21][C][template.sensor:022]:   Device Class: 'temperature'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:waves-arrow-right'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Température de retour de chauffage'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: '°C'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 1
[11:30:21][C][template.sensor:022]:   Device Class: 'temperature'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:waves-arrow-left'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Consommation d'électricité pour l'ECS aujourd'hui'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Consommation d'électricité pour le chauffage aujourd'hui'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Consommation totale d'électricité pour l'ECS'
[11:30:21][C][template.sensor:022]:   State Class: 'total_increasing'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'Consommation totale d'électricité pour le chauffage'
[11:30:21][C][template.sensor:022]:   State Class: 'total_increasing'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:transmission-tower'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'WM Chauffage aujourd'hui'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'WM Chauffage total'
[11:30:21][C][template.sensor:022]:   State Class: 'total_increasing'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'WM ECS Aujourd'hui'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'WM ECS total'
[11:30:21][C][template.sensor:022]:   State Class: 'total_increasing'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'MWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:21][C][template.sensor:022]: Template Sensor 'WM electr. ECS total'
[11:30:21][C][template.sensor:022]:   State Class: 'measurement'
[11:30:21][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:21][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:21][C][template.sensor:022]:   Device Class: 'energy'
[11:30:21][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:21][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:22][C][template.sensor:022]: Template Sensor 'WM electr. Chauffage total'
[11:30:22][C][template.sensor:022]:   State Class: 'measurement'
[11:30:22][C][template.sensor:022]:   Unit of Measurement: 'kWh'
[11:30:22][C][template.sensor:022]:   Accuracy Decimals: 3
[11:30:22][C][template.sensor:022]:   Device Class: 'energy'
[11:30:22][C][template.sensor:022]:   Icon: 'mdi:water-boiler'
[11:30:22][C][template.sensor:023]:   Update Interval: 60.0s
[11:30:22][C][template.binary_sensor:028]: Template Binary Sensor 'EVU verouillé'
[11:30:22][C][canbus:021]: config standard id=0x6a2
[11:30:22][C][homeassistant.time:013]: Home Assistant Time:
[11:30:22][C][homeassistant.time:013]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[11:30:22][C][captive_portal:089]: Captive Portal:
[11:30:22][C][web_server:288]: Web Server:
[11:30:22][C][web_server:288]:   Address: heatpump.xxxxx.xxx:80
[11:30:22][C][esphome.ota:077]: Over-The-Air updates:
[11:30:22][C][esphome.ota:077]:   Address: heatpump.xxxxx.xxx:3232
[11:30:22][C][esphome.ota:077]:   Version: 2
[11:30:22][C][esphome.ota:080]:   Password configured
[11:30:22][C][safe_mode:018]: Safe Mode:
[11:30:22][C][safe_mode:025]:   Boot considered successful after 60 seconds
[11:30:22][C][safe_mode:025]:   Invoke after 10 boot attempts
[11:30:22][C][safe_mode:025]:   Remain for 300 seconds
[11:30:22][C][api:185]: API Server:
[11:30:22][C][api:185]:   Address: heatpump.piock.loc:6053
[11:30:22][C][api:187]:   Using noise encryption: YES
[11:30:22][C][mdns:125]: mDNS:
[11:30:22][C][mdns:125]:   Hostname: heatpump
[11:30:24][D][sensor:099]: 'Consommation totale d'électricité pour l'ECS': Sending state 32800.76953 MWh with 3 decimals of accuracy
[11:30:24][D][sensor:099]: 'Consommation totale d'électricité pour le chauffage': Sending state 32800.76953 MWh with 3 decimals of accuracy
[11:30:24][D][sensor:099]: 'Consommation d'électricité pour l'ECS aujourd'hui': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:30:24][D][sensor:099]: 'Consommation d'électricité pour le chauffage aujourd'hui': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:30:24][D][main:538]: EVU Sperre requested
[11:30:24][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:30:24][W][component:278]: Component time took a long time for an operation (104 ms).
[11:30:24][W][component:279]: Components should block for at most 30 ms.
[11:30:24][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:24][D][sensor:099]: 'Température Extérieure': Sending state 26.50000 °C with 1 decimals of accuracy
[11:30:24][D][main:634]: Temperature received over can is 26.500000
[11:30:24][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:30:25][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:25][D][sensor:099]: 'Température de départ du chauffage': Sending state 51.40000 °C with 1 decimals of accuracy
[11:30:25][D][main:614]: Temperature received over can is 51.400002
[11:30:25][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:30:25][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:25][D][sensor:099]: 'Température de retour de chauffage': Sending state 30.40000 °C with 1 decimals of accuracy
[11:30:25][D][main:624]: Temperature received over can is 30.400000
[11:30:25][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:25][D][canbus:078]: received can message (#2) std can_id=0x180 size=7
[11:30:25][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:30:25][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:25][D][sensor:099]: 'Température de l'ECS': Sending state 45.60000 °C with 1 decimals of accuracy
[11:30:25][D][main:594]: Temperature received over can is 45.600002
[11:30:25][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:30:25][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:25][D][sensor:099]: 'Température de la source': Sending state 6513.60010 °C with 1 decimals of accuracy
[11:30:25][D][main:604]: Temperature received over can is 6513.600098
[11:30:29][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:30:29][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:30:30][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
xxx
[11:30:41][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:30:41][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:30:44][D][esp32.preferences:143]: Writing 28 items: 28 cached, 0 written, 0 failed
[11:30:44][W][component:278]: Component preferences took a long time for an operation (51 ms).
[11:30:44][W][component:279]: Components should block for at most 30 ms.
[11:30:45][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:30:45][D][canbus:078]: received can message (#2) std can_id=0x180 size=7
[11:30:49][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:30:49][D][canbus:078]: received can message (#2) std can_id=0x500 size=7
xxx
[11:30:59][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:31:00][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:00][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:31:00][D][canbus:078]: received can message (#2) std can_id=0x180 size=7
[11:31:00][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:00][D][canbus:078]: received can message (#2) std can_id=0x180 size=7
[11:31:00][D][main:730]: waermemertrag_electr_ww_tag_wh_float received over can is 32.768002
[11:31:00][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:00][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:00][D][main:699]: waermemertrag_electr_ww_tag_kwh received over can is 32768.000000
[11:31:00][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:00][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:00][D][main:734]: waermemertrag_electr_heiz_tag_wh_float received over can is 32.768002
[11:31:00][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:00][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:00][D][main:703]: waermemertrag_electr_heiz_tag_kwh received over can is 32768.000000
[11:31:01][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:01][D][main:738]: waermemertrag_ww_tag_wh_float received over can is 32.768002
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x480 size=7
[11:31:01][D][canbus:078]: received can message (#2) std can_id=0x480 size=7
[11:31:01][D][canbus:078]: received can message (#3) std can_id=0x500 size=7
[11:31:01][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:31:01][D][canbus:078]: received can message (#2) std can_id=0x180 size=7
[11:31:01][D][main:707]: waermemertrag_ww_tag_kwh received over can is 32768.000000
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:31:01][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:01][D][main:742]: waermemertrag_ww_total_kWh_float received over can is 32.768002
[11:31:01][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:01][D][main:711]: waermemertrag_ww_total_mWh received over can is 32768.000000
[11:31:01][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:01][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:01][D][main:746]: waermemertrag_heiz_tag_wh_float received over can is 32.768002
[11:31:02][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:02][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:02][D][main:715]: waermemertrag_heiz_tag_kwh received over can is 32768.000000
[11:31:02][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:02][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:02][D][main:750]: waermemertrag_heiz_total_kWh_float received over can is 32.768002
[11:31:02][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:02][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:02][D][main:719]: waermemertrag_heiz_total_kWh_float received over can is 32768.000000
[11:31:05][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:05][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
xxx
[11:31:11][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:31:11][D][canbus:078]: received can message (#1) std can_id=0x500 size=7
[11:31:12][D][sensor:099]: 'WM electr. ECS total': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:31:12][D][sensor:099]: 'WM electr. Chauffage total': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:31:12][D][sensor:099]: 'WM ECS total': Sending state 32800.76953 MWh with 3 decimals of accuracy
[11:31:12][D][sensor:099]: 'WM Chauffage total': Sending state 32800.76953 MWh with 3 decimals of accuracy
[11:31:12][D][sensor:099]: 'WM Chauffage aujourd'hui': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:31:12][D][sensor:099]: 'WM ECS Aujourd'hui': Sending state 32800.76953 kWh with 3 decimals of accuracy
[11:31:12][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:12][W][component:278]: Component time took a long time for an operation (91 ms).
[11:31:12][W][component:279]: Components should block for at most 30 ms.
[11:31:12][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:12][D][main:645]: el_aufnahmeleistung_ww_tag_kwh received over can is 32.768002
[11:31:12][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:12][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:12][D][main:676]: el_aufnahmeleistung_ww_tag_kwh received over can is 32768.000000
[11:31:13][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:13][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:13][D][main:653]: el_aufnahmeleistung_ww_total_kkWh received over can is 32.768002
[11:31:13][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:13][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:13][D][main:684]: el_aufnahmeleistung_ww_total_mWh received over can is 32768.000000
[11:31:13][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:13][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:13][D][main:649]: el_aufnahmeleistung_heiz_tag_wh received over can is 32.768002
[11:31:13][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:13][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:13][D][main:680]: el_aufnahmeleistung_heiz_tag_kwh received over can is 32768.000000
[11:31:13][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:13][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:13][D][main:657]: el_aufnahmeleistung_heiz_total_kWh received over can is 32.768002
[11:31:14][D][canbus:035]: send standard id=0x680 rtr=FALSE size=7
[11:31:14][D][canbus:078]: received can message (#1) std can_id=0x180 size=7
[11:31:14][D][main:688]: el_aufnahmeleistung_heiz_total_mWh received over can is 32768.000000

If you have any idea about my errors, please tell me I would be glad to listen to you !!!