Zuerst mein dank an Schlumperdix der “sein” Wetterdashboard hier https://community.simon42.com/t/howto-wetterdashboard-fuer-anfaenger/65479 zu Verfügung gestellt hat 👍️
Ich habe das für mich Aufgegriffen und ein bisschen für mich Angepasst.
Der größte Unterschied ist ich “Scrape” die Daten nicht von einer Webseite und ich verwende im Code als Entität
“weather.weather_fusion_ai_home” statt “weather.dwd” und natürlich habe ich alle Internen Sensoren gegen meine getauscht,
Ebenfalls habe ich die Kachel “Sonneneinstrahlung” dort gesehen, einen Code gab es nicht, ich wollte das als PV-Betreiber aber gerne in w/m² sehen, also hat die KI und ich was gebastelt 🤭

Um das Realisieren zu können, es sind hier mehrere Berechnungen nötigt, habe ich per HACS “Pyscript” Installiert,
und von ChatGPT einen Code schreiben lassen natürlich bekam sie vorher die nötigen Infos
temperature_unit: °C pressure_unit: hPa wind_speed_unit: km/h visibility_unit: km precipitation_unit: mm location: Home latitude: 49.90565346888578 longitude: 8.59233319759369 learning_days: 170 learning_accuracy: 0 active_sources: 6 attribution: Weather data by Weather Fusion AI (Multi-Source Blending) friendly_name: Weather Fusion AI (Home) supported_features: 3 temperature: 40.5 humidity: 20 cloud_coverage: 15.33 uv_index: 6.1 pressure: 1012.1 wind_bearing: 201.67 wind_speed: 9.07 visibility: 51.57 blend_cloud_type: fair blend_experts_used: - GFS (NOAA) - ICON (DWD)
Damit konnte sie Arbeiten, ich habe dann den Ordner und die Datei erstellt:
config/pyscript/solar_irradiance.py und dort den Code rein Kopiert:
from math import sin, cos, asin, radians, pi, exp
from datetime import datetime
LAT = 49.90565346888578
@time_trigger("period(now, 60s)")
def solar_irradiance():
now = datetime.now()
day = now.timetuple().tm_yday
hour = now.hour + now.minute / 60 + now.second / 3600
# Sonnen-Deklination
decl = radians(
23.44 * sin(radians((360 / 365.0) * (day - 81)))
)
lat = radians(LAT)
hour_angle = radians(15 * (hour - 12))
altitude = asin(
sin(lat) * sin(decl)
+ cos(lat) * cos(decl) * cos(hour_angle)
)
altitude_deg = altitude * 180 / pi
if altitude_deg <= 0:
irradiance = 0
else:
# extraterrestrische Solarstrahlung
I0 = 1361 * (
1 + 0.033 * cos(radians(360 * day / 365))
)
# Air Mass
am = 1 / (
sin(altitude)
+ 0.50572 * ((altitude_deg + 6.07995) ** -1.6364)
)
clear = I0 * (0.7 ** (am ** 0.678))
weather = state.get("weather.weather_fusion_ai_home")
cloud = float(
state.getattr(weather).get("cloud_coverage", 0)
)
humidity = float(
state.getattr(weather).get("humidity", 40)
)
visibility = float(
state.getattr(weather).get("visibility", 50)
)
# Bewölkung
cloud_factor = 1 - (cloud / 100) * 0.75
# Luftfeuchtigkeit
humidity_factor = 1 - max(0, humidity - 50) / 200
# Sichtweite
visibility_factor = min(1, visibility / 50)
irradiance = (
clear
* cloud_factor
* humidity_factor
* visibility_factor
)
irradiance = max(0, min(1100, irradiance))
state.set(
"sensor.sonneneinstrahlung",
round(irradiance),
unit_of_measurement="W/m²",
friendly_name="Sonneneinstrahlung",
device_class="irradiance"
)
Und noch der Code für die Kachel:
type: custom:mini-graph-card
name: Sonneneinstrahlung
icon: mdi:white-balance-sunny
entities:
- sensor.sonneneinstrahlung
hours_to_show: 24
points_per_hour: 6
height: 170
line_width: 2
align_state: center
hour24: true
show:
fill: fade
extrema: true
labels: true
icon: true
state: true
color_thresholds_transition: smooth
color_thresholds:
- value: 0
color: "#3134f9"
- value: 100
color: "#3485fa"
- value: 200
color: "#38d6fc"
- value: 300
color: "#3cfed8"
- value: 400
color: "#3cfe8e"
- value: 500
color: "#3cfe50"
- value: 600
color: "#87fe51"
- value: 700
color: "#d7ff52"
- value: 800
color: "#ffd64c"
- value: 900
color: "#fe8540"
- value: 1000
color: "#fe3739"
Die Kachel “Relative Luftfeuchtigkeit” habe ich auch etwas Umgestaltet:

Hier der Code:
type: custom:mini-graph-card
name: Relative Luftfeuchte Terrasse
icon: mdi:water-percent
entities:
- entity: sensor.terrasse_aussentemperatur_terrasse_luftfeuchtigkeit
name: Luftfeuchte
hours_to_show: 12
points_per_hour: 1
height: 170
hour24: true
show:
graph: bar
extrema: true
fill: fade
icon: true
labels: true
name: true
state: true
color_thresholds_transition: smooth
color_thresholds:
- value: 0
color: "#3134f9"
- value: 20
color: "#3485fa"
- value: 40
color: "#38d6fc"
- value: 50
color: "#3cfed8"
- value: 60
color: "#3cfe8e"
- value: 70
color: "#d7ff52"
- value: 80
color: "#ffd64c"
- value: 90
color: "#fe8540"
- value: 100
color: "#fe3739"
Ansonsten bin ich ziemlich Analog zu Schlumperdix Anleitung geblieben 👍️