Compare commits

...

13 Commits

Author SHA1 Message Date
github-actions[bot]
2b40fff745 Update HA version badge to 2025.11.3 2025-11-26 21:40:19 +00:00
Carlo Costanzo
8bcde4e526 Merge pull request #1541 from CCOSTAN/Move-Nest-Schedule-to-HA
Move-Nest-Schedule-to-HA
2025-11-26 16:40:01 -05:00
github-actions[bot]
36dbd87626 Update HA version badge to 2025.11.3 2025-11-26 21:39:53 +00:00
Carlo Costanzo
6615179da5 Update climate.yaml to replace grid status conditions with powerwall grid status checks, ensuring HVAC operations are only triggered when the powerwall is active. Enhance powerwall.yaml with detailed comments on binary sensors, power and energy sensors, and switches for better clarity and documentation. 2025-11-26 16:39:20 -05:00
Carlo Costanzo
bf972d7d73 Add script for dynamic downstairs temperature control in climate.yaml, consolidating existing automation logic into a single sequence. Update README.md to reflect new Nest climate control features and improve device descriptions. 2025-11-26 16:39:20 -05:00
Carlo Costanzo
830322c40f Add grid status condition checks to climate automation in climate.yaml, ensuring HVAC operations only occur when the grid is normal. This prevents conflicts during power outages. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 16:39:14 -05:00
Carlo Costanzo
cf5af8efae Add humidity control automation to climate.yaml, enhancing HVAC management with conditions based on humidity levels and family presence. Includes temperature adjustments and preset mode settings for improved efficiency. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 16:39:13 -05:00
Carlo Costanzo
f4e354bae0 Enhance climate.yaml with detailed entity summaries, update thermostat automation logic, and add humidity control features for improved HVAC management. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 16:39:13 -05:00
Carlo Costanzo
cd4b8ab19f Update climate.yaml to replace grid status conditions with powerwall grid status checks, ensuring HVAC operations are only triggered when the powerwall is active. Enhance powerwall.yaml with detailed comments on binary sensors, power and energy sensors, and switches for better clarity and documentation. 2025-11-26 15:16:21 -05:00
Carlo Costanzo
64d9e6c6ac Add script for dynamic downstairs temperature control in climate.yaml, consolidating existing automation logic into a single sequence. Update README.md to reflect new Nest climate control features and improve device descriptions. 2025-11-26 14:53:47 -05:00
Carlo Costanzo
aa18331b51 Add grid status condition checks to climate automation in climate.yaml, ensuring HVAC operations only occur when the grid is normal. This prevents conflicts during power outages. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 13:59:36 -05:00
Carlo Costanzo
b1b24e8372 Add humidity control automation to climate.yaml, enhancing HVAC management with conditions based on humidity levels and family presence. Includes temperature adjustments and preset mode settings for improved efficiency. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 12:46:59 -05:00
Carlo Costanzo
a374953dd5 Enhance climate.yaml with detailed entity summaries, update thermostat automation logic, and add humidity control features for improved HVAC management. Move the entire Nest schedule to Home Assistant.
Fixes #1509
2025-11-26 12:46:35 -05:00
5 changed files with 242 additions and 65 deletions

View File

@@ -49,6 +49,11 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
| [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state from HASS.Agent to the office lamp for instant desk presence cues. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `switch.office_lamp_switch` |
| [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` |
### Nest climate control
- Logic lives in [climate.yaml](climate.yaml) and centralizes downstairs/upstairs Nest schedules, grid-aware guardrails, humidity pulses, and presence/weather-based targets.
- Shared script keeps targets consistent: away → eco, home + >92°F → 78°F, home default → 80°F. Grid-down conditions pause non-essential cool-downs.
![Nest Climate Control](../www/custom_ui/floorplan/images/branding/Nest_Climate_Control.png)
### Blog & video deep dives
When a package has a dedicated blog post or video, I link it right inside the YAML comments. Here are the same references for quick browsing:
@@ -75,6 +80,7 @@ These are the devices that power the packages above. Affiliate links never chang
| Phyn Plus water shutoff | [phynplus.yaml](phynplus.yaml) | Leak events trigger valve closes + critical push notifications. | [![Buy](https://img.shields.io/badge/Buy-Phyn%20Plus-orange?logo=amazon)](https://amzn.to/2Zy3sbJ) |
| Rachio sprinkler controller | [rachio.yaml](rachio.yaml) | Rain skips and seasonal watering adjustments happen automatically. | [![Buy](https://img.shields.io/badge/Buy-Rachio-orange?logo=amazon)](https://amzn.to/2eoPKBW) |
| Tesla Powerwall 2 | [powerwall.yaml](powerwall.yaml) | Grid outages kick off load-shed scripts and status pings. | [![Buy](https://img.shields.io/badge/Buy-Powerwall-orange?logo=tesla)](https://amzn.to/3UM4BZ5) |
| Google Nest thermostat | [climate.yaml](climate.yaml) | Presence/weather/grid-aware cooling targets, humidity pulses, and eco recovery. | [![Buy](https://img.shields.io/badge/Buy-Nest%20Thermostat-orange?logo=google)](https://amzn.to/4olpINw) |
| Dreame/Neato vacuum | [vacuum.yaml](vacuum.yaml) | Scheduled cleaning, maintenance reminders, and voice callouts. | [![Buy](https://img.shields.io/badge/Buy-Vacuum-orange?logo=amazon)](https://amzn.to/4f7NpFP) |
| NodeMCU motion/contact sensor | [alarm.yaml](alarm.yaml), [office_motion.yaml](office_motion.yaml) | ESP8266 nodes feed the alarm matrix and room-aware lighting. | [![Buy](https://img.shields.io/badge/Buy-Motion%20Node-orange?logo=amazon)](https://amzn.to/2oUgj5i) |
| Roku streaming device | [roku.yaml](roku.yaml) | Media presence drives lighting, announcements, and scenes. | [![Buy](https://img.shields.io/badge/Buy-Roku-orange?logo=roku)](https://amzn.to/2Ctp8cr) |

View File

@@ -2,6 +2,38 @@
## AC related automations
## For more info visit https://www.vcloudinfo.com/click-here
## Contact: @CCOSTAN
# --------------------------------------------------------------
# Entity reference and attribute summaries:
#
# Entity ID: climate.downstairs
# Supported hvac_modes: heat, cool, heat_cool, off
# Supported fan_modes: on, off
# Supported preset_modes: none, eco
# Supported temperature range: 50°F (min_temp) 90°F (max_temp)
#
# Current state (example):
# current_temperature: 77
# temperature: 83
# target_temp_high: null
# target_temp_low: null
# current_humidity: 58
# fan_mode: off
# hvac_action: idle
# preset_mode: none
# Supported features: 411
# --------------------------------------------------------------
# Entity ID: climate.upstairs
# Supported hvac_modes: off, heat, cool, heat_cool
# Supported temperature range: 50°F (min_temp) 90°F (max_temp)
#
# Current state (example):
# current_temperature: 76
# temperature: 78
# target_temp_high: null
# target_temp_low: null
# friendly_name: Upstairs
# Supported features: 387
######################################################################
input_datetime:
@@ -86,6 +118,57 @@ script:
target:
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
set_downstairs_target_temp_based_on_conditions:
alias: Set Downstairs Target Temperature Based on Conditions
mode: single
sequence:
- choose:
- conditions:
- condition: state
entity_id: group.family
state: 'not_home'
sequence:
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
preset_mode: 'eco'
- conditions:
- condition: and
conditions:
- condition: state
entity_id: group.family
state: 'home'
- condition: numeric_state
entity_id: sensor.pirateweather_temperature
above: 92
sequence:
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
hvac_mode: cool
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 78
- conditions:
- condition: state
entity_id: group.family
state: 'home'
sequence:
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
hvac_mode: cool
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 80
##############################################################################
### AUTOMATIONS - Thermostat schedules, guardrails, and presence/weather logic
### Some shutoff automations are also in the ALARM.yaml package when windows/doors are left open.
### There are also some automations in the POWERWALL.yaml package when the grid is down.
##############################################################################
automation:
- alias: Notify Downstairs Filter Change Due
description: Notify when downstairs runtime exceeds threshold since last filter change
@@ -146,20 +229,20 @@ automation:
entity_id: climate.upstairs
attribute: temperature
below: 76
condition:
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- delay: "00:03:00"
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 77
temperature: 78
- alias: Set Downstairs Nest to 76 When both in bed
id: set_downstairs_nest_76_both_in_bed
- alias: Set Downstairs to 77 When Both in Bed
id: set_downstairs_nest_77_both_in_bed
trigger:
- platform: numeric_state
entity_id: climate.downstairs
attribute: temperature
above: 76
- platform: state
entity_id: group.bed
to: 'on'
@@ -172,13 +255,9 @@ automation:
- condition: state
entity_id: binary_sensor.sleepnumber_carlo_stacey_is_in_bed
state: 'on'
- condition: numeric_state
entity_id: climate.downstairs
attribute: temperature
above: 76
- condition: numeric_state
entity_id: sensor.pirateweather_temperature
above: 88
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
- condition: state
entity_id: sun.sun
state: 'below_horizon'
@@ -186,35 +265,41 @@ automation:
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 76
- alias: 'Set Downstairs Thermostat to 80 During Daylight'
id: set_downstairs_thermostat_80_daylight
temperature: 77
- alias: 'Set Downstairs Thermostat Daytime Target'
id: set_downstairs_thermostat_daytime_target
mode: single
trigger:
- platform: state
entity_id: sun.sun
to: 'above_horizon'
- platform: time
at: "08:00:00"
- platform: numeric_state
entity_id: climate.downstairs
attribute: temperature
below: 79
condition:
- condition: state
entity_id: sun.sun
state: 'above_horizon'
- condition: template
value_template: "{{ state_attr('climate.downstairs', 'temperature') < 79 }}"
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
- condition: numeric_state
entity_id: sensor.pirateweather_temperature
above: 80
above: 92
- platform: state
entity_id: group.family
to: 'home'
condition:
- condition: and
conditions:
- condition: state
entity_id: sun.sun
state: 'above_horizon'
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- service: climate.set_temperature
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
temperature: 80
hvac_mode: cool
- service: script.set_downstairs_target_temp_based_on_conditions
# Set thermostats to eco mode when everyone is away
- alias: 'Set Thermostats to Eco When Away'
@@ -236,10 +321,14 @@ automation:
data:
entity_id: climate.downstairs
preset_mode: 'eco'
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
hvac_mode: cool
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 84
temperature: 83
# Automation: Set Thermostats Back to Cool Mode
- alias: 'Set Thermostats to Cool When Home'
@@ -249,38 +338,92 @@ automation:
- platform: state
entity_id: group.family
to: 'home'
- platform: state
entity_id: person.justin
to: 'home'
condition:
- condition: or
conditions:
- condition: state
entity_id: group.family
state: 'home'
- condition: state
entity_id: person.justin
state: 'home'
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- choose:
- conditions:
- condition: state
entity_id: group.family
state: 'home'
sequence:
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
preset_mode: 'none'
- conditions:
- condition: state
entity_id: person.justin
state: 'home'
sequence:
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 80
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
preset_mode: 'none'
- service: climate.set_hvac_mode
data:
entity_id:
- climate.downstairs
- climate.upstairs
hvac_mode: cool
- service: script.set_downstairs_target_temp_based_on_conditions
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 82
- alias: 'Reset Upstairs to 82 Each Night'
id: reset_upstairs_thermostat_nightly_82
mode: single
trigger:
- platform: time
at: "03:00:00"
condition:
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- service: climate.set_hvac_mode
data:
entity_id: climate.upstairs
hvac_mode: cool
- service: climate.set_temperature
data:
entity_id: climate.upstairs
temperature: 82
- alias: 'Humidity Control'
id: AC_Humidity_Control
mode: single
trigger:
- platform: numeric_state
entity_id: sensor.downstairs_humidity
above: 60
- platform: time
at: "02:00:00"
condition:
- condition: time
after: "01:00:00"
before: "08:00:00"
- condition: numeric_state
entity_id: sensor.downstairs_humidity
above: 60
- condition: template #Only needed in the winter months
value_template: "{{ now().month in [10, 11, 12, 1, 2, 3] }}"
- condition: template # Only run if AC is idle (prevents fighting other automations)
value_template: "{{ state_attr('climate.downstairs', 'hvac_action') == 'idle' }}"
- condition: state # Never run if the grid is down and running on powerwall.
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
preset_mode: 'none'
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
hvac_mode: cool
- service: climate.set_temperature
data:
entity_id: climate.downstairs
temperature: 77
- delay: "00:20:00"
- service: script.set_downstairs_target_temp_based_on_conditions
- delay: "02:00:00" # stops it from being triggered again too soon.

View File

@@ -5,8 +5,36 @@
# Read more about this on https://www.vcloudinfo.com
# Tesla Powerwall added via UI Integration
# Tesla Powerwall Monitoring #272
######################################################################################################
######################################################################
# --------------------------------------------------------------
# Binary Sensors:
# - binary_sensor.powerwall_charging ............. battery_charging (on=charging)
# - binary_sensor.powerwall_connected_to_tesla ... connectivity (on=connected)
# - binary_sensor.powerwall_grid_services_active .. power (on=active)
# - binary_sensor.powerwall_grid_status .......... power (on=grid up)
# - binary_sensor.powerwall_status ............... power (on=system ok)
#
# Power & Energy Sensors:
# - sensor.powerwall_charge ...................... battery %, 0100
# - sensor.powerwall_backup_reserve .............. reserve %, 0100
# - sensor.powerwall_battery_power ............... kW (+discharge / -charge)
# - sensor.powerwall_load_power .................. kW house load
# - sensor.powerwall_site_power .................. kW (+export / -import)
# - sensor.powerwall_solar_power ................. kW solar production
#
# Lifetime kWh Meters:
# - sensor.powerwall_battery_export .............. kWh → grid/load
# - sensor.powerwall_battery_import .............. kWh ← battery charged
# - sensor.powerwall_load_export ................. kWh exported from loads
# - sensor.powerwall_load_import ................. kWh imported to loads
# - sensor.powerwall_site_export ................. kWh site → grid
# - sensor.powerwall_site_import ................. kWh site ← grid
# - sensor.powerwall_solar_export ................ kWh solar → site/battery/grid
# - sensor.powerwall_solar_import ................ kWh solar ← grid (rare)
#
# Switches:
# - switch.powerwall_off_grid_operation .......... island mode toggle
######################################################################
#-------------------------------------------
automation:

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

View File

@@ -1,13 +1,13 @@
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.11.3">
<title>2025.11.3</title>
<linearGradient id="iRWLA" x2="0" y2="100%">
<linearGradient id="wBAbg" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="xpqTI"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#xpqTI)">
<mask id="NwYIs"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#NwYIs)">
<rect width="685" height="200" fill="#08C" x="0"/>
<rect width="685" height="200" fill="url(#iRWLA)"/>
<rect width="685" height="200" fill="url(#wBAbg)"/>
</g>
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.11.3</text>

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B