Ich bräuchte mal Hilfe, bzw. einen Ansatz wie ich folgende Automation erstelle.
Was ist der Zweck?
Sobald die Wallbox anfängt das E-Auto zu laden, soll überwacht werden bis der Akku zu 80% geladen ist und soll dann eine Meldung ausgeben.
Problem:
Leider kann ich den Ladestand aus der Wallbox oder Auto nicht abfragen, sondern muss errechnet werden.
Hierzu hab ich bereits Inputhelfer erstellt:
Hier kommt schon einmal eine Markdown-Karte, die die entsprechenden Berechnungen enthält.
Hier der Code, der auch schon 80 % für die Umsetzung genommen werden kann.
Zusammenfassung
{# Hier sind Variablen mit den Werten aus der Tabelle gefüllt. Die berechnung erfolgt dynamisch.#}
{% set AkkusLeistung_kwh = 22 | float() %}
{% set Ladestand_pct = 21 | float() %}
{% set Ladeleistung_kw = 11 | float() %}
{% set Ladesgrenze_pct = 80 | int %}
{% set startzeit_uhr = now().strftime("%H:%M") %}
{% set ProzentNoetig_pct = Ladesgrenze_pct - Ladestand_pct %}
{% set KWNoetig_kw = (AkkusLeistung_kwh / 100 * ProzentNoetig_pct) | round(2) %}
{% set Zeit_Minuten_min = 60 / Ladeleistung_kw * KWNoetig_kw %}
{% set Zeit_Stunden_h = (Zeit_Minuten_min / 60) | round(2) %}
{# Zerlege die Startzeit (aus now()) in Stunden und Minuten #}
{% set startzeit_stunden = now().hour %}
{% set startzeit_minuten = now().minute %}
{# Berechnung der gesamten Zeit in Minuten (Startzeit + Ladezeit) #}
{% set gesamt_minuten = startzeit_stunden * 60 + startzeit_minuten + Zeit_Minuten_min %}
{% set EndeLaden_stunden = (gesamt_minuten // 60) | int %}
{% set EndeLaden_minuten = (gesamt_minuten % 60) | int %}
{# Formatierung der Ende-Ladezeit in hh:mm Uhr #}
{% set EndeLaden_uhr = "%02d:%02d" | format(EndeLaden_stunden, EndeLaden_minuten) %}
{# Ausgabe der Ergebnisse #}
<table border=3>
<tr>
<td colspan=2 width=200><b>Daten</b></td>
<td colspan=2 width=200><b>Berechnung</b></td>
</tr>
<tr>
<td>Akku</td>
<td>{{AkkusLeistung_kwh}} kWh</td>
<td>Prozent nötig</td>
<td>{{ProzentNoetig_pct}} %</td>
</tr>
<td>Ladestand</td>
<td>{{Ladestand_pct}} %</td>
<td>KW nötig</td>
<td>{{KWNoetig_kw}} KW</td>
</tr>
</tr>
<td>Ladeleistung</td>
<td>{{Ladeleistung_kw}} KW</td>
<td>Zeit-Minuten</td>
<td>{{Zeit_Minuten_min}} Minuten</td>
</tr>
</tr>
<td>Laden bis</td>
<td>{{Ladesgrenze_pct}} %</td>
<td>Zeit-Stunden</td>
<td>{{Zeit_Stunden_h}} Stunden</td>
</tr>
</tr>
<td>Startzeit</td>
<td>{{startzeit_uhr}} Uhr</td>
<td>Ende Laden</td>
<td><font size=4 color=red><b>{{EndeLaden_uhr}} Uhr<b></font></td>
</tr>
</table>```
Was ich jetzt machen würde…
Über das UI einen Template Sensor anlegen
Anstelle mancher Variablen nimmst Du nicht die festen Werte sondern fragst den Status Deines Sensors ab, z.B. state('sensor.ladestand') | float(0)
Enhalten tut der Template Code einen IF Akku lädt = true THEN mache obige Berechnung und gebe als Result die Variable EndeLaden_uhr als Date-Objekt aus ELSE “Nicht verbunden”.
In der Automatisation nimmst Du das Dateobjekt und läßt Dich mit einem Timedelta von xxx Minuten zu now() vorher eine Message schicken.
Ich weiß, der letzte Teil ist nur abstrakt beschrieben, aber ich habe heute keine Lust mehr
Ich habe noch einmal darüber nachgedacht, was Du eigentlich willst und auch meinen gestrigen Ansatz zusammengestampft. Für eine Markdown Karte ist er gut aber für das eigentliche Ziel reicht eine solche Automatisation.
Funktionsweise:
Ein Sensor sagt, wann der Ladevorgang beginnt (Trigger1)
Daraufhin wird die benötigte Zeit in Sekunden berechnet und ein Timer mit dieser Dauer gestartet
Wenn der Timer ausläuft (Trigger 2), dann wird eine Benachrichtigung verschickt.
Den Timer kann man auf dem Dashboard auch schön visualisieren.
Hier der Code:
Zusammenfassung
alias: 1 test forum wallbox
description: ""
triggers:
- trigger: state
entity_id:
- sensor.ladevorgang
from: "off"
to: "on"
id: WallboxStartetLadevorgang
- trigger: state
entity_id:
- timer.1_forum_wallbox
from: active
to: idle
id: WallboxTimeLaeuftAus
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- WallboxStartetLadevorgang
sequence:
- action: timer.start
metadata: {}
data:
duration: >-
{# Variablen / Sensoren #}
{% set AkkusLeistung_kwh = 22 | float() %}
{% set Ladestand_pct = 31 | float() %}
{% set Ladeleistung_kw = 11 | float() %}
{% set Ladesgrenze_pct = 80 | int %}
{# Berechnung #}
{% set ProzentNoetig_pct = Ladesgrenze_pct - Ladestand_pct %}
{% set KWNoetig_kw = (AkkusLeistung_kwh / 100 * ProzentNoetig_pct) | round(2) %}
{% set GeschaetzeLadezeit_sec = (60 / Ladeleistung_kw * KWNoetig_kw * 60) | round(0) %}
{# Ausgabe in Sekunden #}
{{GeschaetzeLadezeit_sec}}
entity_id: timer.1_forum_wallbox
- conditions:
- condition: trigger
id:
- WallboxTimeLaeuftAus
sequence:
- action: notify.gmx
metadata: {}
data:
title: 80 % der Auto Batterie ist geladen
message: 80 % der Auto Batterie ist geladen
mode: single
Deine Sensoren mußt Du aber noch im Code übertragen sowohl als Trigger als auch im Templatecode. Und Du mußt einen entsprechenden Timer anlegen.
Ich bräuchte nochmal Hilfe.
Ich würde gerne mir zusätzlich über die Markdown Karte die tatsächliche Startzeit aus der Automation und die Uhrzeit für das Lade Ende anzeigen lassen.
Die Startzeit kommt über einen Zeitpunkt Eingabe Helfer, nur mit der Uhrzeit
Lade Ende habe ich Schwierigkeiten. Viel probiert, aber nichts funktioniert.
Wie ist der Syntax für Start Uhrzeit + Dauer in Minuten = Uhrzeit Lade Ende?
Aktueller Code:
Zusammenfassung
{% set AkkusLeistung_kwh = states('input_number.akku_gesamt_kw') | float() %}
{% set Ladestand_pct = states('input_number.akku_ladestand_von') | float() %}
{% set Ladeleistung_kw = states('input_number.akku_ladeleistung') | float() %}
{% set Ladesgrenze_pct = states('input_number.akku_ladestand_bis') | int %}
{% set startzeit_uhr = states('input_datetime.akku_laden_start_uhrzeit') %}
{% set ProzentNoetig_pct = Ladesgrenze_pct - Ladestand_pct %}
{% set KWNoetig_kw = (AkkusLeistung_kwh / 100 * ProzentNoetig_pct) | round(2) %}
{% set Zeit_Minuten_min = 60 / Ladeleistung_kw * KWNoetig_kw %}
{% set Zeit_Stunden_h = (Zeit_Minuten_min / 60) | round(2) %}
{# Zerlege die Startzeit (aus now()) in Stunden und Minuten #}
{% set startzeit_stunden = now().hour %}
{% set startzeit_minuten = now().minute %}
{# Berechnung der gesamten Zeit in Minuten (Startzeit + Ladezeit) #}
{% set gesamt_minuten = startzeit_stunden * 60 + startzeit_minuten + Zeit_Minuten_min %}
{% set EndeLaden_stunden = (gesamt_minuten // 60) | int %}
{% set EndeLaden_minuten = (gesamt_minuten % 60) | int %}
{# Formatierung der Ende-Ladezeit in hh:mm Uhr #}
{% set EndeLaden_uhr = "%02d:%02d" | format(EndeLaden_stunden, EndeLaden_minuten) %}
{# Ausgabe der Ergebnisse #}
<table border=3>
<tr>
<td colspan=2 width=200><b>Daten</b></td>
<td colspan=2 width=200><b>Berechnung</b></td>
</tr>
<tr>
<td>Akku</td>
<td>{{AkkusLeistung_kwh}} kWh</td>
<td>Prozent nötig</td>
<td>{{ProzentNoetig_pct}} %</td>
</tr>
<td>Ladestand</td>
<td>{{Ladestand_pct}} %</td>
<td>KW nötig</td>
<td>{{KWNoetig_kw}} KW</td>
</tr>
</tr>
<td>Ladeleistung</td>
<td>{{Ladeleistung_kw}} KW</td>
<td>Zeit-Minuten</td>
<td>{{Zeit_Minuten_min}} Minuten</td>
</tr>
</tr>
<td>Laden bis</td>
<td>{{Ladesgrenze_pct}} %</td>
<td>Zeit-Stunden</td>
<td>{{Zeit_Stunden_h}} Stunden</td>
</tr>
</tr>
<td>Startzeit</td>
<td>{{startzeit_uhr}} Uhr</td>
<td><font color=red><b>Ende Laden</td>
<td><font color=red><b>{{EndeLaden_uhr}} Uhr<b></font></td>
</tr>
</table>
Ich habe eine Verständnisfrage: Wenn Du nicht weißt, wie der Ladestand ist, also auch nicht beim Start des Ladevorgangs, wie willst Du denn dann die Ladezeit berechnen?
achso, so ein ähnliches Problem habe ich auch. Im Auto kann man nur den minimalen Soc einstellen, bis zu dem geladen wird (50%), aber keine Obergrenze.
Ich muß immer schätzen, wieviel noch bis 80 oder 90 % fehlt, die Anzahl der kWh kann ich dann in der Wallbox als Ladeziel eingeben.