This commit is contained in:
Bastian Schnorbus
2025-05-04 15:46:15 +02:00
parent dc9575ff33
commit 188671fd7e
7 changed files with 637 additions and 2 deletions

View File

@@ -0,0 +1,65 @@
#sensor.sun_elevation
@state_trigger("sensor.sun_elevation")
def sun_change(trigger_type=None, var_name=None, value=None):
"""Sun is above horizon."""
if value is None:
return
rollo_kinderzimmer_expected_pos = 50
rollo_kinderzimmer_elevation_threshold = 15
rollo_schlafzimmer_elevation_threshold = 48
# sun_change: trigger_type state var_name sensor.sun_elevation value 18.04
log.info(f"sun_change: trigger_type {trigger_type} var_name {var_name} value {value}")
# weather.forecast_home
sonnenschutz = state.get("input_boolean.sonnenschutz")
if sonnenschutz == "off":
log.info(f"sun_change: sonnenschutz {sonnenschutz}, exiting")
return
if float(value) < 0:
log.info("sun_change: sun is below horizon, exiting")
# fenster und rollo zustände auslesen
fenster_kinderzimmer = state.get("binary_sensor.neq0632846_state")
fenster_schlafzimmer_l = state.get("binary_sensor.neq0629114_state")
fenster_schlafzimmer_r = state.get("binary_sensor.neq0627526_state")
rollo_kinderzimmer = state.get("cover.00115a498e0439")
rollo_kinderzimmer_attribs = state.getattr("cover.00115a498e0439")
rollo_kinderzimmer_position = rollo_kinderzimmer_attribs['current_position']
log.info(f"Fenster: kinderzimmer {fenster_kinderzimmer}, szl {fenster_schlafzimmer_l}, szr {fenster_schlafzimmer_r}")
log.info(f"Rollos: kinderzimmer {rollo_kinderzimmer}, ({rollo_kinderzimmer_position}%)")
# wettervorhersage: temperatur, wolken, condition
forecast_temp = state.get("sensor.daily_forecast")
forecast_attribs = state.getattr("sensor.daily_forecast")
forecast_cloudcoverage = forecast_attribs['cloud_coverage']
forecast_condition = forecast_attribs['condition']
log.info(f"sun_change: forecast_temp {forecast_temp}, cloudcoverage {forecast_cloudcoverage}, condition {forecast_condition}")
if float(forecast_temp) <= 15 and forecast_cloudcoverage > 50:
log.info("sun_change: weather not nice, not taking care of covers")
return
if float(value) > rollo_kinderzimmer_elevation_threshold:
# wenn fenster geschlossen und rollo oben
if fenster_kinderzimmer == 'off' and rollo_kinderzimmer_position > rollo_kinderzimmer_expected_pos:
log.info("nu würde ich was runterfahren im kinderzimmer")
if float(value) > rollo_schlafzimmer_elevation_threshold:
if fenster_schlafzimmer_l == 'off' and fenster_schlafzimmer_r == 'off':
log.info("nu würde ich was runterfahren im schlafzimmer")
if trigger_type == "state":
if var_name == "sensor.sun_elevation":
log.info(f"sun_change: sun elevation changed to {value}")
if float(value) < 0:
log.info("sun_change: sun is below horizon, exiting")