diff --git a/HA_configuration.yaml b/HA_configuration.yaml new file mode 100644 index 00000000..26b58fdd --- /dev/null +++ b/HA_configuration.yaml @@ -0,0 +1,667 @@ +# Loads default set of integrations. Do not remove. +default_config: + +# Load frontend themes from the themes folder +frontend: + themes: !include_dir_merge_named themes + +# Text to speech +tts: + - platform: google_translate + +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +#Anleitung: https://book.cryd.de/books/projekte/page/hausverbrauch-strom-messen-incl-dummy-sensoren + +utility_meter: + daily_upload_volume: + source: sensor.fritzbox_upload_volumen + cycle: daily + daily_download_volume: + source: sensor.fritzbox_download_volumen + cycle: daily + taeglicher_stromverbrauch: + source: sensor.stromzahler_energieverbrauch + cycle: daily + taegliche_einspeisung: + source: sensor.stromzahler_energieeinspeisung + cycle: daily + +input_boolean: + manual_trigger: + name: Manual Trigger + initial: off + +influxdb: + host: 127.0.0.1 + #host: a0d7b954-influxdb + port: 8086 + database: homeassistant + username: !secret influxdb_user + password: !secret influxdb_pw + max_retries: 3 + default_measurement: state + +alexa: + smart_home: + endpoint: https://api.eu.amazonalexa.com/v3/events + filter: + include_entities: + - light.living_room + - switch.kitchen + entity_config: + light.living_room: + name: "Wohnzimmer Licht" + switch.kitchen: + name: "Küchenschalter" +template: + - sensor: + - name: "Total Power3" + unique_id: "total_power_sensor3" + unit_of_measurement: "W" + device_class: power + state_class: measurement + state: > + {{ + states('sensor.shelly_em3_channel_a_power') | float(0) + + states('sensor.shelly_em3_channel_b_power') | float(0) + + states('sensor.shelly_em3_channel_c_power') | float(0) + }} + - name: "Prozent Nutzung" + unique_id: "pv_prozent_nutzung" + unit_of_measurement: "%" + state: > + {% set total_power = states('sensor.total_power_v2') | float(0) + states('sensor.solaranlage_power') | float(0) %} + {% if total_power > 0 %} + {{ (100 * states('sensor.solaranlage_power') | float(0) / total_power) | round(1) }} + {% else %} + 0 + {% endif %} + - name: "Total Energy Use1" + unique_id: "total_energy_use1" + device_class: energy + state_class: total_increasing + unit_of_measurement: "kWh" + state: > + {{ + states('sensor.shelly_em3_channel_a_energy') | float(0) + + states('sensor.shelly_em3_channel_b_energy') | float(0) + + states('sensor.shelly_em3_channel_c_energy') | float(0) + }} + - name: "Total Energy Returned1" + unique_id: "total_energy_returned1" + device_class: energy + state_class: total_increasing + unit_of_measurement: "kWh" + state: > + {{ + states('sensor.shelly_em3_channel_a_energy_returned') | float(0) + + states('sensor.shelly_em3_channel_b_energy_returned') | float(0) + + states('sensor.shelly_em3_channel_c_energy_returned') | float(0) + }} + - name: "Aktuelle Solarleistung1" + unique_id: "aktuelle_solarleistung1" + unit_of_measurement: "W" + device_class: power + state_class: measurement + state: > + {{ + max(0, states('sensor.esphome_web_39b3f0_charging_power_2') | float(0) - + states('sensor.esphome_web_39b3f0_discharging_power_2') | float(0) + + states('sensor.solaranlage_power') | float(0)) + }} + - name: "Täglicher Stromverbrauch" + unit_of_measurement: "kWh" + state: > + {% set aktueller_wert = states('sensor.stromzahler_energieverbrauch') | float %} + {% set startwert = states('input_number.tagesstart_zaehlerstand') | float %} + {{ (aktueller_wert - startwert) | round(2) }} + - name: "Fritzbox Download Volumen" + unit_of_measurement: "MB" + state: > + {% set rate_kbps = states('sensor.fritz_box_7530_download_durchsatz') | float %} + {% set rate_kBps = rate_kbps / 8 %} # Kilobits pro Sekunde in Kilobytes umrechnen + {{ (rate_kBps * 60) / 1024 }} # Datenvolumen pro Minute in Megabyte + - name: "Fritzbox Upload Volumen" + unit_of_measurement: "MB" + state: > + {% set rate_kbps = states('sensor.fritz_box_7530_upload_durchsatz') | float %} + {% set rate_kBps = rate_kbps / 8 %} # Kilobits pro Sekunde in Kilobytes umrechnen + {{ (rate_kBps * 60) / 1024 }} # Datenvolumen pro Minute in Megabyte + - name: "Aktueller Strompreis" + state: "{{ states('input_number.strompreis') }}" + unit_of_measurement: "€/kWh" + device_class: monetary + - name: "Stromverbrauch Vortag" + unique_id: "stromverbrauch_vortag" + unit_of_measurement: "kWh" + device_class: energy + state: > + {% set stats = state_attr('sensor.taeglicher_stromverbrauch', 'last_period') %} + {{ stats | float(0) }} + - name: "Einspeisung Vortag" + unique_id: "einspeisung_vortag" + unit_of_measurement: "kWh" + device_class: energy + state: > + {% set stats = state_attr('sensor.taegliche_einspeisung', 'last_period') %} + {{ stats | float(0) }} + - name: "Generiert Vortag (Template)" + unique_id: "generiert_vortag_template" + unit_of_measurement: "kWh" + device_class: energy + state: > + {% set stats = state_attr('sensor.komplett_solarlieferung', 'last_period') %} + {{ stats | float(0) }} + - name: "Nächste Müllabholung" + state: >- + {% set today = now().date().isoformat() %} + {% for date in states.sensor.garbage.attributes.keys() | list | sort %} + {% if date >= today %} + {{ date }} - {{ states.sensor.garbage.attributes[date] }} + {% break %} + {% endif %} + {% endfor %} + - name: "Statistik Solarerzeugung Durchschnitt" + state: "{{ now().year }}" + attributes: + data: > + {{ states('sensor.gsheet_data') }} + - name: "Solarertrag 2022" + state: "OK" + attributes: + values: > + {% set raw_data = state_attr('sensor.statistik_solarerzeugung_durchschnitt_mqtt', 'data')[1][1:] %} + {{ raw_data | map('replace', ',', '.') | map('float') | list }} + - name: "Solarertrag 2023" + state: "OK" + attributes: + values: > + {% set raw_data = state_attr('sensor.statistik_solarerzeugung_durchschnitt_mqtt', 'data')[2][1:] %} + {{ raw_data | map('replace', ',', '.') | map('float') | list }} + - name: "Solarertrag 2024" + state: "OK" + attributes: + values: > + {% set raw_data = state_attr('sensor.statistik_solarerzeugung_durchschnitt_mqtt', 'data')[3][1:] %} + {{ raw_data | map('replace', ',', '.') | map('float') | list }} + - name: "Solarertrag 2025" + state: "OK" + attributes: + values: > + {% set raw_data = state_attr('sensor.statistik_solarerzeugung_durchschnitt_mqtt', 'data')[4][1:] %} + {{ raw_data | map('replace', ',', '.') | map('float') | list }} + - name: "Solarertrag 2022 Werte" + state: "{{ state_attr('sensor.solarertrag_2022', 'values')[-1] | float(0) }}" + unit_of_measurement: "kWh" # Passen Sie die Einheit an + state_class: measurement + attributes: + alle_werte: "{{ state_attr('sensor.solarertrag_2022', 'values') }}" + + - name: "Kühlschrank Letzte Aktivzeit" + unique_id: kuehlschrank_letzte_aktivzeit + unit_of_measurement: "min" + state: > + {% set aktiv_start = states.binary_sensor.kuehlschrank_laeuft.last_changed %} + {% if is_state('binary_sensor.kuehlschrank_laeuft', 'on') %} + {{ ((now() - aktiv_start).total_seconds() / 60) | round(1) }} + {% else %} + 0 + {% endif %} + + - name: "Kühlschrank Letzte Pausezeit" + unique_id: kuehlschrank_letzte_pausezeit + unit_of_measurement: "min" + state: > + {% set pause_start = states.binary_sensor.kuehlschrank_laeuft.last_changed %} + {% if is_state('binary_sensor.kuehlschrank_laeuft', 'off') %} + {{ ((now() - pause_start).total_seconds() / 60) | round(1) }} + {% else %} + 0 + {% endif %} +sensor: + - platform: average + name: "Durchschnittsverbrauch" + unique_id: "durchschnitt_verbrauch" + duration: 60 + entities: + - sensor.total_power_v2 + + - platform: average + name: "Durchschnittsertrag" + unique_id: "durchschnitt_ertrag" + duration: 180 + entities: + - sensor.aktuelle_solarleistung1 + + - platform: teamtracker + league_id: "BUND" + team_id: "MUC" + name: "Bayern2" + + - platform: integration + name: Upload Volume + source: sensor.fritz_box_7530_upload_durchsatz + unit_prefix: k + round: 2 + - platform: integration + name: Download Volume + source: sensor.fritz_box_7530_download_durchsatz + unit_prefix: k + round: 2 + - platform: statistics + name: "Generiert Vortag (Statistik)" + entity_id: sensor.solaranlage_energy + state_characteristic: change + max_age: + days: 1 + - platform: rest + name: "Google Sheets Daten" + resource: "https://script.google.com/macros/s/AKfycbz4sAiMvufOqL-gv5o7YfjaL4V0eWu9dGren_xg6pV35dE8bMyzaQckKp5WCs6ex5bbdA/exec" + scan_interval: 600 # Aktualisiert alle 10 Minuten + value_template: "{{ value_json[0] }}" # Falls erforderlich, kann dies angepasst werden + json_attributes: + - "Gesamtwerte" + - "Genergiert" + - "Einspeisung" + - "Netzverbrauch" + - "Solarverbrauch" + - "Gesamtverbrauch" + - "Durchschnittl. Nutzung" + - "Autarkiegrad" + - "Ersparnis in € / Tag" + - "Ersparnis gesamt" + - "Prozent Abgezahlt" + - "Gesamnt abgezahlt" + - platform: history_stats + name: "Kühlschrank Aktivzeit" + entity_id: binary_sensor.kuehlschrank_laeuft + state: "on" + type: time + start: "{{ now() - timedelta(hours=24) }}" + end: "{{ now() }}" + + - platform: history_stats + name: "Kühlschrank Pausezeit" + entity_id: binary_sensor.kuehlschrank_laeuft + state: "off" + type: time + start: "{{ now() - timedelta(hours=24) }}" + end: "{{ now() }}" + - platform: statistics + name: "Kühlschrank Durchschnitt Aktivzeit" + entity_id: sensor.kuehlschrank_letzte_aktivzeit + state_characteristic: mean + max_age: + hours: 24 + sampling_size: 10 + + - platform: statistics + name: "Kühlschrank Durchschnitt Pausezeit" + entity_id: sensor.kuehlschrank_letzte_pausezeit + state_characteristic: mean + max_age: + hours: 24 + sampling_size: 10 + +input_datetime: + kuehlschrank_ende_aktiv: + name: "Ende aktive Phase" + has_time: true + kuehlschrank_ende_pause: + name: "Ende Pause Phase" + has_time: true + +waste_collection_schedule: + sources: + - name: awido_de + args: + customer: Erding + city: Oberding + street: "Gartenstraße" + +binary_sensor: + - platform: template + sensors: + kuehlschrank_laeuft: + friendly_name: "Kühlschrank läuft" + value_template: "{{ states('sensor.kuehlschrank_power')|float > 50 }}" + +mqtt: + sensor: + - name: "Balkonkraftwerk Leistung AC" + state_topic: "inverter/hm600/ch0/P_AC" + device_class: power + unit_of_measurement: W + state_class: measurement + unique_id: "BalkonkraftwerkLeistungAC" + - name: "Balkonkraftwerk Module 1 Leistung" + state_topic: "inverter/hm600/ch1/P_DC" + device_class: power + unit_of_measurement: W + state_class: measurement + unique_id: "BalkonkraftwerkModule13Leistung" + - name: "Balkonkraftwerk Module 2 Leistung" + state_topic: "inverter/hm600/ch2/P_DC" + device_class: power + unit_of_measurement: W + state_class: measurement + unique_id: "BalkonkraftwerkModule24Leistung" + - name: "Balkonkraftwerk Temperatur" + state_topic: "inverter/hm600/ch0/Temp" + device_class: temperature + unit_of_measurement: °C + state_class: measurement + unique_id: "BalkonkraftwerkTemperatur" + - name: "Balkonkraftwerk Arbeit Tag" + state_topic: "inverter/hm600/ch0/YieldDay" + device_class: energy + unit_of_measurement: Wh + state_class: total_increasing + unique_id: "BalkonkraftwerkArbeitTag" + - name: "Balkonkraftwerk Arbeit Gesamt" + state_topic: "inverter/hm600/ch0/YieldTotal" + device_class: energy + unit_of_measurement: kWh + state_class: total_increasing + unique_id: "BalkonkraftwerkArbeitGesamt" + - name: "version" + state_topic: "inverter/version" + unique_id: "version_dtu" + - name: "Limit" + state_topic: "inverter/hm600/ch0/active_PowerLimit" + unique_id: "set_powerlimit" + - name: "Energy Akkuentladung current" + device_class: power + unit_of_measurement: "W" + state_topic: "esphome-web-39b3f0/sensor/esphome-web-39b3f0_discharging_power" + unique_id: "energy_akkuentladung" + - name: "Energy Akkuentladung total" + device_class: energy + unit_of_measurement: "kWh" + state_topic: "esphome-web-39b3f0/sensor/esphome-web-39b3f0_discharging_power" + - name: "Effizienz HM600" + unit_of_measurement: "%" + state_topic: "inverter/hm600/ch0/Efficiency" + unique_id: "effizienz_hm600" + - name: "HM600 Spannung" + unit_of_measurement: "V" + state_topic: "inverter/hm600/ch1/U_DC" + - name: "Waschmaschine Leistung" + state_topic: "shellyplus1pm-84cca8771670/status/switch:0" + value_template: "{{ value_json.apower }}" + unit_of_measurement: "W" + device_class: power + - name: "Waschmaschine Energieverbrauch" + state_topic: "shellyplus1pm-84cca8771670/status/switch:0" + value_template: "{{ value_json.aenergy.total }}" + unit_of_measurement: "kWh" + device_class: energy + - name: "Statistik Solarerzeugung Durchschnitt mqtt" + state_topic: "homeassistant/sensor/gsheet_data" + value_template: "{{ value_json.state }}" + json_attributes_topic: "homeassistant/sensor/gsheet_data" + json_attributes_template: "{{ value_json.attributes | tojson }}" + +logger: + default: warning + logs: + custom_components.awtrix: warning + homeassistant.components.sensor: warning + +# Nächste Abholung Restmüll + +# - name: "Restmüll" +# state: '{{value.types|join(", ")}}{% if value.daysTo == 0 %} Heute{% elif value.daysTo == 1 %} Morgen{% else %} in {{value.daysTo}} Tagen{% endif %}' +# attributes: +# value_template: '{{value.types|join(", ")}}' +# unique_id: "restmuell" +# unit_of_measurement: "days" +# device_class: "timestamp" +# value_template: '{{(states.sensor.waste_collection_schedule.attributes.next_date)|as_timestamp | timestamp_local}}' + +# Nächste Abholung Biotonne + +# - name: "Biotonne" +# state: '{{value.types|join(", ")}}{% if value.daysTo == 0 %} Heute{% elif value.daysTo == 1 %} Morgen{% else %} in {{value.daysTo}} Tagen{% endif %}' +# attributes: +# value_template: '{{value.types|join(", ")}}' +# unique_id: "biotonne" +# unit_of_measurement: "days" +# device_class: "timestamp" +# value_template: '{{(states.sensor.waste_collection_schedule.attributes.next_date)|as_timestamp | timestamp_local}}' + +##sensor: +# - platform: average +# name: 'Durchschnittsverbrauch' +# unique_id: 'durchschnitt_verbrauch' +# duration: 60 +# entities: +# - sensor.total_power +# - platform: average +# name: 'Durchschnittsertrag' +# unique_id: 'durchschnitt_ertrag' +# duration: 180 +# entities: +# - sensor.aktuelle_solarleistung +# - platform: teamtracker +# league_id: "BUND" +# team_id: "MUC" +# name: "Bayern2" +# +# - platform: template +# name: "Total Power" +# unique_id: "Total_Energy" +# device_class: power +# state_class: total +# unit_of_measurement: "W" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_power')| float(0) + +# states('sensor.shelly_em3_channel_b_power')| float(0) + +# states('sensor.shelly_em3_channel_c_power')| float(0) +# }} +# +# - platform: template +# name: "Total Energy Use1" +# unique_id: "Total_Energy_Use1" +# device_class: energy +# state_class: total +# unit_of_measurement: "kWh" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_energy')| float(0) + +# states('sensor.shelly_em3_channel_b_energy')| float(0) + +# states('sensor.shelly_em3_channel_c_energy')| float(0) +# }} +# +# - name: "Total Energy Returned1" +# unique_id: "Total_Energy_Returned1" +# device_class: energy +# state_class: total +# unit_of_measurement: "kWh" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_energy_returned')| float(0) + +# states('sensor.shelly_em3_channel_b_energy_returned')| float(0) + +# states('sensor.shelly_em3_channel_c_energy_returned')| float(0) +# }} +# +# - name: "PV Einspeisung" +# unique_id: "pv_einspeisung" +# unit_of_measurement: "W" +# device_class: power +# value_template: "{{ states('sensor.total_power')|float if states('sensor.total_power') | int < 1 else 0 }}" +# +# - name: "PV Einspeisung negiert" +# unique_id: "pv_einspeisung_negiert" +# unit_of_measurement: "W" +# device_class: power +# value_template: "{{ states('sensor.pv_einspeisung')|float * -1 }}" +# +# - name: "Wirkungsgrad" +# unique_id: "wirkungsgrad_battery" +# unit_of_measurement: "%" +# device_class: power +# value_template: > +# {{(100 * states('sensor.solaranlage_power')| float(0) / states('sensor.esphome_web_39b3f0_discharging_power')| float(0)) | round(1) }} +# +# - name: "Prozent_Nutzung" +# unique_id: "pv_prozent_nutzung" +# unit_of_measurement: "%" +# device_class: power +# value_template: > +# {{ +# (100 * states('sensor.solaranlage_power')| float(0) / (states('sensor.solaranlage_power')| float(0) + states('sensor.total_power_v2')| float(0))) | round(1) +# }} +# +# - name: "Aktuelle_Solarleistung" +# unique_id: "aktuelle-solarleistung" +# unit_of_measurement: "W" +# device_class: power +# value_template: > +# {{ +# max(0, states('sensor.esphome_web_39b3f0_charging_power_2')| float(0) - +# states('sensor.esphome_web_39b3f0_discharging_power_2')| float(0) + +# states('sensor.solaranlage_power')|float(0) + +# }} +# +# //states('sensor.akku_power')|float(0)) removed from aktuelle solarleistung +# +# - name: "Summierter Ertrag" +# unique_id: "summierter_ertrag" +# unit_of_measurement: "W" +# device_class: power +# value_template: > +# {{ +# states('sensor.akku_power')| float(0) + +# states('sensor.solaranlage_power')|float(0) +# }} +# +# - name: "Total Power" +# unique_id: "Total_Energy" +# device_class: power +# state_class: total +# unit_of_measurement: "W" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_power')| float(0) + +# states('sensor.shelly_em3_channel_b_power')| float(0) + +# states('sensor.shelly_em3_channel_c_power')| float(0) +# }} +# +# - name: "Total Energy Use" +# unique_id: "Total_Energy_Use" +# device_class: energy +# state_class: total +# unit_of_measurement: "kWh" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_energy')| float(0) + +# states('sensor.shelly_em3_channel_b_energy')| float(0) + +# states('sensor.shelly_em3_channel_c_energy')| float(0) +# }} +# +# - name: "Total Energy Returned" +# unique_id: "Total_Energy_Returned" +# device_class: energy +# state_class: total +# unit_of_measurement: "kWh" +# value_template: > +# {{ +# states('sensor.shelly_em3_channel_a_energy_returned')| float(0) + +# states('sensor.shelly_em3_channel_b_energy_returned')| float(0) + +# states('sensor.shelly_em3_channel_c_energy_returned')| float(0) +# }} +# +# - name: "PV Einspeisung" +# unique_id: "pv_einspeisung" +# unit_of_measurement: "W" +# device_class: power +# value_template: "{{ states('sensor.total_power')|float if states('sensor.total_power') | int < 1 else 0 }}" +# +# - name: "PV Einspeisung negiert" +# unique_id: "pv_einspeisung_negiert" +# unit_of_measurement: "W" +# device_class: power +# value_template: "{{ states('sensor.pv_einspeisung')|float * -1 }}" +# +# - name: "Wirkungsgrad" +# unique_id: "wirkungsgrad_battery" +# unit_of_measurement: "%" +# device_class: power +# value_template: > +# {{(100 * states('sensor.solaranlage_power')| float(0) / states('sensor.esphome_web_39b3f0_discharging_power')| float(0)) | round(1) }}### +# +# - name: "Prozent_Nutzung" +# unique_id: "pv_prozent_nutzung" +# unit_of_measurement: "%" +# device_class: power +# value_template: > +# {{ +# (100 * states('sensor.solaranlage_power')| float(0) / (states('sensor.solaranlage_power')| float(0) + states('sensor.total_power')| float(0))) | round(1) +# }} +# +# - name: "Aktuelle_Solarleistung" +# unique_id: "aktuelle-solarleistung" +# unit_of_measurement: "W" +# device_class: power +# value_template: > +# {{ +# max(0, states('sensor.esphome_web_39b3f0_charging_power_2')| float(0) - +# states('sensor.esphome_web_39b3f0_discharging_power_2')| float(0) + +# states('sensor.solaranlage_power')|float(0) + +# states('sensor.akku_power')|float(0)) +# }} +# +# - name: "Summierter Ertrag" +# unique_id: "summierter_ertrag" +# unit_of_measurement: "W" +# device_class: power +# value_template: > +# {{ +# states('sensor.akku_power')| float(0) + +# states('sensor.solaranlage_power')|float(0) +# }} + +# https://community.home-assistant.io/t/hoymiles-dtu-microinverters-pv/253674/21 + +# statistics +#- platform: statistics +# entity_id: sensor.total_power_av +# sampling_size: 20 + +#powercalc: + +#sensor: +# - platform: powercalc +# entity_id: light.esslicht +# fixed: +# states_power: +# off: 0.4 +# on: 22 + +# platform: template +# daily_solar_percent: +# value_template: "{{ ( 100 * states('sensor.total_power')|float / states('sensor.solaranlage_power')|float )|round(1) }}" +# unit_of_measurement: '%' +# friendly_name: Daily Solar Percentage + +# ssl Configuration +# http: +# ssl_certificate: /ssl/fullchain.pem +# ssl_key: /ssl/privkey.pem + +http: + use_x_forwarded_for: true + trusted_proxies: + - 127.0.0.1 + - 192.168.178.6 + - 172.16.0.0/12 + - ::1 + #ssl_certificate: "/ssl/fullchain.pem" + #ssl_key: "/ssl/privkey.pem" +homeassistant: + external_url: "https://floke-ha.duckdns.org"