In diesem Video zeige ich dir, wie ich meine 14 Jahre alte Wärmepumpe mit Home Assistant smart gemacht habe. Erfahre, wie du deine Stiebel Eltron Wärmepumpe mit MCP2515 und ESPHome verbindest!
Inhaltsverzeichnis
Voraussetzungen
Home Assistant muss schon installiert sein, auf welcher Hardware spielt keine Rolle.
Außerdem sollte du mit den Grundlagen vertraut sein
Code zum kopieren
Zum kopieren und einfügen von Code findest du übrigens einige spannende Infos im Expertentipps-Video.
ESPHome
Wichtig: Nenne das ESPHome-Projekt heatingpump, ansonsten heißen all deine Entitäten komplett anders! Passe ggf. den API-Key sowie die IP-Adresse an, damit es zu deiner Umgebung passt 👍
Außerdem nicht vergessen, die Stiebeltools-Dateien der GitHub-Repo wie im Video angesprochen in das lokale ESPHome-Verzeichnis zu kopieren.
esphome:
name: heatingpump
friendly_name: "Heatingpump CAN Interface"
platform: ESP32
board: esp32dev
includes:
- stiebeltools/ElsterTable.h
- stiebeltools/KElsterTable.h
- stiebeltools/KElsterTable.cpp
- stiebeltools/NUtils.h
- stiebeltools/NUtils.cpp
- stiebeltools/NTypes.h
- stiebeltools/heatingpump.h
# Enable Home Assistant API
api:
encryption:
key: "OxzvqkshTfnnu1EdLE6EAqlurKFBfKLc2Mf5WuZpL1M="
ota:
- platform: esphome
password: "6055251ee076f8619304701d8a5f1766"
# Enable logging
logger:
level: INFO
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.0.231
gateway: 192.168.0.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Heatingpump Fallback Hotspot"
password: "ynOFgUJVSeTj"
captive_portal:
#globals:
#########################################
# #
# SELECT #
# #
#########################################
select:
- platform: template
name: "PROGRAMMSCHALTER_SET"
id: PROGRAMMSCHALTER_SET
options:
- "Notbetrieb"
- "Bereitschaft"
- "Automatik"
- "Tagbetrieb"
- "Absenkbetrieb"
- "Warmwasser"
- "Unbekannt"
initial_option: "Unbekannt"
optimistic: true
on_value:
then:
- lambda: |-
// Prüfe ob Dropdown nicht auf Unbekannt steht
const char* auswahl = id(PROGRAMMSCHALTER_SET).state.c_str();
if(strcmp(auswahl, "Unbekannt") != 0) {
writeSignal(&CanMembers[cm_manager], GetElsterIndex("PROGRAMMSCHALTER"), auswahl);
readSignal(&CanMembers[cm_manager], GetElsterIndex("PROGRAMMSCHALTER"));
}
return;
#########################################
# #
# SENSORS #
# #
#########################################
sensor:
#########################################
# #
# KESSEL SENSOREN #
# #
#########################################
- platform: template
name: "AUSSENTEMP"
id: AUSSENTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 20min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("AUSSENTEMP"));
return {};
#Warmwasser SOLL Komfort Temperatur
- platform: template
name: "EINSTELL_SPEICHERSOLLTEMP"
id: EINSTELL_SPEICHERSOLLTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("EINSTELL_SPEICHERSOLLTEMP"));
return {};
# Warmwasser SOLL Eco Temperatur
- platform: template
name: "EINSTELL_SPEICHERSOLLTEMP2"
id: EINSTELL_SPEICHERSOLLTEMP2
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("EINSTELL_SPEICHERSOLLTEMP2"));
return {};
#T Heizkreis Soll Abfrage
- platform: template
name: "HILFSKESSELSOLL"
id: HILFSKESSELSOLL
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("HILFSKESSELSOLL"));
return {};
- platform: template
name: "INITIALISIERUNG_KESSEL"
id: INITIALISIERUNG_KESSEL
icon: "mdi:description"
accuracy_decimals: 0
update_interval: 30min
#Rücklauftemperatur SOLL - platform: template
- platform: template
name: "KESSELSOLLTEMP"
id: KESSELSOLLTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("KESSELSOLLTEMP"));
return {};
#Rücklauftemperatur IST
- platform: template
name: "RUECKLAUFISTTEMP_KESSEL"
id: RUECKLAUFISTTEMP_KESSEL
unit_of_measurement: "°C"
icon: "mdi:waves-arrow-left"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("RUECKLAUFISTTEMP"));
return {};
#Warmwasser-Temperaturabfrage + Gerätespezifischer Offset 3.9 °C
- platform: template
name: "SPEICHERISTTEMP"
id: SPEICHERISTTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
filters:
- offset: 3.9
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("SPEICHERISTTEMP"));
return {};
#Warmwasser SOLL Temperatur
- platform: template
name: "SPEICHERSOLLTEMP"
id: SPEICHERSOLLTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_kessel], GetElsterIndex("SPEICHERSOLLTEMP"));
return {};
#Vorlauftemperatur SOLL Heizung
# - platform: template
# name: "VORLAUFSOLLTEMP"
# id: VORLAUFSOLLTEMP
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_kessel], GetElsterIndex("VORLAUFSOLLTEMP"));
# return {};
# Vorlauftemperatur IST Heizung
# - platform: template
# name: "WPVORLAUFIST_KESSEL"
# id: WPVORLAUFIST_KESSEL
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_kessel], GetElsterIndex("WPVORLAUFIST"));
# return {};
- platform: template
name: "BUSKONTROLLE"
id: BUSKONTROLLE
icon: "mdi:description"
accuracy_decimals: 0
#########################################
# #
# MANAGER SENSOREN #
# #
#########################################
- platform: template
name: "ANFAHRENT"
id: ANFAHRENT
state_class: "measurement"
accuracy_decimals: 0
- platform: template
name: "GERAETEKONFIGURATION"
id: GERAETEKONFIGURATION
icon: "mdi:description"
state_class: "measurement"
accuracy_decimals: 0
- platform: template
name: "HARDWARE_NUMMER_MANAGER"
id: HARDWARE_NUMMER_MANAGER
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "INDEX_NOT_FOUND_MANAGER"
id: INDEX_NOT_FOUND_MANAGER
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "INITIALISIERUNG_MANAGER"
id: INITIALISIERUNG_MANAGER
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "LAUFZEIT_VERD_BEI_SPEICHERBEDARF"
id: LAUFZEIT_VERD_BEI_SPEICHERBEDARF
icon: "mdi:timer"
device_class: "duration"
state_class: "measurement"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("LAUFZEIT_VERD_BEI_SPEICHERBEDARF"));
return {};
# - platform: template
# name: "LUEFT_PASSIVKUEHLUNG_UEBER_FORTLUEFTER"
# id: LUEFT_PASSIVKUEHLUNG_UEBER_FORTLUEFTER
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: 30min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LUEFT_PASSIVKUEHLUNG_UEBER_FORTLUEFTER"));
# return {};
# - platform: template
# name: "LZ_VERD_1_2_HEIZBETRIEB_MANAGER"
# id: LZ_VERD_1_2_HEIZBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_2_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_2_KUEHLBETRIEB_MANAGER"
# id: LZ_VERD_1_2_KUEHLBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_2_KUEHLBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_2_WW_BETRIEB_MANAGER"
# id: LZ_VERD_1_2_WW_BETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_2_WW_BETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_HEIZBETRIEB_MANAGER"
# id: LZ_VERD_1_HEIZBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_KUEHLBETRIEB_MANAGER"
# id: LZ_VERD_1_KUEHLBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_KUEHLBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_WW_BETRIEB_MANAGER"
# id: LZ_VERD_1_WW_BETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_1_WW_BETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_HEIZBETRIEB_MANAGER"
# id: LZ_VERD_2_HEIZBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_2_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_KUEHLBETRIEB_MANAGER"
# id: LZ_VERD_2_KUEHLBETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 60min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_2_KUEHLBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_WW_BETRIEB_MANAGER"
# id: LZ_VERD_2_WW_BETRIEB_MANAGER
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("LZ_VERD_2_WW_BETRIEB"));
# return {};
- platform: template
name: "PARAMETERSATZ_MANAGER"
id: PARAMETERSATZ_MANAGER
icon: "mdi:description"
accuracy_decimals: 0
# - platform: template
# name: "QUELLENPUMPEN_STATUS"
# id: QUELLENPUMPEN_STATUS
# unit_of_measurement: "°C"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("PARAMETERSATZ"));
# return {};
# - platform: template
# name: "RAUMISTTEMP"
# id: RAUMISTTEMP
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMISTTEMP"));
# return {};
- platform: template
name: "RAUMSOLLTEMP_I"
id: RAUMSOLLTEMP_I
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_I"));
return {};
# - platform: template
# name: "RAUMSOLLTEMP_II"
# id: RAUMSOLLTEMP_II
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_II"));
# return {};
# - platform: template
# name: "RAUMSOLLTEMP_III"
# id: RAUMSOLLTEMP_III
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_III"));
# return {};
- platform: template
name: "RAUMSOLLTEMP_NACHT"
id: RAUMSOLLTEMP_NACHT
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_NACHT"));
return {};
# - platform: template
# name: "RUECKLAUFISTTEMP_MANAGER"
# id: RUECKLAUFISTTEMP_MANAGER
# unit_of_measurement: "°C"
# icon: "mdi:waves-arrow-left"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("RUECKLAUFISTTEMP"));
# return {};
# - platform: template
# name: "SAMMEL_RELAISSTATUS"
# id: SAMMEL_RELAISSTATUS
# icon: "mdi:switch"
# accuracy_decimals: 0
- platform: template
name: "SOFTWARE_NUMMER_MANAGER"
id: SOFTWARE_NUMMER_MANAGER
icon: "mdi:wysiwyg"
accuracy_decimals: 0
- platform: template
name: "SOFTWARE_VERSION"
id: SOFTWARE_VERSION
icon: "mdi:wysiwyg"
accuracy_decimals: 0
- platform: template
name: "SPEICHERBEDARF"
id: SPEICHERBEDARF
icon: "mdi:memory"
state_class: "measurement"
accuracy_decimals: 0
- platform: template
name: "TEILVORRANG_WW"
id: TEILVORRANG_WW
state_class: "measurement"
accuracy_decimals: 0
update_interval: 60min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("TEILVORRANG_WW"));
return {};
# - platform: template
# name: "TEMPORALE_LUEFTUNGSSTUFE_DAUER"
# id: TEMPORALE_LUEFTUNGSSTUFE_DAUER
# icon: "mdi:timer"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: 60min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("TEMPORALE_LUEFTUNGSSTUFE_DAUER"));
# return {};
- platform: template
name: "VERDICHTER_MANAGER"
id: VERDICHTER_MANAGER
icon: "mdi:compress"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("VERDICHTER"));
return {};
- platform: template
name: "VERSTELLTE_RAUMSOLLTEMP"
id: VERSTELLTE_RAUMSOLLTEMP
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("VERSTELLTE_RAUMSOLLTEMP"));
return {};
# - platform: template
# name: "WPVORLAUFIST_MANAGER"
# id: WPVORLAUFIST_MANAGER
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("WPVORLAUFIST"));
# return {};
# - platform: template
# name: "ZWISCHENEINSPRITZUNG_ISTTEMP"
# id: ZWISCHENEINSPRITZUNG_ISTTEMP
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("ZWISCHENEINSPRITZUNG_ISTTEMP"));
# return {};
- platform: template
name: "ACCESS_EEPROM"
id: ACCESS_EEPROM
icon: "mdi:memory"
accuracy_decimals: 0
- platform: template
name: "JAHR"
id: JAHR
icon: "mdi:calendar_month"
accuracy_decimals: 0
update_interval: 1440min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("JAHR"));
return {};
- platform: template
name: "MINUTE"
id: MINUTE
icon: "mdi:schedule"
accuracy_decimals: 0
## TEST ATTENTION
update_interval: never
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("MINUTE"));
return {};
- platform: template
name: "MONAT"
id: MONAT
icon: "mdi:calendar_month"
accuracy_decimals: 0
update_interval: 1440min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("MONAT"));
return {};
- platform: template
name: "SEKUNDE"
id: SEKUNDE
icon: "mdi:schedule"
accuracy_decimals: 0
update_interval: never
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("SEKUNDE"));
return {};
- platform: template
name: "STUNDE"
id: STUNDE
icon: "mdi:schedule"
accuracy_decimals: 0
update_interval: 60min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("STUNDE"));
return {};
- platform: template
name: "TAG"
id: TAG
icon: "mdi:calendar_month"
accuracy_decimals: 0
update_interval: 1440min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("TAG"));
return {};
# - platform: template
# name: "WP_STATUS"
# id: WP_STATUS
# accuracy_decimals: 0
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_manager], GetElsterIndex("WP_STATUS"));
# return {};
- platform: template
name: "EVU_SPERRE_AKTIV_MANAGER"
id: EVU_SPERRE_AKTIV_MANAGER
icon: "mdi:dip-switch"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EVU_SPERRE_AKTIV"));
return {};
#########################################
# #
# HEIZMODUL SENSORS #
# #
#########################################
- platform: template
name: "VERDAMPFERTEMP"
id: VERDAMPFERTEMP
unit_of_measurement: "°C"
icon: "mdi:kettle-steam-outline"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("VERDAMPFERTEMP"));
return {};
# - platform: template
# name: "RUECKLAUFISTTEMP"
# id: RUECKLAUFISTTEMP
# unit_of_measurement: "°C"
# icon: "mdi:waves-arrow-left"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("RUECKLAUFISTTEMP"));
# return {};
- platform: template
name: "VERDICHTER_HEIZMODUL"
id: VERDICHTER_HEIZMODUL
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("VERDICHTER"));
return {};
# - platform: template
# name: "WPVORLAUFIST"
# id: WPVORLAUFIST
# unit_of_measurement: "°C"
# icon: "mdi:thermometer-lines"
# device_class: "temperature"
# state_class: "measurement"
# accuracy_decimals: 1
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WPVORLAUFIST"));
# return {};
- platform: template
name: "ABTAUUNGAKTIV"
id: ABTAUUNGAKTIV
icon: "mdi:description"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("AUSSENTEMP"));
return {};
# - platform: template
# name: "BETRIEBSART_WP"
# id: BETRIEBSART_WP
# icon: "mdi:dip-switch"
# accuracy_decimals: 0
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("BETRIEBSART_WP"));
# return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH"
id: EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH"
id: EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH
unit_of_measurement: Wh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_SUM_KWH"
id: EL_AUFNAHMELEISTUNG_WW_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_WW_SUM_KWH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_TAG_WH"
id: EL_AUFNAHMELEISTUNG_WW_TAG_WH
unit_of_measurement: Wh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_WW_TAG_WH"));
return {};
- platform: template
name: "FATAL_ERROR"
id: FATAL_ERROR
icon: "mdi:alert-circle"
accuracy_decimals: 0
- platform: template
name: "FEHLER_PARAMETERSATZ_IWS"
id: FEHLER_PARAMETERSATZ_IWS
icon: "mdi:alert-circle"
accuracy_decimals: 0
- platform: template
name: "FEHLERMELDUNG"
id: FEHLERMELDUNG
icon: "mdi:alert-circle"
accuracy_decimals: 0
- platform: template
name: "HARDWARE_NUMMER_HEIZMODUL"
id: HARDWARE_NUMMER_HEIZMODUL
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "INDEX_NOT_FOUND_HEIZMODUL"
id: INDEX_NOT_FOUND_HEIZMODUL
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "INITIALISIERUNG_HEIZMODUL"
id: INITIALISIERUNG_HEIZMODUL
icon: "mdi:description"
accuracy_decimals: 0
- platform: template
name: "K_OS_RMX_RESERVE_INFO3"
id: K_OS_RMX_RESERVE_INFO3
icon: "mdi:description"
accuracy_decimals: 0
# - platform: template
# name: "LZ_VERD_1_2_WW_BETRIEB_HEIZMODUL"
# id: LZ_VERD_1_2_WW_BETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_2_WW_BETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_WW_BETRIEB_HEIZMODUL"
# id: LZ_VERD_1_WW_BETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_WW_BETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_WW_BETRIEB_HEIZMODUL"
# id: LZ_VERD_2_WW_BETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 0
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_2_WW_BETRIEB"));
# return {};
- platform: template
name: "PARAMETERSATZ_HEIZMODUL"
id: PARAMETERSATZ_HEIZMODUL
icon: "mdi:alert-circle"
accuracy_decimals: 0
# - platform: template
# name: "SCHALTFKT_IWS"
# id: SCHALTFKT_IWS
# icon: "mdi:description"
# accuracy_decimals: 0
- platform: template
name: "SOFTWARE_NUMMER_HEIZMODUL"
id: SOFTWARE_NUMMER_HEIZMODUL
icon: "mdi:description"
accuracy_decimals: 0
# - platform: template
# name: "SOLAR_KOLLEKTOR_3_I_ANTEIL"
# id: SOLAR_KOLLEKTOR_3_I_ANTEIL
# icon: "mdi:solar-power-variant"
# accuracy_decimals: 0
- platform: template
name: "SPEICHER_STATUS"
id: SPEICHER_STATUS
icon: "mdi:description"
accuracy_decimals: 0
# - platform: template
# name: "STUETZSTELLE_HD1"
# id: STUETZSTELLE_HD1
# icon: "mdi:description"
# accuracy_decimals: 0
# - platform: template
# name: "STUETZSTELLE_HD2"
# id: STUETZSTELLE_HD2
# icon: "mdi:description"
# accuracy_decimals: 0
# - platform: template
# name: "STUETZSTELLE_ND1"
# id: STUETZSTELLE_ND1
# icon: "mdi:description"
# accuracy_decimals: 0
# - platform: template
# name: "STUETZSTELLE_ND2"
# id: STUETZSTELLE_ND2
# icon: "mdi:description"
# accuracy_decimals: 0
- platform: template
name: "WAERMEERTRAG_2WE_HEIZ_SUM_KWH"
id: WAERMEERTRAG_2WE_HEIZ_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_2WE_HEIZ_SUM_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_2WE_WW_SUM_KWH"
id: WAERMEERTRAG_2WE_WW_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_2WE_WW_SUM_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_HEIZ_SUM_KWH"
id: WAERMEERTRAG_HEIZ_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_HEIZ_SUM_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_HEIZ_TAG_WH"
id: WAERMEERTRAG_HEIZ_TAG_WH
unit_of_measurement: Wh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_HEIZ_TAG_WH"));
return {};
- platform: template
name: "WAERMEERTRAG_WW_SUM_KWH"
id: WAERMEERTRAG_WW_SUM_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 0
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_WW_SUM_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_WW_TAG_WH"
id: WAERMEERTRAG_WW_TAG_WH
unit_of_measurement: Wh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 0
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_WW_TAG_WH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH"
id: EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH"
id: EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_SUM_MWH"
id: EL_AUFNAHMELEISTUNG_WW_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_WW_SUM_MWH"));
return {};
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_TAG_KWH"
id: EL_AUFNAHMELEISTUNG_WW_TAG_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("EL_AUFNAHMELEISTUNG_WW_TAG_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_2WE_HEIZ_SUM_MWH"
id: WAERMEERTRAG_2WE_HEIZ_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_2WE_HEIZ_SUM_MWH"));
return {};
- platform: template
name: "WAERMEERTRAG_2WE_WW_SUM_MWH"
id: WAERMEERTRAG_2WE_WW_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_2WE_WW_SUM_MWH"));
return {};
- platform: template
name: "WAERMEERTRAG_HEIZ_SUM_MWH"
id: WAERMEERTRAG_HEIZ_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_HEIZ_SUM_MWH"));
return {};
- platform: template
name: "WAERMEERTRAG_HEIZ_TAG_KWH"
id: WAERMEERTRAG_HEIZ_TAG_KWH
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_HEIZ_TAG_KWH"));
return {};
- platform: template
name: "WAERMEERTRAG_WW_SUM_MWH"
id: WAERMEERTRAG_WW_SUM_MWH
unit_of_measurement: MWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
update_interval: 30min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_WW_SUM_MWH"));
return {};
- platform: template
name: "WAERMEERTRAG_WW_TAG_KWH"
id: WAERMEERTRAG_WW_TAG_KWH
unit_of_measurement: KWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
update_interval: 10min
lambda: |-
readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("WAERMEERTRAG_WW_TAG_KWH"));
return {};
# - platform: template
# name: "LZ_VERD_1_2_HEIZBETRIEB_HEIZMODUL"
# id: LZ_VERD_1_2_HEIZBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_2_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_2_KUEHLBETRIEB_HEIZMODUL"
# id: LZ_VERD_1_2_KUEHLBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_2_KUEHLBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_HEIZBETRIEB_HEIZMODUL"
# id: LZ_VERD_1_HEIZBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_1_KUEHLBETRIEB_HEIZMODUL"
# id: LZ_VERD_1_KUEHLBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_1_KUEHLBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_HEIZBETRIEB_HEIZMODUL"
# id: LZ_VERD_2_HEIZBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: never
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_2_HEIZBETRIEB"));
# return {};
# - platform: template
# name: "LZ_VERD_2_KUEHLBETRIEB_HEIZMODUL"
# id: LZ_VERD_2_KUEHLBETRIEB_HEIZMODUL
# icon: "mdi:timer"
# device_class: "duration"
# state_class: "measurement"
# accuracy_decimals: 3
# update_interval: 10min
# lambda: |-
# readSignal(&CanMembers[cm_heizmodul], GetElsterIndex("LZ_VERD_2_KUEHLBETRIEB"));
# return {};
#########################################
# #
# BERECHNETE SENSOREN #
# #
#########################################
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_SUM"
id: EL_AUFNAHMELEISTUNG_HEIZ_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_SUM"
id: EL_AUFNAHMELEISTUNG_WW_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_INCREASING"
id: EL_AUFNAHMELEISTUNG_HEIZ_INCREASING
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_INCREASING"
id: EL_AUFNAHMELEISTUNG_WW_INCREASING
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "EL_AUFNAHMELEISTUNG_HEIZ_TAG"
id: EL_AUFNAHMELEISTUNG_HEIZ_TAG
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
- platform: template
name: "EL_AUFNAHMELEISTUNG_WW_TAG"
id: EL_AUFNAHMELEISTUNG_WW_TAG
unit_of_measurement: kWh
device_class: energy
icon: "mdi:transmission-tower"
accuracy_decimals: 3
- platform: template
name: "WAERMEERTRAG_2WE_HEIZ_SUM"
id: WAERMEERTRAG_2WE_HEIZ_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_2WE_WW_SUM"
id: WAERMEERTRAG_2WE_WW_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_HEIZ_SUM"
id: WAERMEERTRAG_HEIZ_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_HEIZ_INCREASING"
id: WAERMEERTRAG_HEIZ_INCREASING
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_HEIZ_TAG"
id: WAERMEERTRAG_HEIZ_TAG
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
- platform: template
name: "WAERMEERTRAG_WW_SUM"
id: WAERMEERTRAG_WW_SUM
unit_of_measurement: MWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_WW_INCREASING"
id: WAERMEERTRAG_WW_INCREASING
unit_of_measurement: kWh
device_class: energy
icon: "mdi:heating-coil"
accuracy_decimals: 3
state_class: "total_increasing"
- platform: template
name: "WAERMEERTRAG_WW_TAG"
id: WAERMEERTRAG_WW_TAG
unit_of_measurement: KWh
device_class: energy
icon: "mdi:water-boiler"
accuracy_decimals: 3
- platform: template
name: "COP_WW"
id: COP_WW
icon: "mdi:chart-bell-curve-cumulative"
device_class: "power_factor"
state_class: "measurement"
accuracy_decimals: 2
- platform: template
name: "COP_HEIZ"
id: COP_HEIZ
icon: "mdi:chart-bell-curve-cumulative"
device_class: "power_factor"
state_class: "measurement"
accuracy_decimals: 2
- platform: template
name: "COP_GESAMT"
id: COP_GESAMT
icon: "mdi:chart-bell-curve-cumulative"
device_class: "power_factor"
state_class: "measurement"
accuracy_decimals: 2
#########################################
# #
# Other Sensors #
# #
#########################################
- platform: wifi_signal
name: "WiFi Signal dBm"
icon: "mdi:wifi"
update_interval: 60s
id: wifi_dbm
- platform: template
name: "WiFi Signal"
icon: "mdi:signal"
unit_of_measurement: "%"
update_interval: 60s
id: wifi_percentage
lambda: |-
float dBm = id(wifi_dbm).state;
float MIN_DBM = -100.0; // Minimum RSSI in dBm
float MAX_DBM = -30.0; // Maximum RSSI in dBm
if (dBm < MIN_DBM) dBm = MIN_DBM;
if (dBm > MAX_DBM) dBm = MAX_DBM;
return ((dBm - MIN_DBM) / (MAX_DBM - MIN_DBM)) * 100;
#########################################
# #
# TEXT SENSOREN #
# #
#########################################
text_sensor:
#########################################
# #
# HOME ASSISTANT TEXT SENSOREN #
# #
#########################################
- platform: homeassistant
name: "Wärmepumpe Datum Setpoint"
id: warmepumpe_datum
entity_id: input_datetime.warmepumpe_datum
- platform: homeassistant
name: "Wärmepumpe Uhrzeit Setpoint"
id: warmepumpe_uhrzeit
entity_id: input_datetime.warmepumpe_uhrzeit
- platform: homeassistant
name: "EINSTELL_SPEICHERSOLLTEMP_SET"
id: EINSTELL_SPEICHERSOLLTEMP_SET
entity_id: input_number.speichersolltemp_set
on_value:
then:
lambda: |-
if(atoi(x.c_str()) != 20) {
char temp[3];
strncpy(temp, x.c_str(), sizeof(temp)-1);
temp[2] ='\0';
const char* ctemp = temp;
writeSignal(&CanMembers[cm_manager], GetElsterIndex("EINSTELL_SPEICHERSOLLTEMP"), ctemp);
id(EINSTELL_SPEICHERSOLLTEMP).update();
id(SPEICHERISTTEMP).update();
id(SPEICHERSOLLTEMP).update();
}
return;
- platform: homeassistant
name: "EINSTELL_SPEICHERSOLLTEMP2_SET"
id: EINSTELL_SPEICHERSOLLTEMP2_SET
entity_id: input_number.speichersolltemp2_set
on_value:
then:
lambda: |-
if(atoi(x.c_str()) != 20) {
char temp[3];
strncpy(temp, x.c_str(), sizeof(temp)-1);
temp[2] ='\0';
const char* ctemp = temp;
writeSignal(&CanMembers[cm_manager], GetElsterIndex("EINSTELL_SPEICHERSOLLTEMP2"), ctemp);
id(EINSTELL_SPEICHERSOLLTEMP2).update();
id(SPEICHERISTTEMP).update();
id(SPEICHERSOLLTEMP).update();
}
return;
- platform: homeassistant
name: "RAUMSOLLTEMP_I_SET"
id: RAUMSOLLTEMP_I_SET
entity_id: input_number.raumsolltemp_i_set
on_value:
then:
lambda: |-
if(atoi(x.c_str()) != 20) {
char temp[3];
strncpy(temp, x.c_str(), sizeof(temp)-1);
// temp[2] ='\0';
const char* ctemp = temp;
writeSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_I"), ctemp);
id(RAUMSOLLTEMP_I).update();
id(RUECKLAUFISTTEMP_KESSEL).update();
id(HILFSKESSELSOLL).update();
}
return;
- platform: homeassistant
name: "RAUMSOLLTEMP_NACHT_SET"
id: RAUMSOLLTEMP_NACHT_SET
entity_id: input_number.raumsolltemp_nacht_set
on_value:
then:
lambda: |-
if(atoi(x.c_str()) != 20) {
char temp[3];
strncpy(temp, x.c_str(), sizeof(temp)-1);
// temp[2] ='\0';
const char* ctemp = temp;
writeSignal(&CanMembers[cm_manager], GetElsterIndex("RAUMSOLLTEMP_NACHT"), ctemp);
id(RAUMSOLLTEMP_NACHT).update();
id(RUECKLAUFISTTEMP_KESSEL).update();
id(HILFSKESSELSOLL).update();
}
return;
#########################################
# #
# MANAGER TEXT SENSORS #
# #
#########################################
- platform: template
name: "GERAETE_ID_MANAGER"
id: GERAETE_ID_MANAGER
icon: "mdi:description"
- platform: template
name: "PROGRAMMSCHALTER"
id: PROGRAMMSCHALTER
icon: "mdi:switch"
update_interval: 60min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("PROGRAMMSCHALTER"));
return {};
- platform: template
name: "SOMMERBETRIEB"
id: SOMMERBETRIEB
icon: "mdi:weather-sunny"
update_interval: 600min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("SOMMERBETRIEB"));
return {};
- platform: template
name: "WW_ECO"
id: WW_ECO
icon: "mdi:leaf-circle-outline"
update_interval: 600min
lambda: |-
readSignal(&CanMembers[cm_manager], GetElsterIndex("WW_ECO"));
return {};
#########################################
# #
# HEIZMODUL TEXT SENSORS #
# #
#########################################
- platform: template
name: "GERAETE_ID_HEIZMODUL"
id: GERAETE_ID_HEIZMODUL
icon: "mdi:description"
#########################################
# #
# BERECHNETE TEXT SENSORS #
# #
#########################################
- platform: template
name: "DATUM"
id: DATUM
icon: "mdi:calendar"
- platform: template
name: "ZEIT"
id: ZEIT
icon: "mdi:clock"
#########################################
# #
# BUTTON #
# #
#########################################
button:
- platform: template
name: "Update Uhrzeit"
id: update_uhrzeit
on_press:
then:
lambda: |-
ESP_LOGI("WRITE UHRZEIT VIA BUTTON", "%s", id(warmepumpe_datum).state.c_str());
char stunde[3];
char minute[3];
char sekunde[3];
strncpy(stunde, id(warmepumpe_uhrzeit).state.c_str(), sizeof(stunde)-1);
stunde[2] ='\0';
strncpy(minute, id(warmepumpe_uhrzeit).state.c_str()+3, sizeof(minute)-1);
minute[2] ='\0';
strncpy(sekunde, id(warmepumpe_uhrzeit).state.c_str()+6, sizeof(sekunde)-1);
sekunde[2] ='\0';
const char* cstunde = stunde;
const char* cminute = minute;
const char* csekunde = sekunde;
ESP_LOGI("WRITE", "Stunde: %s, Minute: %s, Sekunde: %s", cstunde, cminute, csekunde);
writeSignal(&CanMembers[cm_manager], GetElsterIndex("STUNDE"), cstunde);
id(STUNDE).update();
writeSignal(&CanMembers[cm_manager], GetElsterIndex("MINUTE"), cminute);
id(MINUTE).update();
writeSignal(&CanMembers[cm_manager], GetElsterIndex("SEKUNDE"), csekunde);
id(SEKUNDE).update();
- platform: template
name: "Update Datum"
id: update_datum
on_press:
then:
lambda: |-
ESP_LOGI("WRITE DATUM VIA BUTTON", "%s", id(warmepumpe_datum).state.c_str());
char year[3];
char month[3];
char day[3];
strncpy(year, id(warmepumpe_datum).state.c_str()+2, sizeof(year)-1);
year[2] ='\0';
strncpy(month, id(warmepumpe_datum).state.c_str()+5, sizeof(month)-1);
month[2] ='\0';
strncpy(day, id(warmepumpe_datum).state.c_str()+8, sizeof(day)-1);
day[2] ='\0';
const char* cyear = year;
const char* cmonth = month;
const char* cday = day;
ESP_LOGI("WRITE", "Year: %s, Month: %s, Day: %s", cyear, cmonth, cday);
writeSignal(&CanMembers[cm_manager], GetElsterIndex("JAHR"), cyear);
id(JAHR).update();
writeSignal(&CanMembers[cm_manager], GetElsterIndex("MONAT"), cmonth);
id(MONAT).update();
writeSignal(&CanMembers[cm_manager], GetElsterIndex("TAG"), cday);
id(TAG).update();
#########################################
# #
# SPI Konfiguration #
# #
#########################################
spi:
id: McpSpi
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
#########################################
# #
# canbus Konfiguration #
# #
#########################################
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO4
can_id: 700
use_extended_id: false
bit_rate: 20kbps
on_frame:
#########################################
# #
# KESSEL Nachrichten #
# #
#########################################
- can_id: 0x180
then:
- lambda: |-
unsigned short canId = 180;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
if(ei->Name == "AUSSENTEMP") {
id(AUSSENTEMP).publish_state(std::stof(value));
return;
}
if(ei->Name == "BUSKONTROLLE") {
id(BUSKONTROLLE).publish_state(std::stoi(value));
return;
}
if(ei->Name == "EINSTELL_SPEICHERSOLLTEMP") {
id(EINSTELL_SPEICHERSOLLTEMP).publish_state(std::stof(value));
return;
}
if(ei->Name == "EINSTELL_SPEICHERSOLLTEMP2") {
id(EINSTELL_SPEICHERSOLLTEMP2).publish_state(std::stof(value));
return;
}
if(ei->Name == "HILFSKESSELSOLL") {
id(HILFSKESSELSOLL).publish_state(std::stof(value));
return;
}
if(ei->Name == "INITIALISIERUNG") {
id(INITIALISIERUNG_KESSEL).publish_state(std::stoi(value));
return;
}
if(ei->Name == "KESSELSOLLTEMP") {
id(KESSELSOLLTEMP).publish_state(std::stof(value));
return;
}
if(ei->Name == "RUECKLAUFISTTEMP") {
id(RUECKLAUFISTTEMP_KESSEL).publish_state(std::stof(value));
return;
}
if(ei->Name == "SPEICHERISTTEMP") {
id(SPEICHERISTTEMP).publish_state(std::stof(value));
return;
}
if(ei->Name == "SPEICHERSOLLTEMP") {
id(SPEICHERSOLLTEMP).publish_state(std::stof(value));
return;
}
// if(ei->Name == "VORLAUFSOLLTEMP") {
// id(VORLAUFSOLLTEMP).publish_state(std::stof(value));
// return;
// }
// if(ei->Name == "WPVORLAUFIST") {
// id(WPVORLAUFIST_KESSEL).publish_state(std::stof(value));
// return;
// }
#########################################
# #
# MANAGER Nachrichten #
# #
#########################################
- can_id: 0x480
then:
- lambda: |-
unsigned short canId = 480;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
if(ei->Name == "ACCESS_EEPROM") {
id(ACCESS_EEPROM).publish_state(std::stoi(value));
return;
}
if(ei->Name == "ANFAHRENT") {
id(ANFAHRENT).publish_state(std::stoi(value));
return;
}
if(ei->Name == "GERAETEKONFIGURATION") {
id(GERAETEKONFIGURATION).publish_state(std::stoi(value));
return;
}
if(ei->Name == "GERAETE_ID") {
id(GERAETE_ID_MANAGER).publish_state(value);
return;
}
if(ei->Name == "HARDWARE_NUMMER") {
id(HARDWARE_NUMMER_MANAGER).publish_state(std::stoi(value));
return;
}
if(ei->Name == "INDEX_NOT_FOUND") {
id(INDEX_NOT_FOUND_MANAGER).publish_state(std::stoi(value));
return;
}
if(ei->Name == "INITIALISIERUNG") {
id(INITIALISIERUNG_MANAGER).publish_state(std::stoi(value));
return;
}
if(ei->Name == "JAHR") {
id(JAHR).publish_state(std::stoi(value));
publishDate();
return;
}
if(ei->Name == "LAUFZEIT_VERD_BEI_SPEICHERBEDARF") {
id(LAUFZEIT_VERD_BEI_SPEICHERBEDARF).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "LUEFT_PASSIVKUEHLUNG_UEBER_FORTLUEFTER") {
// id(LUEFT_PASSIVKUEHLUNG_UEBER_FORTLUEFTER).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_2_HEIZBETRIEB") {
// id(LZ_VERD_1_2_HEIZBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_2_KUEHLBETRIEB") {
// id(LZ_VERD_1_2_KUEHLBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_2_WW_BETRIEB") {
// id(LZ_VERD_1_2_WW_BETRIEB_MANAGER).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_HEIZBETRIEB") {
// id(LZ_VERD_1_HEIZBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_KUEHLBETRIEB") {
// id(LZ_VERD_1_KUEHLBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_WW_BETRIEB") {
// id(LZ_VERD_1_WW_BETRIEB_MANAGER).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_HEIZBETRIEB") {
// id(LZ_VERD_2_HEIZBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_KUEHLBETRIEB") {
// id(LZ_VERD_2_KUEHLBETRIEB_MANAGER).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_WW_BETRIEB") {
// id(LZ_VERD_2_WW_BETRIEB_MANAGER).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "MINUTE") {
id(MINUTE).publish_state(std::stoi(value));
publishTime();
return;
}
if(ei->Name == "MONAT") {
id(MONAT).publish_state(std::stoi(value));
publishDate();
return;
}
if(ei->Name == "PARAMETERSATZ") {
id(PARAMETERSATZ_MANAGER).publish_state(std::stoi(value));
return;
}
if(ei->Name == "PROGRAMMSCHALTER") {
id(PROGRAMMSCHALTER).publish_state(value);
return;
}
// if(ei->Name == "QUELLENPUMPEN_STATUS") {
// id(QUELLENPUMPEN_STATUS).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "RAUMISTTEMP") {
// id(RAUMISTTEMP).publish_state(std::stof(value));
// return;
// }
if(ei->Name == "RAUMSOLLTEMP_I") {
id(RAUMSOLLTEMP_I).publish_state(std::stof(value));
return;
}
// if(ei->Name == "RAUMSOLLTEMP_II") {
// id(RAUMSOLLTEMP_II).publish_state(std::stof(value));
// return;
// }
// if(ei->Name == "RAUMSOLLTEMP_III") {
// id(RAUMSOLLTEMP_III).publish_state(std::stof(value));
// return;
// }
if(ei->Name == "RAUMSOLLTEMP_NACHT") {
id(RAUMSOLLTEMP_NACHT).publish_state(std::stof(value));
return;
}
// if(ei->Name == "RUECKLAUFISTTEMP") {
// id(RUECKLAUFISTTEMP_MANAGER).publish_state(std::stof(value));
// return;
// }
// if(ei->Name == "SAMMEL_RELAISSTATUS") {
// id(SAMMEL_RELAISSTATUS).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "SEKUNDE") {
id(SEKUNDE).publish_state(std::stoi(value));
publishTime();
return;
}
if(ei->Name == "SOFTWARE_NUMMER") {
id(SOFTWARE_NUMMER_MANAGER).publish_state(std::stoi(value));
return;
}
if(ei->Name == "SOFTWARE_VERSION") {
id(SOFTWARE_VERSION).publish_state(std::stoi(value));
return;
}
if(ei->Name == "SOMMERBETRIEB") {
id(SOMMERBETRIEB).publish_state(value);
return;
}
if(ei->Name == "SPEICHERBEDARF") {
id(SPEICHERBEDARF).publish_state(std::stoi(value));
return;
}
if(ei->Name == "STUNDE") {
id(STUNDE).publish_state(std::stoi(value));
publishTime();
return;
}
if(ei->Name == "TAG") {
id(TAG).publish_state(std::stoi(value));
publishDate();
return;
}
if(ei->Name == "TEILVORRANG_WW") {
id(TEILVORRANG_WW).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "TEMPORALE_LUEFTUNGSSTUFE_DAUER") {
// id(TEMPORALE_LUEFTUNGSSTUFE_DAUER).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "VERDICHTER") {
id(VERDICHTER_MANAGER).publish_state(std::stof(value));
return;
}
if(ei->Name == "VERSTELLTE_RAUMSOLLTEMP") {
id(VERSTELLTE_RAUMSOLLTEMP).publish_state(std::stof(value));
return;
}
// if(ei->Name == "WP_STATUS") {
// id(WP_STATUS).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "WPVORLAUFIST") {
// id(WPVORLAUFIST_MANAGER).publish_state(std::stof(value));
// return;
// }
if(ei->Name == "WW_ECO") {
id(WW_ECO).publish_state(value);
return;
}
// if(ei->Name == "ZWISCHENEINSPRITZUNG_ISTTEMP") {
// id(ZWISCHENEINSPRITZUNG_ISTTEMP).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "EVU_SPERRE_AKTIV") {
id(EVU_SPERRE_AKTIV_MANAGER).publish_state(std::stoi(value));
return;
}
#########################################
# #
# HEIZMODUL Nachrichten #
# #
#########################################
- can_id: 0x500
then:
- lambda: |-
unsigned short canId = 500;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
if(ei->Name == "VERDAMPFERTEMP") {
id(VERDAMPFERTEMP).publish_state(std::stof(value));
return;
}
if(ei->Name == "INITIALISIERUNG") {
id(INITIALISIERUNG_HEIZMODUL).publish_state(std::stoi(value));
return;
}
if(ei->Name == "SPEICHER_STATUS") {
id(SPEICHER_STATUS).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "RUECKLAUFISTTEMP") {
// id(RUECKLAUFISTTEMP).publish_state(std::stof(value));
// return;
// }
if(ei->Name == "VERDICHTER") {
id(VERDICHTER_HEIZMODUL).publish_state(std::stof(value));
return;
}
// if(ei->Name == "WPVORLAUFIST") {
// id(WPVORLAUFIST).publish_state(std::stof(value));
// return;
// }
if(ei->Name == "ABTAUUNGAKTIV") {
id(ABTAUUNGAKTIV).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "BETRIEBSART_WP") {
// id(ABTAUUNGAKTIV).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH") {
id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH).publish_state(std::stoi(value));
id(EL_AUFNAHMELEISTUNG_HEIZ_SUM).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH).state + id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH).state / 1000 );
update_COP_HEIZ();
update_COP_GESAMT();
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH") {
id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH).publish_state(std::stoi(value));
id(EL_AUFNAHMELEISTUNG_HEIZ_TAG).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH).state / 1000);
id(EL_AUFNAHMELEISTUNG_HEIZ_INCREASING).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH).state / 1000);
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_WW_SUM_KWH") {
id(EL_AUFNAHMELEISTUNG_WW_SUM_KWH).publish_state(std::stoi(value));
id(EL_AUFNAHMELEISTUNG_WW_SUM).publish_state(id(EL_AUFNAHMELEISTUNG_WW_SUM_MWH).state + id(EL_AUFNAHMELEISTUNG_WW_SUM_KWH).state / 1000);
update_COP_WW();
update_COP_GESAMT();
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_WW_TAG_WH") {
id(EL_AUFNAHMELEISTUNG_WW_TAG_WH).publish_state(std::stoi(value));
id(EL_AUFNAHMELEISTUNG_WW_TAG).publish_state(id(EL_AUFNAHMELEISTUNG_WW_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_WW_TAG_WH).state / 1000);
id(EL_AUFNAHMELEISTUNG_WW_INCREASING).publish_state(id(EL_AUFNAHMELEISTUNG_WW_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_WW_TAG_WH).state / 1000);
return;
}
if(ei->Name == "FATAL_ERROR") {
id(FATAL_ERROR).publish_state(std::stoi(value));
return;
}
if(ei->Name == "FEHLER_PARAMETERSATZ_IWS") {
id(FEHLER_PARAMETERSATZ_IWS).publish_state(std::stoi(value));
return;
}
if(ei->Name == "FEHLERMELDUNG") {
id(FEHLERMELDUNG).publish_state(std::stoi(value));
return;
}
if(ei->Name == "HARDWARE_NUMMER") {
id(HARDWARE_NUMMER_HEIZMODUL).publish_state(std::stoi(value));
return;
}
if(ei->Name == "INDEX_NOT_FOUND") {
id(INDEX_NOT_FOUND_HEIZMODUL).publish_state(std::stoi(value));
return;
}
if(ei->Name == "K_OS_RMX_RESERVE_INFO3") {
id(K_OS_RMX_RESERVE_INFO3).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "LZ_VERD_1_2_WW_BETRIEB") {
// id(LZ_VERD_1_2_WW_BETRIEB_HEIZMODUL).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_WW_BETRIEB") {
// id(LZ_VERD_1_WW_BETRIEB_HEIZMODUL).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_WW_BETRIEB") {
// id(LZ_VERD_2_WW_BETRIEB_HEIZMODUL).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "PARAMETERSATZ") {
id(PARAMETERSATZ_HEIZMODUL).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "SCHALTFKT_IWS") {
// id(SCHALTFKT_IWS).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "SOFTWARE_NUMMER") {
id(SOFTWARE_NUMMER_HEIZMODUL).publish_state(std::stoi(value));
return;
}
// if(ei->Name == "SOLAR_KOLLEKTOR_3_I_ANTEIL") {
// id(SOLAR_KOLLEKTOR_3_I_ANTEIL).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "STUETZSTELLE_HD1") {
// id(STUETZSTELLE_HD1).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "STUETZSTELLE_HD2") {
// id(STUETZSTELLE_HD2).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "STUETZSTELLE_ND1") {
// id(STUETZSTELLE_ND1).publish_state(std::stoi(value));
// return;
// }
// if(ei->Name == "STUETZSTELLE_ND2") {
// id(STUETZSTELLE_ND2).publish_state(std::stoi(value));
// return;
// }
if(ei->Name == "WAERMEERTRAG_2WE_HEIZ_SUM_KWH") {
id(WAERMEERTRAG_2WE_HEIZ_SUM_KWH).publish_state(std::stoi(value));
id(WAERMEERTRAG_2WE_HEIZ_SUM).publish_state(id(WAERMEERTRAG_2WE_HEIZ_SUM_MWH).state+id(WAERMEERTRAG_2WE_HEIZ_SUM_KWH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_2WE_WW_SUM_KWH") {
id(WAERMEERTRAG_2WE_WW_SUM_KWH).publish_state(std::stoi(value));
id(WAERMEERTRAG_2WE_WW_SUM).publish_state(id(WAERMEERTRAG_2WE_WW_SUM_MWH).state+id(WAERMEERTRAG_2WE_WW_SUM_KWH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_HEIZ_SUM_KWH") {
id(WAERMEERTRAG_HEIZ_SUM_KWH).publish_state(std::stoi(value));
id(WAERMEERTRAG_HEIZ_SUM).publish_state(id(WAERMEERTRAG_HEIZ_SUM_MWH).state+id(WAERMEERTRAG_HEIZ_SUM_KWH).state/1000);
update_COP_HEIZ();
update_COP_GESAMT();
return;
}
if(ei->Name == "WAERMEERTRAG_HEIZ_TAG_WH") {
id(WAERMEERTRAG_HEIZ_TAG_WH).publish_state(std::stoi(value));
id(WAERMEERTRAG_HEIZ_TAG).publish_state(id(WAERMEERTRAG_HEIZ_TAG_KWH).state+id(WAERMEERTRAG_HEIZ_TAG_WH).state/1000);
id(WAERMEERTRAG_HEIZ_INCREASING).publish_state(id(WAERMEERTRAG_HEIZ_TAG_KWH).state+id(WAERMEERTRAG_HEIZ_TAG_WH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_WW_SUM_KWH") {
id(WAERMEERTRAG_WW_SUM_KWH).publish_state(std::stoi(value));
id(WAERMEERTRAG_WW_SUM).publish_state(id(WAERMEERTRAG_WW_SUM_MWH).state+id(WAERMEERTRAG_WW_SUM_KWH).state/1000);
update_COP_WW();
update_COP_GESAMT();
return;
}
if(ei->Name == "WAERMEERTRAG_WW_TAG_WH") {
id(WAERMEERTRAG_WW_TAG_WH).publish_state(std::stoi(value));
id(WAERMEERTRAG_WW_TAG).publish_state(id(WAERMEERTRAG_WW_TAG_KWH).state+id(WAERMEERTRAG_WW_TAG_WH).state/1000);
id(WAERMEERTRAG_WW_INCREASING).publish_state(id(WAERMEERTRAG_WW_TAG_KWH).state+id(WAERMEERTRAG_WW_TAG_WH).state/1000);
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH") {
id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH).publish_state(std::stod(value));
id(EL_AUFNAHMELEISTUNG_HEIZ_SUM).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_MWH).state+id(EL_AUFNAHMELEISTUNG_HEIZ_SUM_KWH).state/1000);
update_COP_HEIZ();
update_COP_GESAMT();
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH") {
id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH).publish_state(std::stod(value));
id(EL_AUFNAHMELEISTUNG_HEIZ_TAG).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH).state+id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH).state/1000);
id(EL_AUFNAHMELEISTUNG_HEIZ_INCREASING).publish_state(id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_HEIZ_TAG_WH).state / 1000);
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_WW_SUM_MWH") {
id(EL_AUFNAHMELEISTUNG_WW_SUM_MWH).publish_state(std::stod(value));
id(EL_AUFNAHMELEISTUNG_WW_SUM).publish_state(id(EL_AUFNAHMELEISTUNG_WW_SUM_MWH).state+id(EL_AUFNAHMELEISTUNG_WW_SUM_KWH).state/1000);
update_COP_WW();
update_COP_GESAMT();
return;
}
if(ei->Name == "EL_AUFNAHMELEISTUNG_WW_TAG_KWH") {
id(EL_AUFNAHMELEISTUNG_WW_TAG_KWH).publish_state(std::stod(value));
id(EL_AUFNAHMELEISTUNG_WW_TAG).publish_state(id(EL_AUFNAHMELEISTUNG_WW_TAG_KWH).state+id(EL_AUFNAHMELEISTUNG_WW_TAG_WH).state/1000);
id(EL_AUFNAHMELEISTUNG_WW_INCREASING).publish_state(id(EL_AUFNAHMELEISTUNG_WW_TAG_KWH).state + id(EL_AUFNAHMELEISTUNG_WW_TAG_WH).state / 1000);
return;
}
if(ei->Name == "WAERMEERTRAG_2WE_HEIZ_SUM_MWH") {
id(WAERMEERTRAG_2WE_HEIZ_SUM_MWH).publish_state(std::stod(value));
id(WAERMEERTRAG_2WE_HEIZ_SUM).publish_state(id(WAERMEERTRAG_2WE_HEIZ_SUM_MWH).state+id(WAERMEERTRAG_2WE_HEIZ_SUM_KWH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_2WE_WW_SUM_MWH") {
id(WAERMEERTRAG_2WE_WW_SUM_MWH).publish_state(std::stod(value));
id(WAERMEERTRAG_2WE_WW_SUM).publish_state(id(WAERMEERTRAG_2WE_WW_SUM_MWH).state+id(WAERMEERTRAG_2WE_WW_SUM_KWH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_HEIZ_SUM_MWH") {
id(WAERMEERTRAG_HEIZ_SUM_MWH).publish_state(std::stod(value));
id(WAERMEERTRAG_HEIZ_SUM).publish_state(id(WAERMEERTRAG_HEIZ_SUM_MWH).state+id(WAERMEERTRAG_HEIZ_SUM_KWH).state/1000);
update_COP_HEIZ();
update_COP_GESAMT();
return;
}
if(ei->Name == "WAERMEERTRAG_HEIZ_TAG_KWH") {
id(WAERMEERTRAG_HEIZ_TAG_KWH).publish_state(std::stod(value));
id(WAERMEERTRAG_HEIZ_TAG).publish_state(id(WAERMEERTRAG_HEIZ_TAG_KWH).state+id(WAERMEERTRAG_HEIZ_TAG_WH).state/1000);
id(WAERMEERTRAG_HEIZ_INCREASING).publish_state(id(WAERMEERTRAG_HEIZ_TAG_KWH).state+id(WAERMEERTRAG_HEIZ_TAG_WH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_WW_SUM_MWH") {
id(WAERMEERTRAG_WW_SUM_MWH).publish_state(std::stod(value));
id(WAERMEERTRAG_WW_SUM).publish_state(id(WAERMEERTRAG_WW_SUM_MWH).state+id(WAERMEERTRAG_WW_SUM_KWH).state/1000);
return;
}
if(ei->Name == "WAERMEERTRAG_WW_TAG_KWH") {
id(WAERMEERTRAG_WW_TAG_KWH).publish_state(std::stod(value));
id(WAERMEERTRAG_WW_TAG).publish_state(id(WAERMEERTRAG_WW_TAG_KWH).state+id(WAERMEERTRAG_WW_TAG_WH).state/1000);
id(WAERMEERTRAG_WW_INCREASING).publish_state(id(WAERMEERTRAG_WW_TAG_KWH).state+id(WAERMEERTRAG_WW_TAG_WH).state/1000);
return;
}
// if(ei->Name == "LZ_VERD_1_2_HEIZBETRIEB") {
// id(LZ_VERD_1_2_HEIZBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_2_KUEHLBETRIEB") {
// id(LZ_VERD_1_2_KUEHLBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_HEIZBETRIEB") {
// id(LZ_VERD_1_HEIZBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_1_KUEHLBETRIEB") {
// id(LZ_VERD_1_KUEHLBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_HEIZBETRIEB") {
// id(LZ_VERD_2_HEIZBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
// if(ei->Name == "LZ_VERD_2_KUEHLBETRIEB") {
// id(LZ_VERD_2_KUEHLBETRIEB_HEIZMODUL).publish_state(std::stod(value));
// return;
// }
if(ei->Name == "GERAETE_ID") {
id(GERAETE_ID_HEIZMODUL).publish_state(value);
return;
}
#########################################
# #
# Sonstige Nachrichten #
# #
#########################################
- can_id: 0x000
then:
- lambda: |-
unsigned short canId = 000;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x100
then:
- lambda: |-
unsigned short canId = 100;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x301
then:
- lambda: |-
unsigned short canId = 301;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x302
then:
- lambda: |-
unsigned short canId = 302;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x509
then:
- lambda: |-
unsigned short canId = 509;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x514
then:
- lambda: |-
unsigned short canId = 514;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x601
then:
- lambda: |-
unsigned short canId = 601;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x602
then:
- lambda: |-
unsigned short canId = 602;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x603
then:
- lambda: |-
unsigned short canId = 603;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x680
then:
- lambda: |-
unsigned short canId = 680;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
- can_id: 0x700
then:
- lambda: |-
unsigned short canId = 700;
std::string value;
const ElsterIndex* ei = processCanMessage(canId, value, x);
Meine Input-Numbers & Templates
Einige der Templates für das Wetter findest du im Blog-Beitrag dazu, die übrigens Helfer (wenn auch nicht alle) lasse ich dir hier mal als Datei da:
sensor:
- platform: template
sensors:
programmschalter_with_icon:
friendly_name: "Programmschalter with Icon"
value_template: "{{ states('sensor.heatingpump_programmschalter') }}"
icon_template: >-
{% if is_state('sensor.heatingpump_programmschalter', 'Notbetrieb') %}
mdi:power-off
{% elif is_state('sensor.heatingpump_programmschalter', 'Bereitschaft') %}
mdi:flash
{% elif is_state('sensor.heatingpump_programmschalter', 'Automatik') %}
mdi:weather-sunny
{% elif is_state('sensor.heatingpump_programmschalter', 'Tagbetrieb') %}
mdi:white-balance-sunny
{% elif is_state('sensor.heatingpump_programmschalter', 'Absenkbetrieb') %}
mdi:thermometer-chevron-down
{% elif is_state('sensor.heatingpump_programmschalter', 'Warmwasser') %}
mdi:water
{% else %}
mdi:help-circle
{% endif %}
sommerbetrieb_text:
unique_id: 0c0078f8-8347-4b47-8bff-8510815b71f3
friendly_name: "Betriebsart"
value_template: >-
{% if is_state('sensor.sommerbetrieb', 'on') %}
Sommerbetrieb
{% else %}
Normalbetrieb
{% endif %}
icon_template: >-
{% if is_state('sensor.sommerbetrieb', 'on') %}
mdi:white-balance-sunny
{% else %}
mdi:circle-outline
{% endif %}
waermepumpe_status:
friendly_name: "Wärmepumpe Status"
value_template: >-
{% if is_state('sensor.heatingpump_abtauungaktiv', '768') %}
Abtauen
{% elif is_state('sensor.heatingpump_teilvorrang_ww', '256') %}
Warmwasser-Vorrang
{% elif is_state('sensor.heatingpump_abtauungaktiv', '512') or is_state('sensor.heatingpump_abtauungaktiv', '256') %}
Läuft
{% elif is_state('sensor.heatingpump_abtauungaktiv', '0') %}
Standby
{% else %}
Unbekannt
{% endif %}
icon_template: >-
{% if is_state('sensor.heatingpump_abtauungaktiv', '768') %}
mdi:car-defrost-rear
{% elif is_state('sensor.heatingpump_abtauungaktiv', '512') or is_state('sensor.heatingpump_abtauungaktiv', '256') %}
mdi:heat-pump-outline
{% elif is_state('sensor.heatingpump_abtauungaktiv', '0') %}
mdi:power-standby
{% else %}
mdi:help-box-outline
{% endif %}
input_number:
speichersolltemp2_set:
name: "SPEICHERSOLLTEMP2_SET"
initial: 20
min: 20
max: 60
mode: box
step: 1
unit_of_measurement: "°C"
icon: mdi:thermometer-low
speichersolltemp_set:
name: "SPEICHERSOLLTEMP_SET"
initial: 20
min: 20
max: 60
mode: box
step: 1
unit_of_measurement: "°C"
icon: mdi:thermometer-high
raumsolltemp_i_set:
name: "RAUMSOLLTEMP_I_SET"
initial: 20
min: 20
max: 60
mode: box
step: 1
unit_of_measurement: "°C"
icon: mdi:thermometer-high
raumsolltemp_nacht_set:
name: "RAUMSOLLTEMP_NACHT_SET"
initial: 20
min: 20
max: 60
mode: box
step: 1
unit_of_measurement: "°C"
icon: mdi:thermometer-high
Diese Packst du in /homeassistant/packages/ha_stiebel_control.yaml und fügst danach (falls noch nicht vorhanden) den Eintrag in diene Configuration.yaml hinzu:
homeassistant: packages: !include_dir_named packages
Nach einem Neustart sollten die Helfer angelegt sein!
Dashboard

Und hier noch, der Code des Keller-Dashboards (mit Apex-Charts)
Um solchen Dashboard-Code einzufügen, erstelle dir am besten ein den Einstellungen von Home Assistant zuerst ein neues Dashboard (Dann kannst du es auch einfach wieder löschen).
In diesem neuen Dashboard gehst du in den Bearbeiten-Modus, dann oben rechts in die Ecke (3 Punkte) und wählst den „Raw-Konfigurationseditor“.
Nun kannst du den Code einfügen und ggf. die Entitäts-IDs auf deine eigenen Anpassen. Suchen und ersetzen kannst du mit „STRG+F“ (Windows) oder „CMD+F“ (Mac).
views:
- title: Heizungskeller
path: heizungskeller
icon: mdi:heating-coil
cards: []
badges:
- type: entity
show_name: false
show_state: true
show_icon: true
entity: sensor.heatingpump_aussentemp
color: ''
- type: entity
show_name: false
show_state: true
show_icon: true
entity: sensor.programmschalter_with_icon
color: ''
- type: entity
entity: sensor.sommerbetrieb_text
type: sections
sections:
- type: grid
cards:
- type: heading
heading: Übersicht
heading_style: title
icon: mdi:hvac
- type: tile
entity: sensor.waermepumpe_status
name: Status
state_content:
- state
- last_updated
layout_options:
grid_columns: 4
grid_rows: 1
- type: tile
entity: sensor.heatingpump_datum
name: Datum
- type: tile
entity: sensor.heatingpump_zeit
name: Zeit
- type: tile
entity: select.heatingpump_programmschalter_set
name: Programm ändern
- type: tile
entity: sensor.sommerbetrieb_text
- type: tile
entity: sensor.heatingpump_fatal_error
color: red
name: Fatal Error
visibility:
- condition: state
entity: sensor.heatingpump_fatal_error
state_not: '0'
- type: tile
entity: sensor.heatingpump_fehlermeldung
name: Fehlermeldung
color: red
visibility:
- condition: state
entity: sensor.heatingpump_fehlermeldung
state_not: '0'
- type: heading
heading: Optimierung
heading_style: title
icon: mdi:transmission-tower-export
- type: tile
entity: input_datetime.start_wp_uberbuchung
layout_options:
grid_columns: full
- type: tile
entity: input_number.wp_gewunschte_rt_max_temp
- type: tile
entity: input_number.wp_gewunschte_ww_max_temp
- show_current: true
show_forecast: true
type: weather-forecast
entity: weather.forecast_home
forecast_type: hourly
name: met.no
- show_current: true
show_forecast: true
type: weather-forecast
entity: weather.openweathermap
forecast_type: hourly
name: OpenWeatherMap
- type: grid
cards:
- type: heading
heading: Warmwasser
heading_style: title
icon: mdi:thermometer-water
- type: custom:swipe-card
cards:
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
xaxis:
labels:
format: HH
legend:
show: false
graph_span: 1d
span:
end: day
show:
last_updated: false
header:
show: true
show_states: true
colorize_states: true
series:
- entity: sensor.heatingpump_el_aufnahmeleistung_ww_increasing
name: Aufnahmeleistung
type: area
group_by:
func: max
duration: 1h
show:
datalabels: false
- entity: sensor.heatingpump_waermeertrag_ww_increasing
name: Wärmeertrag
type: area
group_by:
func: max
duration: 1h
show:
datalabels: false
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
xaxis:
labels:
format: dd
legend:
show: false
graph_span: 7d1s
span:
end: day
show:
last_updated: false
header:
show: true
show_states: true
colorize_states: true
series:
- entity: sensor.heatingpump_el_aufnahmeleistung_ww_increasing
name: Aufnahmeleistung
type: column
group_by:
func: max
duration: 1d
show:
datalabels: true
- entity: sensor.heatingpump_waermeertrag_ww_increasing
name: Wärmeertrag
type: column
group_by:
func: max
duration: 1d
show:
datalabels: true
- type: custom:apexcharts-card
header:
show: true
show_states: true
colorize_states: true
all_series_config:
stroke_width: 1
curve: stepline
series:
- entity: sensor.heatingpump_speicheristtemp
name: Ist
- entity: sensor.heatingpump_speichersolltemp
name: Soll
- type: tile
entity: input_number.warmwassersoll_standard
layout_options:
grid_columns: full
- type: tile
entity: sensor.heatingpump_einstell_speichersolltemp
- type: tile
entity: sensor.heatingpump_einstell_speichersolltemp2
- type: tile
entity: input_number.speichersolltemp_set
name: Set Speichersolltemp
- type: tile
entity: input_number.speichersolltemp2_set
name: Set Speichersolltemp2
- type: grid
cards:
- type: heading
heading: Heizung
heading_style: title
icon: mdi:heating-coil
- type: custom:swipe-card
cards:
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
xaxis:
labels:
format: HH
legend:
show: false
graph_span: 1d
span:
end: day
show:
last_updated: false
header:
show: true
show_states: true
colorize_states: true
series:
- entity: sensor.heatingpump_el_aufnahmeleistung_heiz_increasing
name: Aufnahmeleistung
type: area
group_by:
func: max
duration: 1h
show:
datalabels: false
- entity: sensor.heatingpump_waermeertrag_heiz_increasing
name: Wärmeertrag
type: area
group_by:
func: max
duration: 1h
show:
datalabels: false
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
xaxis:
labels:
format: dd
legend:
show: false
graph_span: 7d1s
span:
end: day
show:
last_updated: false
header:
show: true
show_states: true
colorize_states: true
series:
- entity: sensor.heatingpump_el_aufnahmeleistung_heiz_increasing
name: Aufnahmeleistung
type: column
group_by:
func: max
duration: 1d
show:
datalabels: true
- entity: sensor.heatingpump_waermeertrag_heiz_increasing
name: Wärmeertrag
type: column
group_by:
func: max
duration: 1d
show:
datalabels: true
- type: custom:apexcharts-card
header:
show: true
show_states: true
colorize_states: true
all_series_config:
stroke_width: 1
curve: smooth
series:
- entity: sensor.heatingpump_ruecklaufisttemp_kessel
name: Rücklauf Ist
- entity: sensor.heatingpump_hilfskesselsoll
name: Rücklauf Soll
- type: tile
entity: input_number.raumsoll_tag_standard
layout_options:
grid_columns: full
- type: tile
entity: sensor.heatingpump_raumsolltemp_i
name: WP Raumsoll Tag
- type: tile
entity: sensor.heatingpump_raumsolltemp_nacht
name: WP Raumsoll Nacht
- type: tile
entity: input_number.raumsolltemp_i_set
name: Set Raumsoll Tag
icon: mdi:cog-play-outline
- type: tile
entity: input_number.raumsolltemp_nacht_set
name: Set Raumsoll Nacht
icon: mdi:cog-play-outline
max_columns: 3
Fazit
Zusammenfassend lässt sich sagen, dass die Umrüstung meiner 14 Jahre alten Wärmepumpe mit Home Assistant nicht nur meine Heizkosten gesenkt hat, sondern auch den Komfort in meinem Zuhause erheblich verbessert hat.
Wenn ich das schaffen kann, kannst du das auch! Ich hoffe, meine Erfahrungen inspirieren dich, deine eigenen Smart Home-Projekte anzugehen.
Aber trotzdem, nur um es nochmal zu erwähnen: Wenn du dir wochenlanges rumprobieren sparen willst, lohnt sich die Investition in ein Herstellereigenes-Gateway höchstwahrscheinlich doch.
Vergiss nicht, den Kanal zu abonnieren und die Glocke zu aktivieren, um keine weiteren Tipps und Tricks zu verpassen!



Hallo Zusammen,
Spannend das so etwas geht, denn in der Gateway Kompatibilitätsliste ist z.B. mein Modell nicht dabei (nur der Nachfolger mit dem 3er Modul). Auf jeden Fall vielen Dank für die Informationen zum Einstieg,
Geht das Projekt jemand an? Ich habe eine Stiebel Eltron WPW 10 (Grundwasserwärmepumpe aus 2008). Sie scheint diesen WPM-2 verbaut zu haben, also auch über diesen CANBUS zu funktionieren. Naiv habe ich die Hardware mal eben bestellt. Die Anleitung im Video und im Blog ist etwas dürftig. Würde mich wohler fühlen, wenn ich mich nicht alleine durch das Thema quälen müsste und suche Leidensgenossen.
VG,
Oliver
Hallo Oliver,
ich habe das Video auch gerade gesehen. Und werde mich dem Thema auch annehmen. Habe einen WPW18m und auch dem WPM-2.
Gruß
Dennis
Vielleicht können wir uns gegenseitig hier etwas auf dem Laufenden halte. Ich bin nur eine Woche unterwegs. Das Wochenende darauf würde ich gerne mal zumindest die Hardware löten und an die WP anschließen… Keine Ahnung wie es dann weitergeht. Wenn ich in dem Video von “Adressen” höre. Sind die indviduell? Wie finde ich die raus? Wie lausche ich am Bus und gebe mir den Input aus… viele Fragen noch… Vermutlich die Antwort in dem km langen Blog auf den Simon sich bezog
Hab das Video gesehen, den Canbus Controller bestellt und wollte das heute mal ausprobieren. Die Verkabelung ist eine Sache, die richtigen Pins angeben ist schlecht verständlich.
Aber das schlimmste ist, ich wollte es mal testen und hab die files in esphome kopiert, package folder angelegt und den Code eingetragen um in mal zu installieren. Bekomme hie aber jede Menge Fehlermeldungen wie zb.
Die Files findet er also aber ich hab keine Ahnung warum der Fehler wirft.
Hatte da jemand meh Glück mit?
Hallo Skycryer,
ich hatte das Problem auch und ich verstehe den Chaos in Github nicht!
Du musst den Inhalt aus der Datei heatingpump_en_prod.yaml nehmen. In der Datei heatingpump.yaml sind Funktionen mit deutschen Namen enthalten während die Datei heatingpump.h, die in dem Ordner stiebeltools abliegt, englische Funktionsname führt. Da die Verweise natürlich falsch sind findet der Compiler die Funktionen nicht und geht auf Error.
Ich hoffe ich konnte dir helfen.
Gruß
Viktor