diff --git a/automations.yaml b/automations.yaml index 02e73ef..6bfbeee 100644 --- a/automations.yaml +++ b/automations.yaml @@ -5030,38 +5030,6 @@ alias: Update Notification mode: parallel max: 10 -- id: '1714595577405' - alias: Emma Bedroom Cooling - description: '' - trigger: - - platform: time - at: input_datetime.emma_bedroom_cooling - alias: At the scheduled cooling time - condition: - - condition: state - entity_id: input_boolean.emma_sleeping - state: 'off' - alias: If Emma is not already asleep - - condition: state - entity_id: input_select.scheduled_climate_mode_emma_bedroom - state: AC - alias: If the AC is scheduled to run - action: - - service: fan.turn_on - metadata: {} - data: {} - target: - entity_id: fan.emma_air_conditioner - alias: Turn on Emma's air conditioner - - service: script.text_notify - data: - who: parents - title: Emma Climate Schedule - message: The air conditioner in Emma's Bedroom has been activated. - type: normal - tag: emma-climate - alias: Send AC notification - mode: restart - id: '1716497196985' alias: Emma Bedtime Rescheduler description: Keeps Emma's bedtime up-to-date with reality diff --git a/packages/climate.yaml b/packages/climate.yaml index fe0373d..f5eefde 100644 --- a/packages/climate.yaml +++ b/packages/climate.yaml @@ -1,14 +1,14 @@ template: - binary_sensor: - - name: Emma Aircon - Compressor + - name: Emma Bedroom Aircon - Compressor unique_id: 21bcbb62-823c-43ff-8c2c-26e940324ee6 - state: "{{ states('sensor.emma_air_conditioner_power') | int > 150 }}" - availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}" + state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 150 }}" + availability: "{{ states('climate.emma_bedroom_aircon') not in ['unknown','unavailable'] }}" device_class: running - - name: Emma Aircon - Fan + - name: Emma Bedroom Aircon - Fan unique_id: 9e3054cf-8f7e-4fef-9da4-5b2f2bc99c9d - state: "{{ states('sensor.emma_air_conditioner_power') | int > 20 }}" - availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}" + state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 20 }}" + availability: "{{ states('climate.emma_bedroom_aircon') not in ['unknown','unavailable'] }}" device_class: running - name: Master Bedroom Aircon - Compressor unique_id: 87051957-1dbc-4d65-b138-e8469728f58f @@ -142,6 +142,36 @@ template: mdi:fan-off {% endif %} availability: "{{ states('climate.master_bedroom_aircon') not in ['unavailable','unknown'] }}" + - name: "Emma Bedroom Target Temp" + unique_id: b81152a1-d4d9-4e3e-8a78-6039de2884ad + state: "{{ state_attr('climate.emma_bedroom_aircon','temperature') | float }}" + availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}" + - name: "Emma Bedroom Eco Mode" + unique_id: 4b6fc8fc-4152-4d8b-ad8d-80f97fcabe44 + state: "{{ is_state_attr('climate.emma_bedroom_aircon','preset_mode','eco') }}" + icon: >- + {% if is_state_attr('climate.emma_bedroom_aircon','preset_mode','eco') %} + mdi:home-lightning-bolt + {% else %} + mdi:home-lightning-bolt-outline + {% endif %} + availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}" + - name: "Emma Bedroom Aircon Fan Mode" + unique_id: d678eb2e-be5b-4626-913d-fc1e32941ead + state: "{{ state_attr('climate.emma_bedroom_aircon','fan_mode') }}" + icon: > + {% if is_state_attr('climate.emma_bedroom_aircon','fan_mode','Auto') %} + mdi:fan-auto + {% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','Low') %} + mdi:fan-speed-1 + {% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','Medium') %} + mdi:fan-speed-2 + {% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','High') %} + mdi:fan-speed-3 + {% else %} + mdi:fan-off + {% endif %} + availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}" - name: Living Room Average Temperature unique_id: c4a901a6-87e2-4257-b60b-2944be8fdf04 state: > @@ -187,16 +217,17 @@ input_boolean: master_bedroom_climate_protocol: name: Master Bedroom Climate Protocol icon: mdi:lightbulb-night + emma_bedroom_climate_protocol: + name: Emma Bedroom Climate Protocol + icon: mdi:lightbulb-night kallen_bedtime_protocol: name: Kallen Bedtime Protocol icon: mdi:lightbulb-night - # Turn on when master bedroom air conditioner is installed, turn off in winter when we take it out, for smarter automations + # Turn on when air conditioners are installed, turn off in winter when we take them out master_bedroom_aircon_installed: name: Master Bedroom Aircon Installed icon: mdi:tools - - # Same thing, but for Emma's bedroom air conditioner emma_bedroom_aircon_installed: name: Emma Bedroom Aircon Installed icon: mdi:tools @@ -205,6 +236,9 @@ input_boolean: master_bedroom_cooling_on: name: Master Bedroom Cooling On icon: mdi:snowflake + emma_bedroom_cooling_on: + name: Emma Bedroom Cooling On + icon: mdi:snowflake # Activated if the day will be excessively hot. For use with automations for daytime climate control. hot_day: @@ -247,6 +281,7 @@ input_select: name: Scheduled Climate Mode - Emma Bedroom options: - AC + - Fan - Heat - White Noise - N/A @@ -309,13 +344,55 @@ input_number: step: 1 unit_of_measurement: °F icon: mdi:thermometer - emma_aircon_threshold: - name: Emma Aircon Threshold + emma_bedroom_daytime_temp: + name: Emma Bedroom Daytime Temp + min: 65 + max: 80 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer + emma_bedroom_night_temp: + name: Emma Bedroom Night Temp + min: 65 + max: 80 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer + emma_bedroom_bedtime_temp: + name: Emma Bedroom Bedtime Temp + min: 65 + max: 80 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer + emma_bedroom_aircon_run_threshold: + name: Emma Bedroom Aircon Run Threshold min: 40 max: 80 step: 1 unit_of_measurement: °F icon: mdi:thermometer + emma_bedroom_aircon_mode_threshold: + name: Emma Bedroom Aircon Mode Threshold + min: 40 + max: 80 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer + emma_bedroom_fan_threshold: + name: Emma Bedroom Fan Threshold + min: 30 + max: 70 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer + emma_bedroom_auto_cooling_threshold: + name: Emma Bedroom Auto Cooling Threshold + min: 70 + max: 90 + step: 1 + unit_of_measurement: °F + icon: mdi:thermometer kallen_fan_threshold: name: Kallen Fan Threshold min: 40 diff --git a/packages/emmalynn.yaml b/packages/emmalynn.yaml index 50b8734..cb4bcb7 100644 --- a/packages/emmalynn.yaml +++ b/packages/emmalynn.yaml @@ -904,26 +904,3 @@ script: - service: input_boolean.turn_off target: entity_id: input_boolean.white_noise_emma_bedroom - - if: - - condition: state - entity_id: fan.emma_air_conditioner - state: 'on' - then: - - service: script.turn_on - target: - entity_id: script.emma_aircon_shutoff - - emma_aircon_shutoff: - alias: 'Emma Air Conditioner Shutoff' - mode: restart - description: 'Attempt to shut off air conditioner after compressor stops running' - sequence: - - wait_template: "{{ is_state('binary_sensor.emma_aircon_compressor','off') }}" - timeout: - minutes: 15 - continue_on_timeout: true - - delay: - seconds: 5 - - service: fan.turn_off - target: - entity_id: fan.emma_air_conditioner \ No newline at end of file diff --git a/packages/powercalc.yaml b/packages/powercalc.yaml index 2227f88..48c11bf 100644 --- a/packages/powercalc.yaml +++ b/packages/powercalc.yaml @@ -17,8 +17,8 @@ sensor: entity_id: switch.tina_desktop power_sensor_id: sensor.tina_desktop_power - platform: powercalc - entity_id: fan.emma_air_conditioner - power_sensor_id: sensor.emma_air_conditioner_power + entity_id: switch.emma_bedroom_aircon + power_sensor_id: sensor.emma_bedroom_aircon_power - platform: powercalc entity_id: switch.master_bedroom_aircon power_sensor_id: sensor.master_bedroom_aircon_power diff --git a/packages/presence.yaml b/packages/presence.yaml index 92f52c3..209d9bf 100644 --- a/packages/presence.yaml +++ b/packages/presence.yaml @@ -613,7 +613,6 @@ automation: target: entity_id: - fan.kallen_bedroom_fan - - fan.emma_air_conditioner - service: button.press target: entity_id: button.master_bedroom_climate_reset diff --git a/scripts.yaml b/scripts.yaml index 3934065..8ff7184 100644 --- a/scripts.yaml +++ b/scripts.yaml @@ -2972,69 +2972,33 @@ emma_sleep: option: Adaptive alias: Set lights to adaptive action: input_select.select_option - - alias: Select climate mode - choose: - - conditions: - - alias: AC - condition: and - conditions: - - condition: state - entity_id: input_select.scheduled_climate_mode_emma_bedroom - state: AC - alias: Scheduled mode is AC - - condition: state - entity_id: fan.emma_air_conditioner - state: 'off' - alias: Air conditioner is not already on - sequence: - - target: - entity_id: fan.emma_air_conditioner - data: {} - alias: Turn on air conditioner - action: fan.turn_on - - data: - who: parents - title: Emma Climate Schedule - message: The air conditioner in Emma's Bedroom has been activated. - type: normal - tag: emma-climate - alias: Send AC notification - action: script.text_notify - - conditions: - - alias: White Noise - condition: and - conditions: - - condition: state - entity_id: input_select.scheduled_climate_mode_emma_bedroom - state: White Noise - alias: Scheduled mode is White Noise - - condition: state - entity_id: input_boolean.white_noise_emma_bedroom - state: 'off' - alias: White Noise is not already on - sequence: - - target: - entity_id: input_boolean.white_noise_emma_bedroom - data: {} - alias: Turn on white noise - action: input_boolean.turn_on - - data: - who: parents - title: Emma Climate Schedule - message: White noise has been activated in Emma's Bedroom. - type: normal - tag: emma-climate - alias: Send white noise notification - action: script.text_notify - default: + - if: + - alias: White Noise + condition: and + conditions: + - condition: state + entity_id: input_select.scheduled_climate_mode_emma_bedroom + state: White Noise + alias: Scheduled mode is White Noise + - condition: state + entity_id: input_boolean.white_noise_emma_bedroom + state: 'off' + alias: White Noise is not already on + then: + - target: + entity_id: input_boolean.white_noise_emma_bedroom + data: {} + alias: Turn on white noise + action: input_boolean.turn_on - data: who: parents title: Emma Climate Schedule - message: No option selected for Emma's climate mode. No devices will be activated. + message: White noise has been activated in Emma's Bedroom. type: normal tag: emma-climate - alias: Send notification that no climate mode is selected + alias: Send white noise notification action: script.text_notify + alias: Select climate mode icon: mdi:lightbulb-night mode: restart tina_morning_meds: diff --git a/sensors/house_stats.yaml b/sensors/house_stats.yaml index 71c26f4..579a21f 100644 --- a/sensors/house_stats.yaml +++ b/sensors/house_stats.yaml @@ -168,7 +168,7 @@ unit_of_measurement: '' state: >- {% set compressors = [ - states.binary_sensor.emma_aircon_compressor, + states.binary_sensor.emma_bedroom_aircon_compressor, states.binary_sensor.master_bedroom_aircon_compressor ] %} {{ compressors | selectattr('state','eq','on') | list | count | int }} @@ -177,7 +177,7 @@ unit_of_measurement: '' state: >- {% set fans = [ - states.binary_sensor.emma_aircon_fan, + states.binary_sensor.emma_bedroom_aircon_fan, states.binary_sensor.master_bedroom_aircon_fan ] %} {{ fans | selectattr('state','eq','on') | list | count | int }} @@ -196,11 +196,7 @@ unit_of_measurement: '' state: >- {% set climate = states.climate | selectattr('state','ne','off') | rejectattr('state','eq','unavailable') | rejectattr('state','eq','unknown') | list | count | int %} - {% set fans = [ - states.fan.emma_air_conditioner - ] %} - {% set fans_on = fans | selectattr('state','eq','on') | list | count | int %} - {{ climate + fans_on | int }} + {{ climate | int }} - name: Climate Devices Running unique_id: 3c61c756-2934-4294-8085-7d3855b692dd unit_of_measurement: '' diff --git a/templates/speech/nightly_briefing.yaml b/templates/speech/nightly_briefing.yaml index b1f0598..003f48c 100644 --- a/templates/speech/nightly_briefing.yaml +++ b/templates/speech/nightly_briefing.yaml @@ -71,9 +71,13 @@ {% else %} "Collin's room will be left alone, as he is spending the night elsewhere tonight. " {% endif %} - {% if states('input_select.scheduled_climate_mode_emma_bedroom') != 'N/A' %} - {% if is_state('input_select.scheduled_climate_mode_emma_bedroom','AC') and is_state('fan.emma_air_conditioner','off') %} - "Emma's air conditioner will be activated at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. " + {% if states('input_select.scheduled_climate_mode_emma_bedroom_aircon') != 'N/A' %} + {% if is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') and is_state('input_boolean.hot_day','on') %} + "Today was a hot day, so Emma's bedroom air conditioner will start cooling a bit earlier tonight at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. " + {% elif is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') %} + "Emma's bedroom air conditioner will start cooling at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. " + {% elif is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','Fan') %} + "Emma's bedroom air conditioner will activate fan only mode at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. " {% elif is_state('input_select.scheduled_climate_mode_emma_bedroom','White Noise') and is_state('input_boolean.white_noise_emma_bedroom','off') %} "Emma's white noise generator will activate at {{ input_datetime_read('input_datetime.emma_bedtime') }}. " {% endif %} diff --git a/templates/speech/welcome_home.yaml b/templates/speech/welcome_home.yaml index 594a512..65e772a 100644 --- a/templates/speech/welcome_home.yaml +++ b/templates/speech/welcome_home.yaml @@ -91,8 +91,21 @@ {% endif %} {% endif %} {% endif %} - {% if is_state('input_boolean.emma_bedroom_aircon_installed','on') and is_state('fan.emma_air_conditioner','on') %} - "Emma's air conditioner is {{ states('fan.emma_air_conditioner') }}. " + {% if is_state('input_boolean.emma_bedroom_aircon_installed','on') %} + "the temperature in Emma's bedroom is {{ states('sensor.emma_bedroom_temperature') | int }} degrees. " + {% if not is_state('climate.emma_bedroom_aircon','off') %} + {% if is_state('climate.emma_bedroom_aircon','cool') %} + "and Emma's bedroom air conditioner is set for cooling to {{ state_attr('climate.emma_bedroom_aircon','temperature') }} degrees. " + {% elif is_state('climate.emma_bedroom_aircon','fan_only') %} + "and Emma's bedroom air conditioner is in fan only mode. " + {% elif is_state('climate.emma_bedroom_aircon','dry') %} + "and Emma's bedroom air conditioner is moonlighting as a dehumidifier. " + {% elif is_state('climate.emma_bedroom_aircon','auto') %} + "and Emma's bedroom air conditioner is making its own decisions. Be afraid, be very afraid. " + {% else %} + "and Emma's bedroom air conditioner is currently not speaking to me. Was it something I said? " + {% endif %} + {% endif %} {% endif %} {% endif %}