I generally don’t like AC, as I live in Michigan and I would like to enjoy the heat while it’s here. This does not mean I like to go upstairs and have it feel like I’ve opened up an oven’s door. As an attempt to reduce that uncomfortable feeling, I want to set up an automation to notify me when I should open the windows.
To do this there’s two pre-reqs:
- A Thermostat
- A way to get the outside temperature, I use the National Weather Service integration
Hardware
While I do own a Nest, there’s a two problems:
- It requires the cloud, which I try to avoid
- It’s downstairs
Instead, I bought a Tuya compatible thermostat from Amazon . I also use the HACS Plugin Local Tuya to communicate with my Tuya devices directly instead of through the cloud
Be aware: This thermostat in conjunction with Local Tuya outputs in C, there is extra HA configuration to get it as F.
Setup
Note #1: I recommend connecting your Tuya API with Local Tuya. This generally makes the install process a little easier as it prefills some of the required fields, like Local Key.
Note #2: As I’ve recently moved all my IoT devices into their own VLAN, which doesn’t support the Tuya API due to the discovery being blocked, I’m editing this section to have more detail. (2023-12-28)
The process is the same as adding any device through Local Tuya. That being entities are not fun, as generally it’s a slightly informed guessing game. There are three values: two numbers and a boolean.
Device ID (IoT Tuya)
- Login to https://auth.tuya.com/
- Sidebar, Cloud -> Development
- Table, Open Project
- Topbar, Devices
- Table, find Sensor
- Copy Device ID
Local Key (IoT Tuya)
- Login to https://auth.tuya.com/
- Sidebar, Cloud -> API Explorer
- It should load into
IoT Core
, else change in top left dropdown - Sidebar, Device Management -> Query Device Details
- Paste
Device ID
+ Submit (hidden by a cookie warning) - Find
local_key
key in the JSON dictionary it returns
HA Local Tuya Add
- Name:
{anything}
- Host:
{static_ip}
- Device ID:
{saved from ealier}
- Local Key:
{saved from ealier}
- Protocol Version:
3.3
- Submit
Temperature
The raw value is in C and has a scaling factor of .1, The number will be an integer (no decimals) and will have three digits
- Name: Upstairs Temperature
- Unit of Measurement: blank
- Device Class: temperature
- Scaling: .1
Humidity
I don’t have an example of the raw value so use the process of elimination. I believe it’s either 0-100 or 0-.1
- Name: Upstairs Humidity
- Unit of Measurement: %
- Device Class: humidity
- Scaling: blank
Boolean
I presume the boolean is
is_fahrenheit
. This has no impact so I didn’t add it.
Fahrenheit
As stated above, Temperature is always being coming in a Celsius, so I had to convert it into Fahrenheit for my own use by using a sensor template
I added this block to my main configuration, reloaded the configuration and then the
upstairs_temperature_template
entity exists
Main Automation
The Trigger
There’s three potential triggers you could use:
- When the outside temperature changes
- When the upstairs temperature changes
- On a timer
After some thought I will go with a timer. I believe the Tuya Thermostat updates too
frequently and the outside temperature updates every 10 minutes. Using a timer, or Time Pattern
in HomeAssistant terms, is more natural to me as it’s works the same as a Cron.
Trigger, Time Pattern:
- Hours: *
- Minutes: /10
- Seconds: blank
This will run every 10 minutes
Note: Changed to a hardcoded Time trigger in the
The Conditions
To make this more difficult on myself, joking, I have specific specifications when I want the notification:
a. Once per day
b. When the upstairs temperature is above 75F
c. When the outside temperature is below the upstairs temperature
d. Not in the middle of the night
a. Once Per Day
I made a
toggle
helper entity, inside setting > devices & services > helpers, and named it Temperature Alert.Condition, State
- Entity: input_boolean.temperature_alert
- Attribute: blank
- State: Off
b. Upstairs is above 75F
Condition, Numerical State
- Entity: sensor.upstairs_temperature_template
- Above:
- Fixed Number
- 75
- Below: blank
c. Outside is below Upstairs
Condition, Template Condition
{{ states('sensor.upstairs_temperature_template') > states('sensor.KMOP_temperature') }}
d. Not in the Middle of the Night
Condition, Time
- After
- Fixed Time
- 4:30pm
- Before
- Fixed Time
- 11:59pm
Note: Removed in the next post
The Actions
Two actions need to happen:
a. My iPhone should get a notification through the HomeAssistant App
b. The Temperature Alert boolean should be toggle ona. Notification
Action, Call a Service
- Service: Notifications: Send Notification via
phone_entity
- Message: Open the Windows
a. Boolean
Action, Call a Service
- Service: Input Boolean: Turn On
- Targets: input_boolean.temperature_alert
Raw YAML
Reset Boolean Automation
We need to reset the Temperature Alert boolean everyday, this is easy in comparison to the main automation
The Trigger
Trigger, Time:
- Fixed Time
- Time: 1:30am
The Action
Action, Call a Service
- Service: Input Boolean: Turn Off
- Targets: input_boolean.temperature_alert
Raw YAML
Switch
After swapping all my devices to a VLAN, I’ve had to re-add all my LocalTuya devices without help from their Discovery. Here were my steps.
Note: this preassumes you’ve done the bare minimum to get the normal Tuya integration set up. ie have a iot.tuya account and app.
Conclusion
While the general idea works there is room for improvement; Specifically because I don’t want to open my windows when the temperature is dropping to 51F, which happens a lot in Michigan. I’ve made this a series and will hopefully re-visit this idea.