diff --git a/apps/ad_toolbox b/apps/ad_toolbox index cded4a0..ece851f 160000 --- a/apps/ad_toolbox +++ b/apps/ad_toolbox @@ -1 +1 @@ -Subproject commit cded4a0200e200265f9cad4c8dc2b9f3e7b51681 +Subproject commit ece851f5a01fcbc64ab19781a2d464fc2950e64a diff --git a/apps/global/virtualsensors.yaml b/apps/global/virtualsensors.yaml index 51dcbdb..6a48696 100644 --- a/apps/global/virtualsensors.yaml +++ b/apps/global/virtualsensors.yaml @@ -9,45 +9,68 @@ virtual_sensors: sensors: binary_sensor.someone_home: person.maeva == 'home' or person.pierre == 'home' or (input_boolean.use_red_shelly_presence and binary_sensor.red_shelly_home) binary_sensor.is_dark_outside: sun.sun == 'below_horizon' - # Rain commute: time windows are provided by Home Assistant binary sensors. - sensor.commut_rain_minutes_le_cres: sensor.next_rain_le_cres.minutes_until_rain - sensor.commut_rain_minutes_castelnau: sensor.next_rain_castelnau_le_lez.minutes_until_rain - sensor.commut_rain_intensity_le_cres: sensor.next_rain_le_cres.intensity - sensor.commut_rain_intensity_castelnau: sensor.next_rain_castelnau_le_lez.intensity value_selector.commut_rain_minutes_until_rain: values: le_cres_first: - conditions: >- - sensor.commut_rain_minutes_le_cres != 'unknown' and - sensor.commut_rain_minutes_le_cres != 'unavailable' and - sensor.commut_rain_minutes_castelnau != 'unknown' and - sensor.commut_rain_minutes_castelnau != 'unavailable' and - sensor.commut_rain_minutes_le_cres <= sensor.commut_rain_minutes_castelnau - value: sensor.commut_rain_minutes_le_cres - le_cres_only: - conditions: sensor.commut_rain_minutes_le_cres != 'unknown' and sensor.commut_rain_minutes_le_cres != 'unavailable' - value: sensor.commut_rain_minutes_le_cres + conditions: + local_expressions: + cres_minutes: sensor.next_rain_le_cres.minutes_until_rain + castelnau_minutes: sensor.next_rain_castelnau_le_lez.minutes_until_rain + cres_minutes_available: cres_minutes != None and cres_minutes != 'unknown' and cres_minutes != 'unavailable' + castelnau_minutes_available: castelnau_minutes != None and castelnau_minutes != 'unknown' and castelnau_minutes != 'unavailable' + trigger_conditions: cres_minutes_available and (not castelnau_minutes_available or cres_minutes <= castelnau_minutes) + value: sensor.next_rain_le_cres.minutes_until_rain castelnau_only: - conditions: sensor.commut_rain_minutes_castelnau != 'unknown' and sensor.commut_rain_minutes_castelnau != 'unavailable' - value: sensor.commut_rain_minutes_castelnau + conditions: + local_expressions: + cres_minutes: sensor.next_rain_le_cres.minutes_until_rain + castelnau_minutes: sensor.next_rain_castelnau_le_lez.minutes_until_rain + cres_minutes_available: cres_minutes != None and cres_minutes != 'unknown' and cres_minutes != 'unavailable' + castelnau_minutes_available: castelnau_minutes != None and castelnau_minutes != 'unknown' and castelnau_minutes != 'unavailable' + trigger_conditions: castelnau_minutes_available and (not cres_minutes_available or castelnau_minutes < cres_minutes) + value: sensor.next_rain_castelnau_le_lez.minutes_until_rain unknown: true value_selector.commut_rain_intensity: values: - Pluie forte: sensor.commut_rain_intensity_le_cres == 'Pluie forte' or sensor.commut_rain_intensity_castelnau == 'Pluie forte' - Pluie modérée: sensor.commut_rain_intensity_le_cres == 'Pluie modérée' or sensor.commut_rain_intensity_castelnau == 'Pluie modérée' - Pluie faible: sensor.commut_rain_intensity_le_cres == 'Pluie faible' or sensor.commut_rain_intensity_castelnau == 'Pluie faible' - Temps sec: sensor.commut_rain_intensity_le_cres == 'Temps sec' and sensor.commut_rain_intensity_castelnau == 'Temps sec' + Pluie forte: + conditions: + local_expressions: + cres_intensity: sensor.next_rain_le_cres.intensity + castelnau_intensity: sensor.next_rain_castelnau_le_lez.intensity + trigger_conditions: cres_intensity == 'Pluie forte' or castelnau_intensity == 'Pluie forte' + Pluie modérée: + conditions: + local_expressions: + cres_intensity: sensor.next_rain_le_cres.intensity + castelnau_intensity: sensor.next_rain_castelnau_le_lez.intensity + trigger_conditions: cres_intensity == 'Pluie modérée' or castelnau_intensity == 'Pluie modérée' + Pluie faible: + conditions: + local_expressions: + cres_intensity: sensor.next_rain_le_cres.intensity + castelnau_intensity: sensor.next_rain_castelnau_le_lez.intensity + trigger_conditions: cres_intensity == 'Pluie faible' or castelnau_intensity == 'Pluie faible' + Temps sec: + conditions: + local_expressions: + cres_intensity: sensor.next_rain_le_cres.intensity + castelnau_intensity: sensor.next_rain_castelnau_le_lez.intensity + trigger_conditions: cres_intensity == 'Temps sec' and castelnau_intensity == 'Temps sec' unknown: true binary_sensor.commut_rain: - conditions: >- - binary_sensor.pierre_workday and - ((person.pierre == 'home' and binary_sensor.morning_commut_time) or - (person.pierre != 'home' and person.pierre != 'unknown' and person.pierre != 'unavailable' and binary_sensor.evening_commut_time)) and - ((sensor.next_rain_le_cres != 'unknown' and sensor.next_rain_le_cres != 'unavailable') or - (sensor.next_rain_castelnau_le_lez != 'unknown' and sensor.next_rain_castelnau_le_lez != 'unavailable')) + conditions: + trigger_conditions: + - sensor.next_rain_le_cres != 'unknown' and sensor.next_rain_le_cres != 'unavailable' + - sensor.next_rain_castelnau_le_lez != 'unknown' and sensor.next_rain_castelnau_le_lez != 'unavailable' + blocking_conditions: + - not person.pierre + - person.pierre == 'home' and not binary_sensor.morning_commut_time + - person.pierre != 'home' and not binary_sensor.evening_commut_time + - not binary_sensor.pierre_workday + sensor_attributes: - minutes_until_rain_le_cres: sensor.commut_rain_minutes_le_cres - minutes_until_rain_castelnau: sensor.commut_rain_minutes_castelnau + minutes_until_rain_le_cres: sensor.next_rain_le_cres.minutes_until_rain + minutes_until_rain_castelnau: sensor.next_rain_castelnau_le_lez.minutes_until_rain minutes_until_rain: sensor.commut_rain_minutes_until_rain intensity: sensor.commut_rain_intensity