homeassistant: # Name of the location where Home Assistant is running name: Home # Location required to calculate the time the sun rises and sets latitude: 50 longitude: 10 # Impacts weather/sunrise data (altitude above sea level in meters) elevation: 73 # metric for Metric, imperial for Imperial unit_system: metric # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones time_zone: Europe/Berlin customize: sensor.Laufzeit: icon: mdi:alert sensor.ANLAGENSTATUS: icon: mdi:stethoscope sensor.KWB_Kesselunterdruck: icon: mdi:speedometer sensor.KWB_boiler: icon: mdi:battery sensor.KWB_Puffer_O: icon: mdi:battery-50 sensor.KWB_Puffer_U: icon: mdi:battery-10 # Enables the frontend frontend: # Enables configuration UI config: http: # Uncomment this to add a password (recommended!) # api_password: PASSWORD # Uncomment this if you are using SSL or running in Docker etc # base_url: example.duckdns.org:8123 # Checks for available updates # https://home-assistant.io/blog/2016/10/25/explaining-the-updater/ updater: # Enables support for tracking state changes over time. history: include: entities: - sensor.anlagenstatus - sensor.betriebsart - sensor.waermeleist - binary_sensor.kessel_io - sensor.kwb_aussen - sensor.yr_temperature - sensor.leistung_mean - sensor.leistung - sensor.pregel - sensor.leistungroh - sensor.anzapfung - sensor.kwb_boiler - sensor.kwb_puffer_o - sensor.kwb_puffer_u - sensor.kwb_kessel - sensor.kwb_kessel_rauch - sensor.kwb_kesselrl # - sensor.kwb_systemp - sensor.kwb_o2 - sensor.kwb_kesselunterdruck - sensor.laufzeit - sensor.sauerstoffgehalt - sensor.glutbett - sensor.kwb_hk3_abackhaus - sensor.kwb_hk4_og - sensor.kwb_hk5_fb_eg - sensor.kwb_hk6_eg - sensor.kwb_stoe - sensor.laufzeit - sensor.mischerzulauf - sensor.status_panel1 - sensor.status_panel2 - sensor.Kesselpumpe - sensor.medianp recorder: purge_interval: 2 purge_keep_days: 3 include: entities: - sensor.anlagenstatus - sensor.betriebsart - sensor.waermeleist - binary_sensor.kessel_io - sensor.kwb_aussen - sensor.yr_temperature - sensor.leistung_mean - sensor.leistungroh - sensor.leistung - sensor.pregel - sensor.anzapfung - sensor.kwb_boiler - sensor.kwb_puffer_o - sensor.kwb_puffer_u - sensor.kwb_kessel - sensor.kwb_kessel_rauch - sensor.kwb_kesselrl - sensor.kwb_o2 - sensor.kwb_kesselunterdruck - sensor.laufzeit - sensor.sauerstoffgehalt - sensor.glutbett - sensor.kwb_hk3_abackhaus - sensor.kwb_hk4_og - sensor.kwb_hk5_fb_eg - sensor.kwb_hk6_eg - sensor.kwb_stoe - sensor.laufzeit - sensor.mischerzulauf - sensor.status_panel1 - sensor.status_panel2 - sensor.Kesselpumpe - sensor.medianp sensor medP: - platform: statistics entity_id: sensor.Waermeleist sampling_size: 120 max_age: minutes: 120 sensor medianP: - platform: template sensors: medianp: friendly_name: 'P med' unit_of_measurement: 'kW' value_template: '{{ states.sensor.stats_mean.attributes.median | int }}' sensor BA: # Dieser Sensor ist eher geraten, da die Binäre Aufschlüsselung noch nicht gelungen - platform: template sensors: betriebsart: friendly_name: 'Betriebsart' value_template: >- {% if states('sensor.Status_PANEL2') | float == -3276.8 -%} {{ 'Aus' }} {%- elif states('sensor.Status_PANEL2') | float == -2445.9 and states('sensor.kwb_kessel') | float < 74.0-%} {{ 'Aufwärmphase' }}{{( ((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int -1)* 256)/117*100 )| round(1) }} {{'%'}} {%- elif states('sensor.Status_PANEL2') | float == -807.5 -%} {{ 'Volllastphase' }}{{( ((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int -1)* 256)/117*100) | round(1) }} {{'%'}} {%- elif states('sensor.Status_PANEL2') | float == -2449.2 and states('sensor.Status_PANEL1') | float == -1587.1 -%} {{ 'Abstellen' }}{{ (((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int -1)* 256)/117*100) | round(1) }} {{'%'}} {%- elif states('sensor.Status_PANEL2') | float > -2500 -%} {{ 'Lastregelung : '}}{{( ((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int -1)* 256)/117*100 )| round(1) }} {{'%'}} {%- else -%} {{ 'Unbekannt' }} {%- endif -%} pregel: friendly_name: 'P Regel' unit_of_measurement: '%' value_template: >- {% if states('sensor.Status_PANEL2') | float > -3276.8 -%} {{ ( ((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int -1)* 256)/117*100 )| round(1) }} {%- else -%} {{ ( ((states.sensor.status_panel2.state | float )*10 - (((states.sensor.status_panel2.state | float )*10/256) | int )* 256)/117*100 )| round(1) }} {%- endif -%} sensor pstat: - platform: statistics entity_id: sensor.leistungroh name: Leistung sampling_size: 4 sensor rlprz: - platform: template sensors: # Dieser Sensor soll das Verhältnis des zirkulierenden Wasser zur Rücklaufanhebung anzeigen. Allerdings ist die exakte Temperatur am Boden des Puffers nicht bekannt. Unter "Mischerzulauf" ist eine an meiner Anlage aufgenommene "Schätzkurve" angegeben. anzapfung: friendly_name: 'Rücklaufverhältnis' unit_of_measurement: '%' value_template: >- {% if states('sensor.kwb_kesselunterdruck') | float > 10.0 and states('sensor.kwb_kesselrl') | float > 50.0 -%} {{ (((states.sensor.kwb_kesselrl.state | float) - (states.sensor.mischerzulauf.state | float)) / ((states.sensor.kwb_kessel.state | float ) - (states.sensor.mischerzulauf.state | float)) * 100 ) | float | round(3) }} {%- elif states('sensor.kwb_kesselunterdruck') | float > 10.0 and states('sensor.kwb_kesselrl') | float < 50.0 -%} {{ 100.0 | float }} {%- else -%} {{ 0.0 | float }} {%- endif -%} # Hier versuche ich unter Berücksichtigung der Temperaturdifferenz und der Menge des Wassers (unbekannt) die momentane Leistung zu ermitteln. Bei optimalen Bedingungen und gegebener Kesselleistung kann man aber auf eine Wassermenge zurückrechnen. leistung: friendly_name: 'P Kessel' unit_of_measurement: 'kW' value_template: >- {% if states('sensor.anzapfung') | float > 0.0 -%} {{ (((100.0 - states.sensor.anzapfung.state | float ) / 100.0 * (states.sensor.kwb_kessel.state | float - ( 1.7228 * states.sensor.kwb_puffer_u.state | float ** 0.7823)) * 4.2 * 0.38 * ( 1.0 - 6.0 / 40.0 )) | round(1) * (states.sensor.pregel.state | float ) / 100.0 )| round(1)}} {%- elif states('sensor.status_panel1') | float == -1586.9 and states('sensor.anzapfung') | float == 0.0 -%} {{ 0.1 | float }} {%- else -%} {{ 0.0 | float }} {%- endif -%} # Das Pythonscript errechnet aus den Temperaturdifferenzen des Puffers (oben, mitte , unten) mit insgesamt 3000l (also 1000l Wasser für jeden Sensor) eine Leistungsabgabe aus den Pufferspeichern an die Umgebung. Siehe unten "Leistungroh") # Wenn man die Abgabe des Puffers bei Leistungsbrand (Verbrauch und Zufuhr misst man dann ja kombiniert) und kaltem Kessel (da misst man nur Verbrauch) im Tageslauf verfolgt, sollten keine großen Sprünge zu sehen sein (--> dann Stimmen die Formel. # in der Praxis sieht das aber durch nichtlinearen Temperaturverlauf und Strömungen im Puffer dann nicht ganz so glatt aus: "Wer viel misst misst Mist" ;-) waermeleist: friendly_name: 'P Verbraucher' unit_of_measurement: 'kW' value_template: '{{ ( (states.sensor.Leistung.state | float | multiply(-1) ) + (states.sensor.Leistungroh.state | float )) | float | round(1) }}' mischerzulauf: friendly_name: 'Mischerzulauf' unit_of_measurement: '°Cm' value_template: '{{ (1.7228 * states.sensor.kwb_puffer_u.state | float ** 0.7823) | round(1) }}' sensor P: - platform: file name: Leistungroh file_path: /home/pi/leistung.txt value_template: '{{ value | multiply(0.001) | round(1) }}' unit_of_measurement: 'kW' scan_Interval: 300 # Der ist über. Sollte mal die minimale Puffertemperatur werden: sensor tumin: - platform: file name: T_u_min file_path: /home/pi/tumin.txt value_template: '{{ value | round(1) }}' unit_of_measurement: '°C' scan_Interval: 600 # Stimmt nicht mit Bediengerät überein!: sensor laufall: - platform: file name: Vollaststunden file_path: /home/pi/laufzeit.txt value_template: '{{ value | round(1) }}' unit_of_measurement: 'h' scan_Interval: 600 sensor raumaustr: - platform: file name: Raumaustragung file_path: /home/pi/raumaustragung.txt value_template: '{{ value | round(1) }}' unit_of_measurement: 'h' scan_Interval: 600 sensor rl: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_KesselRL value_template: '{{ value_json.kesselrl }}' unit_of_measurement: '°Cl' scan_interval: 600 sensor k: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Kessel value_template: '{{ value_json.kessel }}' unit_of_measurement: '°Cm' scan_interval: 600 sensor boi: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_boiler value_template: '{{ value_json.boiler }}' unit_of_measurement: '°Cm' scan_interval: 600 sensor pu: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Puffer_U value_template: '{{ value_json.pufferu }}' unit_of_measurement: '°Cm' scan_interval: 600 # Der ist (glaube ich) auch über. Sollte mal die minimale Puffertemperatur werden: sensor pu_min: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Puffer_U_min value_template: '{{ value_json.pufferu }}' unit_of_measurement: '°Cm' scan_interval: 86400 sensor po: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Puffer_O value_template: '{{ value_json.puffero }}' unit_of_measurement: '°Cm' scan_interval: 600 sensor aussen: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Aussen value_template: '{{ value_json.aussen }}' unit_of_measurement: '°C' scan_interval: 600 sensor Rauch: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Kessel_Rauch value_template: '{{ value_json.rauchgas }}' unit_of_measurement: '°Ch' scan_interval: 600 sensor pbren: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_Kesselunterdruck value_template: '{{ value_json.pbrennraum }}' unit_of_measurement: 'mbar' icon: mdi:speedometer scan_interval: 600 # ??? : sensor stoe: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_stoe value_template: '{{ value_json.stoe }}' unit_of_measurement: '...' scan_interval: 600 sensor hk3: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_HK3 A&Backhaus value_template: '{{ value_json.HK3 }}' unit_of_measurement: '°Cli' scan_interval: 600 sensor hk4: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_HK4 OG value_template: '{{ value_json.HK4 }}' unit_of_measurement: '°Cli' scan_interval: 600 sensor hk5: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_HK5 FB EG value_template: '{{ value_json.HK5 }}' unit_of_measurement: '°Cli' scan_interval: 600 sensor hk6: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_HK6 EG value_template: '{{ value_json.HK6 }}' unit_of_measurement: '°Cli' scan_interval: 600 sensor o2: - platform: file file_path: /home/pi/kwbdata.txt name: KWB_o2 value_template: '{{ value_json.o2 | multiply(-0.1) | round(1) }}' unit_of_measurement: '%' scan_interval: 600 sensor st3: - platform: file file_path: /home/pi/kwbdata.txt name: Status_Panel1 value_template: '{{ value_json.st3 }}' unit_of_measurement: 'status' scan_interval: 300 sensor st4: - platform: file file_path: /home/pi/kwbdata.txt name: Status_PANEL2 value_template: '{{ value_json.st4 }}' unit_of_measurement: 'status' scan_interval: 300 sensor NN3: - platform: file file_path: /home/pi/kwbdata.txt name: HK_Betrieb value_template: '{{ value_json.NN3 }}' unit_of_measurement: 'status' scan_interval: 300 sensor Glutbett: - platform: file file_path: /home/pi/kwbdata.txt name: Glutbett value_template: '{{ value_json.Glutbett | multiply(8.25) | round(1) }}' unit_of_measurement: 'mm' scan_interval: 300 sensor s1: - platform: file file_path: /home/pi/kwbdata.txt name: Sauerstoffgehalt value_template: '{{ value_json.s1 | multiply(-0.01) | round(1) }}' unit_of_measurement: '%' scan_interval: 300 sensor s2: - platform: file file_path: /home/pi/kwbdata.txt name: Kessel_S2 value_template: '{{ value_json.s2 }}' unit_of_measurement: 'status' scan_interval: 300 sensor xxx: - platform: file file_path: /home/pi/kwbdata.txt name: Kesselpumpe value_template: '{{ - value_json.xxx / 25.3 }}' unit_of_measurement: 'I/O' scan_interval: 300 sensor stat_klar: - platform: file file_path: /home/pi/kwbdata.txt name: ANLAGENSTATUS value_template: '{{ value_json.Stoe_str }}' icon: mdi:stethoscope scan_interval: 60 #unit_of_measurement: 'status' sensor zeit: - platform: file file_path: /home/pi/kwbdata.txt name: Messung value_template: '{{ value_json.Zeit }}' scan_interval: 60 binary_sensor Kessel: - platform: threshold threshold: 10 type: upper entity_id: sensor.kwb_Kesselunterdruck name: Kessel_I/O scan_interval: 300 #Generelle Störung? binary_sensor tr_stoe: - platform: threshold threshold: -1570 type: upper entity_id: sensor.Status_Panel1 name: STOERUNG SCAN_INTERVAL: 300 # Summiert die Kessellaufzeit über die letzten 24h: sensor KWB_Laufzeit: - platform: history_stats name: Laufzeit entity_id: binary_sensor.kessel_io state: 'on' type: time #start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}' end: '{{ now() }}' duration: hours: 24 scan_interval: 660 # Hier kann man Kurznachrichten versenden (Androiapp/Pc/Apple...) notify: - name: me platform: pushbullet api_key: #Hier lasse ich mich anrufen. Funktioniert sogar! ...Ist aber mit vielen Grauen Haaren verbunden bis das läuft. ("linphonec" und "espeak") shell_command: anruf_mobil: '/home/pi/callout/call_out.sh -r TELEFONNUMMER -m "Status {{ states.sensor.anlagenstatus.state }}" && sleep 240 && /home/pi/callout/call_out.sh -r **623 -m "Status {{ states.sensor.anlagenstatus.state }}"' #Raspberrywerte!!! sensor CPUtemp: - platform: command_line name: CPU Temperature command: "cat /sys/class/thermal/thermal_zone0/temp" unit_of_measurement: "°C" value_template: '{{ value | multiply(0.001) | round(0) }}' scan_interval: 600 #Raspberrywerte!!! sensor sysmon: - platform: systemmonitor resources: - type: disk_use_percent arg: / - type: memory_free - type: processor_use scan_interval: 600 group: !include groups.yaml automation: !include automations.yaml # View all events in a logbook logbook: include: entities: - sensor.anlagenstatus sensor Wetter: - platform: yr monitored_conditions: - temperature - symbol - precipitation - windSpeed # - pressure - windDirection - humidity # - fog # - cloudiness # - lowClouds # - mediumClouds # - highClouds - dewpointTemperature scan_interval: 1200