From 9de8319db8cd558afc833890a11a6cedeee50a3d Mon Sep 17 00:00:00 2001 From: Daniel Schubert Date: Tue, 17 Dec 2024 11:36:24 +0100 Subject: [PATCH] add code --- README.md | 5 + WBB_WP_ModbusTCP.xlsx.ods | Bin 0 -> 31625 bytes homeassistant/config/configuration.yaml | 57 ++++++ homeassistant/config/scenes.yaml | 15 ++ homeassistant/config/sensors.yaml | 248 ++++++++++++++++++++++++ homeassistant/config/weishaupt.yaml | 20 ++ homeassistant/docker-compose.yaml | 14 ++ 7 files changed, 359 insertions(+) create mode 100644 WBB_WP_ModbusTCP.xlsx.ods create mode 100644 homeassistant/config/configuration.yaml create mode 100644 homeassistant/config/scenes.yaml create mode 100644 homeassistant/config/sensors.yaml create mode 100644 homeassistant/config/weishaupt.yaml create mode 100644 homeassistant/docker-compose.yaml diff --git a/README.md b/README.md index e69de29..cbd37f5 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,5 @@ +Setup um eine Weishautp wärmepumpe per ModBus in Homeassistant einzubinden + +Ein Thread dazu: +https://community.home-assistant.io/t/weishaupt-heatpump-integration-via-modbus/436823 + diff --git a/WBB_WP_ModbusTCP.xlsx.ods b/WBB_WP_ModbusTCP.xlsx.ods new file mode 100644 index 0000000000000000000000000000000000000000..3aa42b3226ae1fb32eb0e316808cc63989f8b9d3 GIT binary patch literal 31625 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 E0r7g + {% if option == "Automatik" %} 0 + {% elif option == "Heizen" %} 1 + {% elif option == "Kühlen" %} 2 + {% elif option == "Sommer" %} 3 + {% elif option == "Standby" %} 4 + {% elif option == "2. WEZ" %} 5 + {% endif %} + - name: Heizkreis Betriebsart + unique_id: wpump_hk_mode + state: "{{ states('sensor.wp_heizkreis_betriebsart_text') }}" + options: "{{ ['Automatik', 'Komfort', 'Normal', 'Absenk', 'Standby']}}" + select_option: + service: modbus.write_register + data: + hub: wpump + slave: 1 + address: 41103 + value: > + {% if option == "Automatik" %} + 0 + {% elif option == "Komfort" %} + 1 + {% elif option == "Normal" %} + 2 + {% elif option == "Absenk" %} + 3 + {% elif option == "Standby" %} + 4 + {% endif %} diff --git a/homeassistant/config/scenes.yaml b/homeassistant/config/scenes.yaml new file mode 100644 index 0000000..49b8fc9 --- /dev/null +++ b/homeassistant/config/scenes.yaml @@ -0,0 +1,15 @@ +- id: '1731416586384' + name: Neue Szene + entities: + select.heizkreis_betriebsart: + options: + - Automatik + - Komfort + - Normal + - Absenk + - Standby + friendly_name: Heizkreis Betriebsart + state: unknown + metadata: + select.heizkreis_betriebsart: + entity_only: true diff --git a/homeassistant/config/sensors.yaml b/homeassistant/config/sensors.yaml new file mode 100644 index 0000000..8241d1d --- /dev/null +++ b/homeassistant/config/sensors.yaml @@ -0,0 +1,248 @@ + #WW + - name: WP_Warmwassersolltemperatur + slave: 1 + address: 32101 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + unique_id: wpump.wwsolltemp + - name: WP_Warmwassertemperatur + slave: 1 + address: 32102 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + unique_id: wpump.wwtemp + #System + - name: WP_Betrieb + slave: 1 + address: 30006 + input_type: input + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + unique_id: wpump.betrieb + - name: WP_Stoerungsfrei + slave: 1 + address: 30005 + input_type: input + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + - name: WP_Außentemperatur + slave: 1 + address: 30001 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + #Heizkreis + - name: WP_Raumsolltemperatur + slave: 1 + address: 31101 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + - name: WP_Vorlaufsolltemperatur + slave: 1 + address: 31104 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + - name: WP_Vorlauftemperatur + slave: 1 + address: 33104 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + - name: WP_Rücklauftemperatur + slave: 1 + address: 33105 + input_type: input + unit_of_measurement: °C + state_class: measurement + scale: 0.1 + offset: 0 + precision: 1 + data_type: int16 + - name: WP_Leistungsanforderung + slave: 1 + address: 33103 + input_type: input + unit_of_measurement: '%' + state_class: measurement + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WP_Heizkurve + slave: 1 + address: 41108 + input_type: holding + state_class: measurement + scale: 0.01 + offset: 0 + precision: 2 + data_type: int16 + # 2. WEZ + - name: WP_E1_Status + slave: 1 + address: 34104 + input_type: input + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + - name: WP_E2_Status + slave: 1 + address: 34105 + input_type: input + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + - name: WP_E1_Stunden + slave: 1 + address: 34106 + input_type: input + unit_of_measurement: h + state_class: measurement + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + - name: WP_E2_Stunden + slave: 1 + address: 34107 + input_type: input + unit_of_measurement: h + state_class: measurement + scale: 1 + offset: 0 + precision: 0 + data_type: int16 + #Stats + - name: WPST_Gesamt_Tag + slave: 1 + address: 36101 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_Gesamt_Monat + slave: 1 + address: 36103 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_Gesamt_Jahr + slave: 1 + address: 36104 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_Heizen_Tag + slave: 1 + address: 36201 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_Heizen_Monat + slave: 1 + address: 36203 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_Heizen_Jahr + slave: 1 + address: 36204 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_WW_Tag + slave: 1 + address: 36301 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_WW_Monat + slave: 1 + address: 36303 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 + - name: WPST_WW_Jahr + slave: 1 + address: 36304 + input_type: input + unit_of_measurement: kWh + state_class: total_increasing + device_class: energy + scale: 1 + offset: 0 + precision: 1 + data_type: int16 diff --git a/homeassistant/config/weishaupt.yaml b/homeassistant/config/weishaupt.yaml new file mode 100644 index 0000000..d9ee857 --- /dev/null +++ b/homeassistant/config/weishaupt.yaml @@ -0,0 +1,20 @@ +- name: wpump + type: tcp + host: 192.168.1.7 + port: 502 + climates: + - name: "WP_Warmwasser" + #address: 42103 + address: 32102 + slave: 1 + input_type: input + max_temp: 50 + min_temp: 15 + offset: 0 + precision: 1 + scale: 0.1 + target_temp_register: 42103 + temp_step: 1 + temperature_unit: C + unique_id: 123-456-abc + sensors: !include sensors.yaml diff --git a/homeassistant/docker-compose.yaml b/homeassistant/docker-compose.yaml new file mode 100644 index 0000000..ff80a32 --- /dev/null +++ b/homeassistant/docker-compose.yaml @@ -0,0 +1,14 @@ +version: "3" +services: + homeassisstant: + container_name: homeassistant + image: "ghcr.io/home-assistant/home-assistant:stable" + ports: + - 8123:8123 + volumes: + - ./config:/config + - /etc/localtime:/etc/localtime:ro + - /run/dbus:/run/dbus:ro + restart: unless-stopped + privileged: true + network_mode: host