This works for me too for a single door.
How do i add a second switch/sensor combination for a second garage door?
Does anyone know how to put a confirmation dialog on this type of control?
Thats handled through the ui
Yes, I understand, but can’t get it to work. Do you happen to have a working example for entities card?
what have you tried?
I’ve tried this:
You can’t do it with that ui item. You’ll have to use something that accepts tap_actions
Thank you!
Hi! I had the same issue. Have simple door sensors on my garage and gate, and open/close it via simple RF433 command from Sonoff RF Bridge (so i have 2 scripts - for gate, and for garage).
Try similar to this:
- platform: template
covers:
garage_door:
device_class: garage
friendly_name: "Garage"
value_template: "{{ is_state('binary_sensor.garage_contact', 'on') }}"
open_cover:
service: script.1621708691102
close_cover:
service: script.1621708691102
stop_cover:
service: script.1621708691102
front_gate:
device_class: gate
friendly_name: "Gate"
value_template: "{{ is_state('binary_sensor.gate_contact', 'on') }}"
open_cover:
service: script.1621683565039
close_cover:
service: script.1621683565039
stop_cover:
service: script.1621683565039
My config for garage door with 1 magnetic sensor, work great:
cover:
- platform: template
covers:
# секцию ниже не трогать. Рабочий прототип гаражных ворот
garage_door:
device_class: garage
friendly_name: "гараж"
unique_id: garagedoor
value_template: >
{% if is_state('binary_sensor.vorota_zakryty_contact', 'off') %}
false
{% else %}
true
{% endif %}
open_cover:
- condition: state
entity_id: binary_sensor.vorota_zakryty_contact
state: "off"
- service: switch.turn_on
target:
entity_id: switch.gate_remote
close_cover:
- condition: state
entity_id: binary_sensor.vorota_zakryty_contact
state: "on"
- service: switch.turn_on
target:
entity_id: switch.gate_remote
stop_cover:
- service: switch.turn_on
target:
entity_id: switch.gate_remote
But i have more complicated configuration. I am using 2 magnetic sensors for garage door. Sensor1 for “closed” state (off if gate is closed) and sensor2 for “open” state (off if gate is opened)
Based on real sensors i create templates:
template:
- sensor:
- name: vorota_opening
state: "on"
- name: vorota_closing
state: "on"
- name: vorota_open
state: "off"
- name: vorota_closed
state: "on"
And appdaemon script:
import appdaemon.plugins.hass.hassapi as hass
##############################################
### ПОМЕНЯТЬ ПЕРЕМЕННЫЕ ТУТ
##############################################
# имя датчика открытых ворот OpenSensor
open_sensor = "binary_sensor.0x00124b0022fef19f_contact"
# имя датчика закрытых ворот Clopen_sensoredSensor
closed_sensor = "binary_sensor.vorota_zakryty_contact"
class garage_door_status(hass.Hass):
def initialize(self):
handle = None
# слушем изменение датчиков открытых и закрытых ворот и если оно есть, запускаем функцию garage_door_status
self.listen_state(self.garage_door_status, open_sensor, attribute="all")
self.listen_state(self.garage_door_status, closed_sensor, attribute="all")
# debug only
self.listen_state(self.garage_door_status, 'cover.test_garage_door', attribute="all")
def garage_door_status(self, entity, attribute, old, new, kwargs):
# пишем в лог для траблшутинга, позже можно убрать
self.log(f'===.input entity={entity}, new state is {new["state"]}. old state is {old["state"]}')
# делаем проверку, изменился ли статус датчика
if new["state"] != old["state"]:
if entity == closed_sensor:
if old["state"] == "off" and new["state"] == "on":
self.log("info 01. set gate to OPENING state")
self.set_state('sensor.vorota_closed', state="on")
self.set_state('sensor.vorota_closing', state="on")
self.set_state('sensor.vorota_open', state="on")
self.set_state('sensor.vorota_opening', state="off")
elif old["state"] == "on" and new["state"] == "off":
self.log("info 02. set gate to CLOSED state")
self.set_state('sensor.vorota_open', state="on")
self.set_state('sensor.vorota_closing', state="on")
self.set_state('sensor.vorota_opening', state="on")
self.set_state('sensor.vorota_closed', state="off")
elif entity == open_sensor:
if old["state"] == "off" and new["state"] == "on":
self.log("info 03. set gate to CLOSING state")
self.set_state('sensor.vorota_open', state="on")
self.set_state('sensor.vorota_opening', state="on")
self.set_state('sensor.vorota_closed', state="on")
self.set_state('sensor.vorota_closing', state="off")
elif old["state"] == "on" and new["state"] == "off":
self.log("info 04. set gate to OPEN state")
self.set_state('sensor.vorota_opening', state="on")
self.set_state('sensor.vorota_closed', state="on")
self.set_state('sensor.vorota_closing', state="on")
self.set_state('sensor.vorota_open', state="off")
So My logic is:
- when sensor1 old state is “off” and new state is “on” - then i assume that gate is “opening” (sensor.vorota_opening’, ‘off’)
- when sensor2 old state is “off” and new state is “on” - then gate is “open” (sensor.vorota_open’, ‘off’)
- when sensor2 old state is “on” and new state is “off” - then gate is “closing” (sensor.vorota_closing’, ‘off’)
- when sensor1 old state is “off” and new state is “on” - then gate is “closed” (sensor.vorota_closed’, ‘off’)
On paper it should work fine, but i have strange behaivor in log:
When sensor.vorota_closed change it state from “off” (means gate is closed) to “on” means (gate is opening) - gate state is changed to “open” and in moment later “opening”
Is some one can explain to me what is my mistake?
Something might be missing where is the code that actually converts the template code into the 4 sensor states?
why are you using 4 sensors to define the state instead of a single sensor with 4 states? You’re over complicating it. Secondly, if you switch to a single sensor, you won’t need appdaemon to handle anything. A single template sensor can do the job. Lastly, you can use the previous state of the single sensor to determine what the new state will be. I.E. if the last state was closed and both sensors are off, then you’re opening. If the last state was open and both states are off, then you’re closing.
template:
- sensor:
- name: Vorota state
state: >
{% set open_on = is_state('binary_sensor.0x00124b0022fef19f_contact','on') %}
{% set close_on = is_state('binary_sensor.vorota_zakryty_contact','on') %}
{% if open_on and not close_on %}
open
{% elif not open_on and close_on %}
closed
{% elif open_on and close_on %}
sensor error
{% else %}
{% if is_state('sensor.vorota_state', 'open') %}
closing
{% else %}
opening
{% endif %}
{% endif %}
What do you mean? AppDaemon code do all job
Thanks for your thoughts. I cant realy remember why i use 4 sensors instead 1. Your code have some syntax problems, i’ll try this later, but from now i cant figure out how system knows last state of sensors (i need to read more docutentations)
That code will work out of the box. Just copy paste into your config.
that pulls the information from the state machine, which will always be the last value.
{% if is_state('sensor.vorota_state', 'open' %}
closing
) - In the end is missing
And after reloading template I have got strange state:
copy the current version, it had 2 ifs that should have been else-ifs
if you’re familiar with python you should be able to spot the error. If not, I updated it again.