Hallo,
ich suche jetzt schon seit Tagen an einer Lösung um ein Datums/Zeitformat in eine Dezimal-Zahl umzuwandeln.
##Integration SUN
{{ states ('sensor.sun_next_rising') }}
##Integration SUN2
{{ state_attr ('sensor.home_sun_rising','today') }}
Die Ergebnisse sehen dann so aus:
##Integration SUN
2024-12-20T07:32:02+00:00
##Integration SUN2
2024-12-19 08:32:36.584927+01:00
Einmal in Sommer/Winterzeit einmal in UTC.
Mein Ziel wäre es, dieses Datum/Zeitformat in dezimale Stunden (localtime) umzuwandeln. In diesem Beispiel ca. 8,5 Stunden. Also die Stunden und Minuten von 0:00 Uhr bis Sonnenaufgang in einer dezimalen Zahl. Da kann ich dann z.B. plus 0,5 für eine halbe Stunde hinzufügen.
In etlichen Beispielen habe ich gesehen, daß es umgekehrt (Dezimal zu Datum/Zeit) recht einfach ist. Vielleicht bin ja auch im Moment einfach nur Blind. Eine einfache Lösung für die Stundenzahl von Tageslicht habe ich mit der SUN2-Integration verwirklicht (Daylight). Erst wollte ich ja nur die Differenz zwischen Sonnenaufgang und -Untergang. Das funktionierte aber nur am Abend, wenn sich beide Zeiten innerhalb des Tages befanden.
Above-horizon scheint wohl nur in der Automatisierung zu funktionieren. Ich habe da keine Stunden herausbekommen.
An dieser Stelle möchte ich auch noch herzlichen Dank für die Arbeit von rany2 an der ha-open-meteo-solar-forecast - Integration sagen.
Für mich hier in Norddeutschland funktioniert es wirklich klasse (5-15%).
Im Apex-Chart sieht es dann folgendermaßen aus:
Der Card-Templater ist da wirklich Klasse. Funktioniert auch in der Swipe-Card.
type: custom:card-templater
card:
type: custom:apexcharts-card
experimental:
color_threshold: true
cache: true
update_interval: 115sec
apex_config:
chart:
tickAmount: 10
height: 240px
tooltip:
enabled: false
legend:
show: false
header:
title: Meteo Solarprognose heute
show: true
standard_format: false
show_states: true
colorize_states: true
graph_span_template: |
"{{state_attr('sensor.home_sun_daylight','today')|round(1)}}h"
span:
start: day
offset_template: >-
+{{ ((as_timestamp(state_attr('sun.sun','next_rising')) -
as_timestamp(now().replace(hour=23,minute=59))) / 3600) | round(1) }}h
now:
show: true
color: khaki
label: ""
yaxis:
- id: kwh
decimals: 0
apex_config:
tickAmount: 5
- id: header_only
decimals: 1
series:
- entity: sensor.meteo_production_today_sum
yaxis_id: kwh
type: area
curve: smooth
name: Forecast Power
color: yellow
color_threshold:
- value: 100
color: darkred
- value: 800
color: red
- value: 1800
color: orange
- value: 3600
color: green
- value: 6400
color: yellow
opacity: 0.6
data_generator: |
return Object.entries(entity.attributes.watts).map(
([key, value]) => [new Date(key).getTime(), value]
);
show:
legend_value: false
in_header: false
stroke_width: 0.35
float_precision: 2
extend_to: false
statistics:
type: mean
period: 5minute
align: start
- entity: sensor.meteo_production_today_sum
yaxis_id: header_only
name: Prognose heute
color: orange
show:
legend_value: false
in_header: raw
in_chart: false
unit: "\_\_kWh"
Da ich zwei Dachhälften mit Solarmodulen bestückt habe, habe ich beide Meteo-Solar Einträge zusammengezählt:
##Open-Meteo-Solar Prognose
- name: "meteo production today sum"
unique_id: "meteo_production_today_sum"
unit_of_measurement: "kWh"
device_class: energy
state: >
{% set sensor1 = states('sensor.energy_production_today') |float %}
{% set sensor2 = states('sensor.energy_production_today_2') |float %}
{{ ((sensor1 + sensor2)*0.985)|float(0)|round(1) }}
attributes:
temp: >-
watts: >-
{% set sensor1 = state_attr('sensor.energy_production_today', 'watts') %}
{% set sensor2 = state_attr('sensor.energy_production_today_2', 'watts') %}
{% set ns = namespace(output={}) %}
{% for time, value in sensor1.items() %}
{% set sum_value = value + sensor2[time] %}
{% set ns.output = dict({time: sum_value}, **ns.output) %}
{% endfor %}
{{ ns.output }}
Das ganze sieht dann so aus:
Sowohl die x-Achse als auch der Offset sollen sich dann dynamisch anpassen, damit ich nicht immer von Hand die Tageslänge anpassen muss.
Vielleicht hat ja jemand eine Idee, wie ich die vorhandenen Templates vereinfachen oder verbessern kann. Und wie ich generell Datum/Zeitformate in Dezimalzahlen umwandeln kann.
mfg
Rainer









