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