Statistik-Icon-Groesse, Batteriediagramm-Ueberarbeitung, Temperatur-Kopplung mit 300s-Fenster, letzte gueltige Spannung als Fallback
- Statistik-Tab-Icon per zentrierter Stauchung an die Fuellflaeche der anderen Tab-Icons angeglichen (Panel + companion-app), auf Nutzerwunsch anschliessend 10% groesser. - Batteriediagramm neu gezeichnet: dynamische viewBox (1 Einheit = 1 Pixel, kein preserveAspectRatio-Verzerren mehr), ein Punkt je Ruhespannungsmessung statt Datumsbeschriftung, Tageshoechstwert nur noch im Tooltip. Generator- spannungen (> AGM_RUHE_MAX_V = 13,0 V, vom Nutzer festgelegt) bleiben aus dem Diagramm aussen vor; der SOC-Kurve-Eckwert "100% / voll" bleibt bei den ursprünglich recherchierten 12,8 V. companion-app auf dieselbe lineare SOC-Interpolation umgestellt (vorher eine abweichende Stufenkurve). - Außentemperatur wird jetzt auch beim Batterieverlauf-Import nachgetragen (vorher nur live) - Kopplung an die naechstgelegene Messung innerhalb NEBENWERT_MAX_ABSTAND_S (verlauf.py), vom Nutzer nach Live-Daten-Analyse auf 300s festgelegt. Merge-Logik in ablage.py ergaenzt: ein erneuter Import kann eine zuvor fehlende Temperatur jetzt tatsaechlich nachtragen, auch wenn sich der Tagesminimalwert selbst nicht aendert. - "Mein Audi"/Zustand zeigt bei unplausibler Live-Messung (z. B. Dongle offline) die zuletzt gemessene Spannung statt "unbekannt". Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
@@ -49,6 +49,7 @@ import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from .veroeffentlichung import zustand_oder_none
|
||||
from .verlauf import NEBENWERT_MAX_ABSTAND_S
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .koordinator import Koordinator
|
||||
@@ -79,13 +80,33 @@ async def pruefen(k: Koordinator) -> None:
|
||||
)
|
||||
return
|
||||
|
||||
# Nicht nur "gibt es einen Temperaturwert", sondern "ist er auch aktuell":
|
||||
# zustand_oder_none() liefert unabhängig vom Alter den zuletzt bekannten
|
||||
# Zustand - meldet der Temperatursensor seltener als die Spannung (im
|
||||
# Testbestand teils erst nach 30+ Stunden erneut), würde sonst ein
|
||||
# beliebig alter Temperaturwert einer frischen Spannungsmessung
|
||||
# zugeschlagen. Verglichen wird gegen den Zeitpunkt der Spannungsmessung
|
||||
# selbst (last_updated des Spannungssensors), nicht gegen "jetzt" - beide
|
||||
# Sensoren werden aus dem aktuellen hass.states-Stand gelesen, können aber
|
||||
# unterschiedlich alt sein. Grenze und Begründung siehe
|
||||
# NEBENWERT_MAX_ABSTAND_S (verlauf.py) - vom Nutzer festgelegt.
|
||||
aussentemp = None
|
||||
temp_wert = zustand_oder_none(k.hass, k.zuordnung.werte.AUSSENTEMP_SENSOR)
|
||||
temp_sensor = k.zuordnung.werte.AUSSENTEMP_SENSOR
|
||||
temp_wert = zustand_oder_none(k.hass, temp_sensor)
|
||||
if temp_wert is not None:
|
||||
try:
|
||||
aussentemp = float(temp_wert)
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
spannung_zustand = k.hass.states.get(sensor)
|
||||
temp_zustand = k.hass.states.get(temp_sensor)
|
||||
abstand_s = abs((temp_zustand.last_updated - spannung_zustand.last_updated).total_seconds())
|
||||
if abstand_s <= NEBENWERT_MAX_ABSTAND_S:
|
||||
try:
|
||||
aussentemp = float(temp_wert)
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
else:
|
||||
_LOGGER.debug(
|
||||
"Außentemperatur %s s von der Spannungsmessung entfernt - nicht mit erfasst",
|
||||
round(abstand_s),
|
||||
)
|
||||
|
||||
jetzt = datetime.datetime.now(datetime.UTC)
|
||||
heute = datetime.date.today().isoformat()
|
||||
|
||||
Reference in New Issue
Block a user