Simple home automation balcony setup
I’ve been getting into some home automation for our apartment for a while ever since my father got us an Amazon Alexa device to call home with. Since then we expanded our setup to include smart plugs, and Philips Hue lighting. While on their own these produces can work well on their own.
The real power comes when leveraging a product such as Home Assistant to bring it all together into a unified platform and more control.
One thing we recently introduced in our setup was to include a very simple balcony watering system that can be controlled remotely and automated via timers and other triggers.
This post documents the equipment required outside of the standard Home Assistant setup and the configuration required to get going.
The setup with these components was straight forward, with the components pretty much connecting and screwing together and just working.
The only complicated thing was flashing custom firmware onto the smart plug as I wanted to have a purely offline setup. I went with espurna for this but you could also try esphome which provides a nice API and easy YAML configuration.
Home Assistant configuration
The automation currently consists of 3 parts.
- A daily watering schedule which is triggered based on the time
- Secondary schedule, triggered by time and temperature forecast
- Manual invocation and automatic off after defined duration
- Safety mechanism to ensure switch is off, for cases when reboot occurs during watering cycle.
For the first one I also decided to use Push Bullet to notify my devices when it was triggered, I wanted this to be notified easily whilst on vacation.
For this setup you will need to setup two timers
# The main timer for automation triggers balcony_water: duration: '00:02:00' # Secondary timer for manual invocation balcony_water_max: duration: '00:02:00'
- alias: 'Balcony water automatic (start)' trigger: - platform: time at: '21:30:00' action: - service: script.balcony_water_start - alias: 'Balcony water hot day (start)' trigger: - platform: time at: '09:30:00' condition: condition: and conditions: - condition: numeric_state entity_id: sensor.yr_temperature above: 25 action: - service: script.balcony_water_start - alias: 'Balcony water automatic (stop)' trigger: - platform: event event_type: timer.finished event_data: entity_id: timer.balcony_water action: - service: switch.turn_off entity_id: switch.socket_balcony - service: notify.pushbullet_chi data: message: 'Balcony watering finished' - alias: 'Balcony water manual (start)' trigger: - platform: state entity_id: switch.socket_balcony to: 'on' action: - service: timer.start entity_id: timer.balcony_water_max - alias: 'Balcony water manual (stop)' trigger: - platform: event event_type: timer.finished event_data: entity_id: timer.balcony_water_max action: - service: switch.turn_off entity_id: switch.socket_balcony - alias: 'Ensure balcony is off on reboot' initial_state: 'on' trigger: - platform: homeassistant event: start action: service: switch.turn_off entity_id: switch.socket_balcony
As the title says this setup is very basic right now and gives no feedback on the water remaining in the tank, the moisture in the soil, or outside air temperature.
All these points are things I would love to improve in the future, especially the first point.