Actual Clouds > The Cloud
One of the biggest lessons I’ve learned while building a modern smart home is this:
good automations start with good data.
If your inputs are unreliable, delayed, or generic, your automations will never be what you promised your SO they would be.
My ‘inside the house’ data is pretty solid, thanks to my EP1’s and EP Pro’s, but my outdoor data was lacking.
Relying on internet-based weather services works… until it doesn’t. Forecasts aren’t local, updates can lag, and they introduce a cloud dependency I’d rather avoid. I wanted real, hyper local weather data, measured at my house, and available entirely offline inside Home Assistant.
That kicked off the search for a home weather station that could integrate locally, without sending my data off to someone else’s servers.
My Choice of Weather Station (and Recommendation)
After a fair bit of research, I landed on a weather station from Ecowitt, specifically the WS90 paired with their GW3000 Ethernet gateway.
What sold me on this setup was the combination of features and philosophy:
No moving parts (ultrasonic wind sensor + haptic rain gauge)
Measures temperature, humidity, wind speed, rain, UV, and light
Uses a local gateway that exposes data directly on my network
Works fully offline with Home Assistant — no cloud required
The gateway receives the 433 MHz signal from the outdoor sensor and makes that data available locally over Ethernet. I’ve blocked mine from internet access entirely, and everything continues to work perfectly.
If you’re looking for a weather station specifically to feed automations, dashboards, and logic inside Home Assistant, rather than just display numbers on a screen, this setup has been rock solid for me so far.
Automations
Once you have reliable outdoor data, a lot of everyday decisions suddenly become automatable.
Here are a few examples I’m already using:
Rain alerts
alias: Washing Alert - Rain Started
description: Sends notification when rain starts
triggers:
- trigger: device
type: moist
device_id: a27eef62e58a05f7a4b105d09dc81c53
entity_id: 9caefa35cd643db044fdd61bc37dc0e8
domain: binary_sensor
for:
hours: 0
minutes: 2
seconds: 0
conditions: []
actions:
- choose:
- conditions:
- condition: state
entity_id: person.britt
state:
- home
- condition: state
entity_id: person.dillan
state:
- home
sequence:
- action: notify.mobile_app_dillan_s_phone
data:
title: It's started raining
message: Is there washing on the line?
data:
tag: rain_start
notification_icon: mdi:weather-rainy
- action: notify.mobile_app_britt_s_phone
data:
title: It's started raining
message: Is there washing on the line?
data:
tag: rain_start
notification_icon: mdi:weather-rainy
alias: If both home
- conditions:
- condition: state
entity_id: person.britt
state:
- not_home
- condition: state
entity_id: person.dillan
state:
- home
sequence:
- action: notify.mobile_app_dillan_s_phone
data:
title: It's started raining
message: Is there washing on the line?
data:
tag: rain_start
notification_icon: mdi:weather-rainy
alias: If D home
- conditions:
- condition: state
entity_id: person.britt
state:
- home
- condition: state
entity_id: person.dillan
state:
- not_home
sequence:
- action: notify.mobile_app_britt_s_phone
data:
title: It's started raining
message: Is there washing on the line?
data:
tag: rain_start
notification_icon: mdi:weather-rainy
alias: If B home
- conditions:
- condition: state
entity_id: person.britt
state:
- not_home
- condition: state
entity_id: person.dillan
state:
- not_home
sequence:
- stop: Nobody home — notification suppressed.
alias: If nobody home
mode: single
High wind warnings
alias: Wind Alert - High Wind
description: "High wind speed = notification"
triggers:
- trigger: numeric_state
entity_id:
- sensor.gw3000c_wind_speed
above: 40
conditions: []
actions:
- choose:
- conditions:
- condition: state
entity_id: person.dillan
state: home
sequence:
- action: notify.mobile_app_dillan_s_phone
data:
title: High Winds Detected
message: >-
The wind has picked up at home - check for loose objects in the
yard
default:
- stop: Dillan not home — wind alert suppressed.
mode: single
Close blinds for extra insulation
alias: Auto Close Blinds based on thermostat
description: Asks to close blinds when external is +- 12 degrees on thermostat
triggers:
- alias: Outside temperature changed
trigger: state
entity_id: sensor.gw3000c_feels_like_temperature
conditions:
- condition: template
value_template: >
{% set hvac = state_attr('climate.daikinap69199', 'hvac_mode') %} {% set
setpoint = state_attr('climate.daikinap69199', 'temperature') | float(0)
%} {% set outside = states('sensor.gw3000c_feels_like_temperature') |
float(0) %}
{{
is_state('climate.daikinap69199', 'on')
and (
(hvac == 'cool' and outside >= setpoint + 12)
or
(hvac == 'heat' and outside <= setpoint - 12)
)
}}
- condition: state
entity_id: cover.all_blinds
state:
- open
actions:
- alias: Ask to close blinds
choose:
- conditions:
- condition: state
entity_id: person.dillan
state: home
- condition: state
entity_id: person.britt
state: home
sequence:
- data:
title: >-
The temperature outside is {{
states('sensor.gw3000c_feels_like_temperature') }} — should I
close the blinds?
message: Should I close the blinds?
data:
tag: blinds_warning
actions:
- action: CLOSE_BLINDS
title: "Yes"
- action: NO_THANKS
title: No thanks
action: notify.mobile_app_dillan_s_phone
- action: notify.mobile_app_britt_s_phone
data:
title: >-
The temperature outside is {{
states('sensor.gw3000c_feels_like_temperature') }} — should I
close the blinds?
message: Should I close the blinds?
data:
tag: blinds_warning
actions:
- action: CLOSE_BLINDS
title: "Yes"
- action: NO_THANKS
title: No thanks
alias: B & D home
- conditions:
- condition: state
entity_id: person.dillan
state: home
- condition: state
entity_id: person.britt
state: not_home
sequence:
- data:
title: >-
The temperature outside is {{
states('sensor.gw3000c_feels_like_temperature') }} — should I
close the blinds?
message: Should I close the blinds?
data:
tag: blinds_warning
actions:
- action: CLOSE_BLINDS
title: "Yes"
- action: NO_THANKS
title: No thanks
action: notify.mobile_app_dillan_s_phone
alias: D home
- conditions:
- condition: state
entity_id: person.britt
state: home
- condition: state
entity_id: person.dillan
state: not_home
sequence:
- action: notify.mobile_app_britt_s_phone
data:
title: >-
The temperature outside is {{
states('sensor.gw3000c_feels_like_temperature') }} — should I
close the blinds?
message: Should I close the blinds?
data:
tag: blinds_warning
actions:
- action: CLOSE_BLINDS
title: "Yes"
- action: NO_THANKS
title: No thanks
alias: B home
- conditions:
- condition: state
entity_id: person.britt
state:
- not_home
- condition: state
entity_id: person.dillan
state: not_home
sequence:
- stop: nobody home
alias: Nobody Home
- delay:
hours: 2
minutes: 0
seconds: 0
milliseconds: 0
mode: single
And then the automation that handles closing the blinds from the notification event
alias: Close Blinds (from notification)
description: Closes blinds when notification pressed by user
triggers:
- event_type: mobile_app_notification_action
trigger: event
event_data:
action: CLOSE_BLINDS
tag: blinds_warning
conditions: []
actions:
- action: cover.close_cover
metadata: {}
data: {}
target:
entity_id:
- cover.kit_blind
- cover.lr_blind
- cover.kit_door_blind
- cover.lr_door_blind
mode: single
Open windows when temperature outside is favourable
alias: Notify to Open Windows
description: >-
When outside temperature is favourable, ask whoever is home to open the
windows
triggers:
- trigger: template
value_template: >-
{% set mode = states('climate.daikinap69199') %} {% set setpoint =
state_attr('climate.daikinap69199', 'temperature') | float %} {% set
outdoor = states('sensor.gw3000c_feels_like_temperature') | float %}
{{
(mode == 'heat' and outdoor > setpoint)
or
(mode == 'cool' and outdoor < setpoint)
}}
for:
hours: 0
minutes: 10
seconds: 0
conditions:
- condition: numeric_state
entity_id: sensor.gw3000c_wind_speed
above: 16
- condition: device
type: is_on
device_id: bb0cd4e60de6d3d241a448902ea1acf0
entity_id: 80e67908eeab0f5835b4532444a81cb6
domain: switch
actions:
- choose:
- conditions:
- condition: state
entity_id: person.dillan
state:
- home
- condition: state
entity_id: person.britt
state:
- home
sequence:
- action: notify.mobile_app_dillan_s_phone
data:
title: Open the windows?
message: It's the perfect time to open the windows and turn off the AC.
data:
tag: window_open_alert
notification_icon: mdi:window-open-variant
actions:
- action: WINDOW_DONE
title: Done
- action: NO_THANKS
title: No thanks
- action: notify.mobile_app_britt_s_phone
data:
title: Open the windows?
message: It's the perfect time to open the windows and turn off the AC.
data:
tag: window_open_alert
notification_icon: mdi:window-open-variant
actions:
- action: WINDOW_DONE
title: Done
- action: NO_THANKS
title: No thanks
alias: If both B & D Home
- conditions:
- condition: state
entity_id: person.dillan
state:
- not_home
- condition: state
entity_id: person.britt
state:
- home
sequence:
- action: notify.mobile_app_britt_s_phone
data:
title: Open the windows?
message: It's the perfect time to open the windows and turn off the AC.
data:
tag: window_open_alert
notification_icon: mdi:window-open-variant
actions:
- action: WINDOW_DONE
title: Done
- action: NO_THANKS
title: No thanks
alias: If B Home
- conditions:
- condition: state
entity_id: person.dillan
state:
- home
- condition: state
entity_id: person.britt
state:
- not_home
sequence:
- action: notify.mobile_app_dillan_s_phone
data:
title: Open the windows?
message: It's the perfect time to open the windows and turn off the AC.
data:
tag: window_open_alert
notification_icon: mdi:window-open-variant
actions:
- action: WINDOW_DONE
title: Done
- action: NO_THANKS
title: No thanks
alias: If D Home
- conditions:
- condition: state
entity_id: person.dillan
state:
- not_home
- condition: state
entity_id: person.britt
state:
- not_home
sequence:
- stop: Nobody home — notification suppressed.
alias: If B & D not home
- delay:
hours: 1
minutes: 0
seconds: 0
mode: single
And a seperate automation to handle turning off the AC
alias: Turn off AC when windows opened
description: ""
triggers:
- event_type: mobile_app_notification_action
event_data:
action: WINDOW_DONE
trigger: event
conditions: []
actions:
- action: climate.turn_off
metadata: {}
target:
entity_id: climate.daikinap69199
data: {}
mode: single
Unfortunately I don’t have a way to open and close my windows from Home Assistant (yet) so it relies on a human in the loop to handle the opening and closing, but it still removed the need to think about it at all.
Beyond automations, having accurate local weather data on dashboards is just genuinely useful. A quick glance tells me whether I need a jacket, whether the dog does, or whether it’s about to turn nasty outside.
Adding a local weather station has been one of those upgrades that quietly unlocks a lot of capability. It’s not flashy, but it massively expands what’s possible once you start thinking in terms of real inputs driving real decisions.
If you’ve got ideas for automations that could make use of local weather data, I’d love to hear them.

