blueprint: name: Ladegerät überwachen (Shelly Plug S) description: > Erkennt automatisch, wann ein Ladevorgang beginnt und endet – anhand der Leistungsaufnahme des Shelly Plug S. Sendet Push-Benachrichtigungen bei Start und Ende des Ladevorgangs. Berechnet die geladene Energiemenge (kWh) und die Stromkosten. Kann für mehrere Geräte (z. B. E-Bike und Gartengeräte) als separate Automationen eingerichtet werden. domain: automation input: power_sensor: name: Leistungssensor description: Shelly Plug S Leistungssensor (W) – z. B. sensor.shelly_plug_s_power selector: entity: domain: sensor device_class: power energy_sensor: name: Energiesensor description: > Shelly Plug S Energiesensor (kWh oder Wh, kumulativ) – z. B. sensor.shelly_plug_s_energy selector: entity: domain: sensor device_class: energy energy_unit: name: Einheit des Energiesensors description: > Bitte in Home Assistant nachschauen, welche Einheit der Sensor anzeigt. Neuere Shelly-Integrationen liefern kWh, ältere Wh. default: kWh selector: select: options: - kWh - Wh device_name: name: Gerätename description: Wird in den Push-Nachrichten angezeigt (z. B. E-Bike oder Gartengeräte) default: Gerät selector: text: start_power_threshold: name: Einschalt-Schwellwert (W) description: > Ladevorgang gilt als gestartet, wenn die Leistung diesen Wert übersteigt. Typischer Wert: 10 W. Standby-Leistung des Shelly liegt bei ca. 0,5–1 W. default: 10 selector: number: min: 1 max: 500 step: 1 unit_of_measurement: W mode: slider stop_power_threshold: name: Ausschalt-Schwellwert (W) description: > Ladevorgang gilt als beendet, wenn die Leistung unter diesen Wert fällt. Sollte kleiner als der Einschalt-Schwellwert sein. default: 5 selector: number: min: 1 max: 100 step: 1 unit_of_measurement: W mode: slider start_debounce_seconds: name: Startbestätigung (Sekunden) description: > Die Leistung muss diesen Zeitraum stabil über dem Einschalt-Schwellwert liegen, bevor der Ladestart erkannt wird. Vermeidet Fehlalarme durch kurze Lastspitzen. default: 30 selector: number: min: 5 max: 300 step: 5 unit_of_measurement: s mode: slider stop_debounce_seconds: name: Stopbestätigung (Sekunden) description: > Wartezeit nach dem Unterschreiten des Ausschalt-Schwellwerts, bevor das Ende des Ladevorgangs bestätigt wird. Verhindert Fehlalarme wenn das Ladegerät kurz Strom schwankt (z. B. Balancing-Phase beim Akku). default: 120 selector: number: min: 30 max: 600 step: 30 unit_of_measurement: s mode: slider electricity_price: name: Strompreis (€/kWh) description: Aktueller Strompreis für die Kostenberechnung default: 0.30 selector: number: min: 0.01 max: 1.00 step: 0.01 unit_of_measurement: €/kWh mode: box notify_target_1: name: Benachrichtigungsgerät 1 description: > Notify-Service für Push-Nachrichten, z. B. notify.mobile_app_iphone. Leer lassen für keine Benachrichtigung. default: "" selector: text: notify_target_2: name: Benachrichtigungsgerät 2 (optional) description: > Zweiter Notify-Service (optional), z. B. notify.mobile_app_android. Leer lassen wenn nicht benötigt. default: "" selector: text: variables: power_sensor: !input power_sensor energy_sensor: !input energy_sensor energy_unit: !input energy_unit device_name: !input device_name stop_power_threshold: !input stop_power_threshold stop_debounce_seconds: !input stop_debounce_seconds electricity_price: !input electricity_price notify_target_1: !input notify_target_1 notify_target_2: !input notify_target_2 notify_targets: > {{ [notify_target_1, notify_target_2] | select('ne', '') | list }} trigger: - platform: numeric_state entity_id: !input power_sensor above: !input start_power_threshold for: seconds: !input start_debounce_seconds action: - variables: start_time: "{{ now() }}" start_power: "{{ states(power_sensor) | float(0) | round(1) }}" start_energy_raw: "{{ states(energy_sensor) | float(0) }}" start_energy_kwh: > {{ (states(energy_sensor) | float(0)) / 1000 if energy_unit == 'Wh' else (states(energy_sensor) | float(0)) }} - if: - condition: template value_template: "{{ notify_targets | length > 0 }}" then: - service: notify.send_message target: entity_id: "{{ notify_targets }}" data: title: "🔋 Laden gestartet – {{ device_name }}" message: > Ladevorgang erkannt: {{ start_power }} W. Gestartet um {{ start_time | as_timestamp | timestamp_custom('%H:%M Uhr') }}. - wait_for_trigger: - platform: numeric_state entity_id: !input power_sensor below: !input stop_power_threshold timeout: hours: 24 continue_on_timeout: true - delay: seconds: "{{ stop_debounce_seconds }}" - variables: end_time: "{{ now() }}" end_energy_kwh: > {{ (states(energy_sensor) | float(0)) / 1000 if energy_unit == 'Wh' else (states(energy_sensor) | float(0)) }} charged_kwh: > {{ [((states(energy_sensor) | float(0)) / 1000 if energy_unit == 'Wh' else (states(energy_sensor) | float(0))) - start_energy_kwh, 0] | max | round(3) }} total_cost: > {{ ([((states(energy_sensor) | float(0)) / 1000 if energy_unit == 'Wh' else (states(energy_sensor) | float(0))) - start_energy_kwh, 0] | max * electricity_price) | round(2) }} duration_seconds: > {{ (now() - start_time).total_seconds() | int }} duration_text: > {% set s = (now() - start_time).total_seconds() | int %} {% set h = (s // 3600) %} {% set m = ((s % 3600) // 60) %} {% if h > 0 %}{{ h }} h {{ m }} min{% else %}{{ m }} min{% endif %} - if: - condition: template value_template: "{{ notify_targets | length > 0 }}" then: - service: notify.send_message target: entity_id: "{{ notify_targets }}" data: title: "✅ Laden fertig – {{ device_name }}" message: > Ladevorgang abgeschlossen. Dauer: {{ duration_text }} Geladen: {{ charged_kwh }} kWh Kosten: ca. {{ total_cost }} € mode: single max_exceeded: silent