Modbus Einbindung Lambda in Home Assistant

Seit einer Woche habe ich eine Lambda Wärmepumpe im Einsatz und bin begeistert. Im Moment macht sie nur Warmwasser, geheizt wird noch nicht.

Bei der Lambda WP lassen sich einige Werte per Modbus auslesen, wenige lassen sich auch verändern. Die Einbindung ist recht einfach, wenn man etwas Erfahrung mit Home Assistant hat.

Die Grundlagen sind hier zu finden: https://github.com/RalfWinter/lambda-heatpump-modbus-tcp-HA/blob/main/README.md aber ich habe die yaml etwas angepasst, damit ich a) auch steuern kann und b) die configuration.yaml nicht zu unübersichtlich wird.

Ich teile meine Home Assistant Konfiguration in s.g. Packages auf. Damit kann die Konfig nach Themen aufgeteilt werden.
Mehr zum Thema Packages gibt es hier : https://www.home-assistant.io/docs/configuration/packages/

Die modbus Konfiguration besteht bei mir aus drei Teilen, dem modbus Teil, der Definition der Sensoren um die Statuscodes in sprechende Texte zu übersetzten und einigen Automatisierungen.

Meine configuration.yaml hat nur noch diesen Include Befehl, um alle Yaml-Dateien unterhalb des Ordners Packages zu laden:

Meine Konfig findet ihr auch immer in meine Git-Repository. https://github.com/GuidoJeuken-6512/HomeAssistant/tree/main

packages: !include_dir_named packages


So sehen dann meine dreiDateien aus:
Die modbus.yaml, hier müsst ihr natürlich die IP-Adresse eurer Lambda eintragen. Bei mir sind viele Einträge vom Original auskommentiert, da ich sie nicht benötige.
Und ziemlich am Anfang der Climate-Sensor, um die Warmwassertemperatur auch aus HA heraus einstellen zu können.

Zur Anpassung an eure Umgebung muss auf jeden Fall die IP-Adresse der Lambda geändert werden.

  # Lambda WP Modbus/TCP Integration
  # based on Lambda Modbus specification dated 11.04.2023
  # Change name according to your requirements, host to the IP of your heatpump
  # 
  # this is a package file, place it in \packages\lambda
  # reminde each packagefile-name must be unique!
  # append the following code to the configuration.yaml in your HA-installation!
  ##    homeassistant:
  ##  packages: !include_dir_named packages
    
  #########  
  
 modbus:   
  - name: "EU08L"
    type: tcp
    host: 192.168.178.125
    port: 502

## climate sensor to be able to adjust the hot water temperature   
    climates:
        - name: Hot Water
          address: 2050
          #input_type: holding
          #count: 1
          #data_type: int16
          max_temp: 60
          min_temp: 40
          #offset: 0
          precision: 1
          scale: 0.1
          #structure: ">f"
          target_temp_register: 2050
          target_temp_write_registers: true
          temp_step: 1
          temperature_unit: C
    
    sensors:
        - name: EU08L_Hp_QP_heating
        ## aktuelle Leistung der WP (Abgabeleistung)
          address: 1011
          input_type: holding
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
   
  
  #General Ambient
        - name: EU08L_Ambient_Error_Number
          address: 0000
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Ambient_Operating_State
          address: 0001
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Ambient_Temperature
          address: 0002
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Ambient_Temperature_1h
          address: 0003
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Ambient_Temperature_calculated
          address: 0004
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
  # General E-Manager
  # comment this section in case you have no E-Manager active
        - name: EU08L_EMgr_Error_Number
          address: 100
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_EMgr_Operating_State
          address: 101
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_EMgr_Actual_Power
          address: 102
          input_type: holding
          unit_of_measurement: "W"
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_EMgr_Actual_Power_Consumption
          address: 103
          input_type: holding
          unit_of_measurement: "W"
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_EMgr_Power_Consumption_Setpoint
          address: 104
          input_type: holding
          unit_of_measurement: "W"
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
  # Heat Pump No. 1 --for additonal heatpumps, this section needs to be duplicated and second digit of address increased by 1--
        - name: EU08L_Hp1_Error_State
          address: 1000
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Hp1_Error_Number
          address: 1001
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hp1_State
          address: 1002
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Hp1_Operating_State
          address: 1003
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Hp1_Flow_Line_Temperature
          address: 1004
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.01
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Return_Line_Temperature
          address: 1005
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.01
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Volume_flow_heat_sink
          address: 1006
          input_type: holding
          unit_of_measurement: "l/h"
          state_class: total
          scale: 1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Energy_source_inlet_temperature
          address: 1007
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Energy_source_outlet_temperature
          address: 1008
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Volume_flow_energy_source
          address: 1009
          input_type: holding
          unit_of_measurement: "l/min"
          state_class: total
          scale: 0.01
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Compressor_unit_rating
          address: 1010
          input_type: holding
          unit_of_measurement: "%"
          state_class: total
          scale: 0.01
          precision: 0
          data_type: uint16
        - name: EU08L_Hp1_Actual_Heating_Capacity
          address: 1011
          input_type: holding
          unit_of_measurement: "kW"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Inverter_Power_Consumption
          address: 1012
          input_type: holding
          unit_of_measurement: "W"
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hp1_COP
          address: 1013
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 0.01
          precision: 2
          data_type: int16
        - name: EU08L_Hp1_Request-Type
          address: 1015
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hp1_Requested_flow_line_temperature
          address: 1016
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Requested_return_line_temperature
          address: 1017
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Requested_flow_to_return_line_temperature_difference
          address: 1018
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hp1_Relais_State_2nd_Heating_Stage
          address: 1019
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hp1_Compressor_Power_Consumption_accumulated
          address: 1020
          input_type: holding
          unit_of_measurement: "Wh"
          state_class: total
          scale: 1
          precision: 0
          data_type: int32
        - name: EU08L_Hp1_Compressor_Thermal_Energy_Output_accumulated
          address: 1022
          input_type: holding
          unit_of_measurement: "Wh"
          state_class: total
          scale: 1
          precision: 0
          data_type: int32
  # Boiler  --for additonal boiler, this section needs to be duplicated and second digit of address increased by 1--
        - name: EU08L_Boil1_Error_Number
          address: 2000
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Boil1_Operating_state
          address: 2001
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Boil1_Actual_high_temperature
          address: 2002
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Boil1_Actual_low_temperature
          address: 2003
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        #- name: EU08L_Boil1_Set_temperature
        # address: 2050
          #input_type: holding
          #unit_of_measurement: "°C"
          #state_class: total
          #scale: 0.1
          #precision: 1
          #data_type: int16
  # Buffer  --for additonal buffer, this section needs to be duplicated and second digit of address increased by 1--
  #      - name: EU08L_Buff1_Error_Number
  #        address: 3000
  #        input_type: holding
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: int16
  #      - name: EU08L_Buff1_Operating_state
  #        address: 3001
  #        input_type: holding
  #        unit_of_measurement: ""
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: uint16
  #      - name: EU08L_Buff1_Actual_high_temperature
  #        address: 3002
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Buff1_Actual_low_temperature
  #        address: 3003
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Buff1_Set_temperature
  #        address: 3050
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  # Solar  --for additonal solar modules, this section needs to be duplicated and second digit of address increased by 1--
  # comment this section in case you have no Solar module active
  #      - name: EU08L_Sol1_Error_Number
  #        address: 4000
  #        input_type: holding
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: int16
  #      - name: EU08L_Sol1_Operating_state
  #        address: 4001
  #        input_type: holding
  #        unit_of_measurement: ""
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: uint16
  #      - name: EU08L_Sol1_Actual_collector_temperature
  #        address: 4002
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Sol1_Actual_buffer_sensor1_temperature
  #        address: 4003
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Sol1_Actual_buffer_sensor2_temperature
  #        address: 4004
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Sol1_Set_max_buffer_temperature
  #        address: 4050
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Sol1_Set_buffer_changeover_temperature
  #        address: 4051
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  # Heating Circuit -- e.g. underfloor heating --for additonal heating circuits , this section needs to be duplicated and second digit of address increased by 1--
        - name: EU08L_Hc1_Error_Number
          address: 5000
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hc1_Operating_state
          address: 5001
          input_type: holding
          unit_of_measurement: ""
          state_class: total
          scale: 1
          precision: 0
          data_type: uint16
        - name: EU08L_Hc1_Flow_line_temperature
          address: 5002
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Return_line_temperature
          address: 5003
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Room_device_temperature
          address: 5004
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Set_flow_line_temperature
          address: 5005
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Operating_mode
          address: 5006
          input_type: holding
          state_class: total
          scale: 1
          precision: 0
          data_type: int16
        - name: EU08L_Hc1_Set_flow_line_offset_temperature
          address: 5050
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Set_heating_mode_room_temperature
          address: 5051
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
        - name: EU08L_Hc1_Set_cooling_mode_room_temperature
          address: 5052
          input_type: holding
          unit_of_measurement: "°C"
          state_class: total
          scale: 0.1
          precision: 1
          data_type: int16
  # Heating Circuit 2 (e.g. radiators --for additonal heating circuits , this section needs to be duplicated and second digit of address increased by 1--
  # delete or comment this section in case you have no further heating circuits
  #      - name: EU08L_Hc2_Error_Number
  #        address: 5100
  #        input_type: holding
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: int16
  #      - name: EU08L_Hc2_Operating_state
  #        address: 5101
  #        input_type: holding
  #        unit_of_measurement: ""
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: uint16
  #      - name: EU08L_Hc2_Flow_line_temperature
  #        address: 5102
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Return_line_temperature
  #        address: 5103
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Romm_device_temperature
  #        address: 5104
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Set_flow_line_temperature
  #        address: 5105
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Operating_mode
  #        address: 5106
  #        input_type: holding
  #        state_class: total
  #        scale: 1
  #        precision: 0
  #        data_type: int16
  #      - name: EU08L_Hc2_Set_flow_line_offset_temperature
  #        address: 5150
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Set_heating_mode_room_temperature
  #        address: 5151
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  #      - name: EU08L_Hc2_Set_cooling_mode_room_temperature
  #        address: 5152
  #        input_type: holding
  #        unit_of_measurement: "°C"
  #        state_class: total
  #        scale: 0.1
  #        precision: 1
  #        data_type: int16
  

Meine sensor.yaml sieht dann für die Lambda so aus, ich habe mehr Sensoren definiert, die habe ich hier aber rausgelassen.

counter:
## to monitor the heat pump's cycling, here are the sensors.
  eu08l_heat_pump_timing:
    name: eu08l_heat_pump_timing
    initial: 6
  eu08l_hot_water_timing:
    name: eu08l_hot_water_timing
    initial: 84

  eu8l_heat_pump_timing_daily:
    name: eu08l_heat_pump_timing_daily
    initial: 0

  eu08l_hot_water_timing_daily:
    name: eu8l_hot_water_timing_daily
    initial: 0


Dazu dann noch die automation yaml. In der berechne die die Tacktungen um sie im Frontend anzeigen zu können. Dazu sind Sensoren definiert und immer wenn die Betriebsart der Lambda in Heizung oder WarmWasser wechselt, erhöhe ich den passenden Zähler. Damit habe ich immer die Tacktungen als Summe und die Tacktungen pro Tag im Blick.

automation:

## incement counter for Lambda total cycling
  - alias: Increase Counter for HP timing Heating
    trigger:
      # state=1 -> Heating
      platform: state
      entity_id: sensor.eu08l_Hp1_Operating_State
      to: '1'
    action:
      service: counter.increment
      entity_id: counter.eu08l_heat_pump_timing
  - alias: Increase Counter for HP timing hot water
    trigger:
      # state=2 -> Hot Water
      platform: state
      entity_id: sensor.eu08l_Hp1_Operating_State
      to: '2'
    action:
      service: counter.increment
      entity_id: counter.eu08l_hot_water_timing
## incement counter for Lambda daily cycling
  - alias: Increase Counter for HP timing Heating daily
    trigger:
      # state=1 -> Heating
      platform: state
      entity_id: sensor.eu08l_Hp1_Operating_State
      to: '1'
    action:
      service: counter.increment
      entity_id: counter.eu08l_heat_pump_timing_daily
  - alias: Increase Counter for HP timing hot water
    trigger:
      # state=2 -> Hot Water
      platform: state
      entity_id: sensor.eu08l_Hp1_Operating_State
      to: '2'
    action:
      service: counter.increment
      entity_id: counter.eu08l_hot_water_timing_daily
## reset daily counter at midnight
  - alias: Reset Counter at Midnight
    trigger:
      platform: time
      at: '00:00:00'
    action:
      service: counter.reset
      entity_id: counter.eu08l_heat_pump_timing_daily
  - alias: Reset Counter at Midnight
    trigger:
      platform: time
      at: '00:00:00'
    action:
      service: counter.reset
      entity_id: counter.eu08l_hot_water_timing_daily
    

Damit die Status Sesoren auch als StatusText einzublenden ist, gibt es noch eine Yaml-Datei für die Umsetzung.


############# in this yaml the status sensors of the Lambda are transcribed into texts
sensor:
  
  # Lambda WP:
  - platform: template
    sensors:
      eu08l_ambient_operating_state_txt:
        friendly_name: "eu08l_Ambient_Operating_State_txt"
        value_template: >
          {{ ['Off', 'Automatik', 'Manual', 'Error'][states('sensor.eu08l_ambient_operating_state')|int] }}
      eu08l_emgr_operating_state_txt:
        friendly_name: "eu08l_EMgr_Operating_State_txt"
        value_template: >
          {{ ['Off', 'Automatik', 'Manual', 'Error', 'Offline'][states('sensor.eu08l_emgr_operating_state')|int] }}
      eu08l_hp1_error_state_txt:
        friendly_name: "eu08l_Hp1_Error_State_txt"
        value_template: >
          {{ ['OK', 'Message', 'Warning', 'Alarm', 'Fault'][states('sensor.eu08l_hp1_error_state')|int] }}
      eu08l_hp1_state_txt:
        friendly_name: "eu08l_Hp1_State_txt"
        value_template: >
          {{ ['Init', 'Reference', 'Restart-Block', 'Ready', 'Start Pumps', 'Start Compressor', 'Pre-Regulation', 'Regulation', 'Not Used', 'Cooling', 'Defrosting', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Stopping', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Fault-Lock', 'Alarm-Block', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Not Used', 'Error-Reset'][states('sensor.eu08l_hp1_state')|int] }}
      eu08l_hp1_operating_state_txt:
        friendly_name: "eu08l_Hp1_Operating_State_txt"
        value_template: >
          {{ ['Standby', 'Heizung', 'WW-Bereitung', 'Cold Climate', 'Zirkulieren', 'Defrost', 'Off', 'Frost', 'Standby-Frost', 'Not used', 'Sommer', 'Ferienbetrieb', 'Error', 'Warning', 'Info-Message', 'Time-Block', 'Release-Block', 'Mintemp-Block', 'Firmware-Download'][states('sensor.eu08l_hp1_operating_state')|int] }}
      eu08l_hp1_request_type_txt:
        friendly_name: "eu08l_Hp1_Request_Type_txt"
        value_template: >
          {{ ['No Request', 'Flow Pump Circulation', 'Central Heating', 'Central Cooling', 'Domestic Hot Water'][states('sensor.eu08l_hp1_request_type')|int] }}
      eu08l_boil1_operating_state_txt:
        friendly_name: "eu08l_Boil1_Operating_State_txt"
        value_template: >
          {{ ['Standby', 'Domestic Hot Water', 'Legio', 'Summer', 'Frost', 'Holiday', 'Prio-Stop', 'Error', 'Off', 'Prompt-DHW', 'Trailing-Stop', 'Temp-Lock', 'Standby-Frost'][states('sensor.eu08l_boil1_operating_state')|int] }}
      eu08l_buff1_operating_state_txt:
        friendly_name: "eu08l_Buff1_Operating_State_txt"
        value_template: >
          {{ ['Standby', 'Heating', 'Cooling', 'Summer', 'Frost', 'Holiday', 'Prio-Stop', 'Error', 'Off', 'Standby-Frost'][states('sensor.eu08l_buff1_operating_state')|int] }}
      eu08l_sol1_operating_state_txt:
        friendly_name: "eu08l_Sol1_Operating_State_txt"
        value_template: >
          {{ ['Standby', 'Heating', 'Error', 'Off'][states('sensor.eu08l_sol1_operating_state')|int] }}
      eu08l_hc1_operating_state_txt:
        friendly_name: "eu08l_Hc1_Operating_State_txt"
        value_template: >
          {{ ['Heating', 'Eco', 'Cooling', 'Floor-dry', 'Frost', 'Max-Temp', 'Error', 'Service', 'Holiday', 'Central Heating Summer', 'Central Cooling Winter', 'Prio-Stop', 'Off', 'Release-Off', 'Time-Off', 'Standby', 'Standby-Heating', 'Standby-Eco', 'Standby-Cooling', 'Standby-Frost', 'Standby-Floor-dry'][states('sensor.eu08l_hc1_operating_state')|int] }}
      eu08l_hc1_operating_mode_txt:
        friendly_name: "eu08l_Hc1_Operating_Mode_txt"
        value_template: >
          {{ ['Off', 'Manual', 'Automatik', 'Auto-Heating', 'Auto-Cooling', 'Frost', 'Summer', 'Floor-dry'][states('sensor.eu08l_hc1_operating_mode')|int] }}
      eu08l_hc2_operating_state_txt:
        friendly_name: "eu08l_Hc2_Operating_State_txt"
        value_template: >
          {{ ['Heating', 'Eco', 'Cooling', 'Floor-dry', 'Frost', 'Max-Temp', 'Error', 'Service', 'Holiday', 'Central Heating Summer', 'Central Cooling Winter', 'Prio-Stop', 'Off', 'Release-Off', 'Time-Off', 'Standby', 'Standby-Heating', 'Standby-Eco', 'Standby-Cooling', 'Standby-Frost', 'Standby-Floor-dry'][states('sensor.eu08l_hc2_operating_state')|int] }}
      eu08l_hc2_operating_mode_txt:
        friendly_name: "eu08l_Hc2_Operating_Mode_txt"
        value_template: >
          {{ ['Off', 'Manual', 'Automatik', 'Auto-Heating', 'Auto-Cooling', 'Frost', 'Summer', 'Floor-dry'][states('sensor.eu08l_hc2_operating_mode')|int] }}
      eu08l_hc3_operating_state_txt:
        friendly_name: "eu08l_Hc3_Operating_State_txt"
        value_template: >
          {{ ['Heating', 'Eco', 'Cooling', 'Floor-dry', 'Frost', 'Max-Temp', 'Error', 'Service', 'Holiday', 'Central Heating Summer', 'Central Cooling Winter', 'Prio-Stop', 'Off', 'Release-Off', 'Time-Off', 'Standby', 'Standby-Heating', 'Standby-Eco', 'Standby-Cooling', 'Standby-Frost', 'Standby-Floor-dry'][states('sensor.eu08l_hc3_operating_state')|int] }}
      eu08l_hc3_operating_mode_txt:
        friendly_name: "eu08l_Hc3_Operating_Mode_txt"
        value_template: >
          {{ ['Off', 'Manual', 'Automatik', 'Auto-Heating', 'Auto-Cooling', 'Frost', 'Summer', 'Floor-dry'][states('sensor.eu08l_hc3_operating_mode')|int] }}
  

Und so sieht dann mein Dashboard dazu aus.

Zunächst die Taktungen

Im Moment habe ich noch nur die Warmwasserwerte und die allgemeinen Werte hineingenommen, die Werte zur Heizung kommen noch.

Zwei der Werte sind zum original von Ralf Winter angepasst.
Ich berechne einen Wert, den COP calc. Dazu verwende ich eine Helper mit folgendem Template:
{{ ((states(‘sensor.eu13l_hp1_compressor_thermal_energy_output_accumulated’) | float / states(‘sensor.eu13l_hp1_compressor_power_consumption_accumulated’) | float )) | round(2) }}
So berechne ich den Wert aus den Werten Stromaufnahme und Wärmeabgabe der Lambda.

Und ich habe den modbus sensor für die Warmwasser-Solltemperatur in eine Climate-Entität umgeschrieben. Damit kann ich im Dashboard eine tile-card auf die Climate-Entität legen und den Wert beeinflussen. Die Anpassung im Code seht ihr im Anfang der modbus.yaml. Die tile-card ist schön klein, daher habe ich diese Card gewählt.

2 Gedanken zu „Modbus Einbindung Lambda in Home Assistant“

  1. Super, einfache Einbindung der Lambda in HA.
    Bin zwar erst bei der Modbus.yaml, die Werte scheinen aber zu passen. (Meine Lambda EU08L ist von2022, COP über 5 mit Radiatoren.
    PS: In Deiner aktuellen lambda_sensor.yaml auf GitHub fehlt der Part Sensors mit den Text Enumerationen, im Code auf der Web Seite sind noch die Texte/Variablennamen von Ralf Winter (E13L).

    Antworten

Schreibe einen Kommentar

Datenschutz
Ich, Guido Jeuken (Wohnort: Deutschland), würde gerne mit externen Diensten personenbezogene Daten verarbeiten. Dies ist für die Nutzung der Website nicht notwendig, ermöglicht mir aber eine noch engere Interaktion mit Ihnen. Falls gewünscht, treffen Sie bitte eine Auswahl:
Datenschutz
Länderflagge Deutsch
Ich, Guido Jeuken (Wohnort: Deutschland), würde gerne mit externen Diensten personenbezogene Daten verarbeiten. Dies ist für die Nutzung der Website nicht notwendig, ermöglicht mir aber eine noch engere Interaktion mit Ihnen. Falls gewünscht, treffen Sie bitte eine Auswahl: