virtual_sensors: module: virtualsensors class: VirtualSensorsApp priority: 10 # default priority app is 50, since most of them require sensors created by virtual sensors, it's important that virtual_sensors start first default_values: binary_sensor.is_tv_on: false 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' value_selector.commut_rain_minutes_until_rain: values: le_cres_first: 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: 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: 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: 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.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 event_sensor.red_shelly_home: retain_time: 120 activation_events: signal_strenght: event_name: state_changed event_data: entity_id: sensor.shelly_button_red_signal_strength # living room sensors value_selector.living_room_ambiance_light: values: 0: - not binary_sensor.living_room_occupancy - binary_sensor.projector_on and not binary_sensor.is_vertex2_content_idle - binary_sensor.is_tv_on - light.living_room - sensor.mezzanine_motion_light_level > 15 - binary_sensor.is_living_room_sleeping 1: - binary_sensor.is_everybody_sleeping - binary_sensor.projector_on 2: true # home cinema sensors binary_sensor.projector_on: switch.living_room_projector_plug and sensor.living_room_projector_plug_power > 50 continuous_condition.projector_off_for_a_while: time: 90 default_value: on conditions: not binary_sensor.projector_on # is_apple_tv_on is not reliable as the the apple tv integration sometimes return "paused" when it's actually off, # you should use is_using_apple_tv instead for most automation binary_sensor.is_apple_tv_on: media_player.apple_tv != 'off' and media_player.apple_tv != 'idle' binary_sensor.is_xbox_on: binary_sensor.yetanotherpedro #media_player.xbox != 'off' and media_player.xbox != 'unavailable' binary_sensor.is_playstation_on: switch.ps5_136_power sensor.vertex2_input_selected_icon: sensor.vertex2_input_selected.icon retain_condition.vertex2_has_input_signal: retain_time: 20 conditions: trigger_conditions: (sensor.vertex2_video_signal and sensor.vertex2_video_signal != 'no signal') or sensor.vertex2_audio_signal disable_conditions: binary_sensor.vertex2_unreachable sensor_attributes: icon: sensor.vertex2_input_selected_icon binary_sensor.is_using_apple_tv: binary_sensor.is_apple_tv_on and binary_sensor.vertex2_has_input_signal and sensor.vertex2_input_selected == 'AppleTV' binary_sensor.is_using_xbox: binary_sensor.is_xbox_on and binary_sensor.vertex2_has_input_signal and sensor.vertex2_input_selected == 'Xbox' binary_sensor.is_using_playstation: binary_sensor.is_playstation_on and binary_sensor.vertex2_has_input_signal and sensor.vertex2_input_selected == 'Playstation' continuous_condition.is_vertex2_content_idle: time: 5 conditions: trigger_conditions: - binary_sensor.is_using_apple_tv and (media_player.apple_tv == 'paused' or media_player.apple_tv == 'idle' or media_player.apple_tv == 'standby') # - binary_sensor.is_using_playstation and sensor.ps5_136_activity == 'idle' # - binary_sensor.is_using_xbox and not binary_sensor.yetanotherpedro_in_game #p1p sensors binary_sensor.p1p_is_printing: trigger_conditions: sensor.garage_p1p_etat_de_l_impression != 'idle' and sensor.garage_p1p_etat_de_l_impression != 'finish' and sensor.garage_p1p_etat_de_l_impression != 'idle' and sensor.garage_p1p_etat_de_l_impression != 'offline' disable_conditions: sensor.garage_p1p_etat_de_l_impression == 'offline' and switch.garage_p1p_plug blocking_conditions: not switch.garage_p1p_plug binary_sensor.p1p_is_active: trigger_conditions: - binary_sensor.p1p_is_printing - fan.garage_p1p_ventilateur_de_la_chambre or fan.garage_p1p_ventilateur_de_refroidissement - sensor.garage_p1p_temperature_cible_de_la_buse > 0 or sensor.garage_p1p_temperature_cible_du_lit > 0 blocking_conditions: not switch.garage_p1p_plug