Expansor de timbre con Home Assistant

Buenas , en esta ocasión montaremos un expansor del timbre de entrada aprovechando parte de la plataforma actual con Home Assistant , para ello lo único nuevo será el sensor de vibración TuYa TS0210 , conectado a nuestro zigbee2mqtt , podéis encontrar mas información de este sensor en la pagina del proyecto :

https://www.zigbee2mqtt.io/devices/TS0210.html

Este sensor va alimentado por un par de pilas AAA lo que teóricamente garantiza dos años o mas de autonomía de bateria.

Dispone de un botón lateral de reset y emparejamiento , y de un indicador superior de color rojo cuando detecta movimiento

Le daremos un friendly name en el fichero de config de zigbee2mqtt.

  '0x84fd27fffe2c1eb1':
    friendly_name: sensor_vibracion_timbre

Hemos tenido que agrandar el agujero de salida de sonido superior del timbre que tenemos montado actualmente en casa

El sensor reposaría simplemente en los soportes de la lamina metálica superior , siendo golpeada por esta cuando entra en funcionamiento el electroimán , que a su vez hará que el sensor detecte vibraciones

Vista de como queda el timbre montado con el sensor ya montado , importante que quede holgado ya no debe estar aprisionado por la tapa para que quede libre al movimiento.

Crearemos el sensor binario que captura la detección de movimiento , es muy importante el off_delay: 2 , podeis poner el valor en segundos que mas oportuno creáis , si no siempre este sensor estará a True.

# BINARY SENSOR VIBRACION TIMBRE ENTRADA

  # BINARY SENSOR VIBRACION TIMBRE ENTRADA
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/sensor_vibracion_timbre"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.vibration }}"
    payload_on: true
    payload_off: false
    device_class: "vibration"
    name: sensor_vibracion_timbre_evento
    off_delay: 2   # 2 segundos

Estos son el resto de sensores : batería , sensibilidad y link quality

### SENSOR VIBRACION TIMBRE
    
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/sensor_vibracion_timbre"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.battery }}"
    unit_of_measurement: "%"
    device_class: "battery"
    icon: "mdi:battery"
    expire_after: 21600
    force_update: true
    name: "sensor_vibracion_timbre_bateria"

  - platform: "mqtt"
    state_topic: "zigbee2mqtt/sensor_vibracion_timbre"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.sensitivity }}"
    icon: "mdi:bell-ring"
    name: "sensor_vibracion_timbre_sensibilidad"

  - platform: "mqtt"
    state_topic: "zigbee2mqtt/sensor_vibracion_timbre"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.linkquality }}"
    unit_of_measurement: "lqi"
    icon: "mdi:signal" 
    name: "sensor_vibracion_timbre_estado"  

Este es un sensor de batería que añado a todos los sensores que tienen batería para que cambie el icono en función de la carga restante

sensor_vibracion_timbre_bateria_level:
  friendly_name: Sensor timbre puerta
  value_template: "{{ states.sensor.sensor_vibracion_timbre_bateria.state |default(-1)|int if states.sensor.sensor_vibracion_timbre_bateria is not none }}"
  unit_of_measurement: '%'
  icon_template: 
    '{% if states.sensor.sensor_vibracion_timbre_bateria.state|int  == 100 %}
        mdi:battery
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 90 %}
        mdi:battery-90
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 80 %}
        mdi:battery-80
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 70 %}
        mdi:battery-70
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 60 %}
        mdi:battery-60
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 50 %}
        mdi:battery-50
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 40 %}
        mdi:battery-40
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 30 %}
        mdi:battery-30
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 20 %}
        mdi:battery-20
     {% elif states.sensor.sensor_vibracion_timbre_bateria.state|int  >= 10 %}
        mdi:battery-10
     {% else %}
        mdi:battery-outline
     {% endif %}'

Le damos los valores en customize.yaml

sensor.sensor_vibracion_timbre_bateria:
  friendly_name: Sensor timbre 
sensor.sensor_vibracion_timbre_estado:
  friendly_name: Sensor timbre 
binary_sensor.sensor_vibracion_timbre_evento:
  friendly_name: Sensor timbre 
  icon: "mdi:bell-ring"

Aquí empezamos con las automatizaciones , en esta simplemente enviamos un aviso por telegram para que quede constancia pero no hacemos nada ya que no esta activado el input_boolean int_amplificar_timbre

#######################################
### Automatizaciones timbre entrada
#######################################


- id: Alguien ha pulsado el timbre de la entrada pero no se expande
  alias: Alguien ha pulsado el timbre de la entrada pero no se expande
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: binary_sensor.sensor_vibracion_timbre_evento
      to: 'on'       
    - condition: state
      entity_id: input_boolean.int_ha_completamente_iniciado
      state: 'on'              
  condition:
    - condition: state
      entity_id: input_boolean.int_amplificar_timbre
      state: 'off' 
  action:
    - service: notify.notif_telegram_bot
      data:
        message: |
          {{ "\U0001F514" }} *Timbre entrada :* Sin expandir{{ "\U0001F514" }}

En esta si que esta activado el input_boolean int_amplificar_timbre , esta dentro de rango de horas que le hemos indicado y además hay alguien de la familia en casa , entonces hace lo siguiente :

  • Envía un mensaje por Telegram dando en aviso
  • Enciende de color amarillo los tres Gateways Xiaomi que tenemos actualmente
  • Hace sonar bien alto un tono de llamar a la puerta por los tres Gateways Xiaomi
  • Hace cinco ciclos de encendido/apagado de las tres luces diferentes de la habitación de mi hijo que entra en modo autista con los cascos de gaming
  • Apaga los tres Gateways Xiaomi
- id: Alguien ha pulsado el timbre de la entrada y se expande
  alias: Alguien ha pulsado el timbre de la entrada y se expande
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: binary_sensor.sensor_vibracion_timbre_evento
      to: 'on'          
  condition:
    - condition: state
      entity_id: input_boolean.int_amplificar_timbre
      state: 'on' 
    - after: '07:00:00'
      before: '23:00:00'
      condition: time    
    - condition: state
      entity_id: input_boolean.int_alguien_en_casa
      state: 'on'        
    - condition: state
      entity_id: input_boolean.int_ha_completamente_iniciado
      state: 'on'        
  action:
    - service: notify.notif_telegram_bot
      data:
        message: |
          {{ "\U0001F514" }} *Timbre entrada :* Alguien ha pulsado el timbre{{ "\U0001F514" }}
    - service: light.turn_on
      entity_id: light.gateway_light_7c49eb1d1d0a
      data:
        brightness: 255
        rgb_color: [255,128,0]
    - service: light.turn_on
      entity_id: light.gateway_light_286c07f0e736
      data:
        brightness: 255
        rgb_color: [255,128,0]
    - service: light.turn_on
      entity_id: light.gateway_light_286c07f0b574
      data:
        brightness: 255
        rgb_color: [255,128,0]
        
    # Doorbells
    # 10 - Doorbell
    # 11 - Knock at a door
    # 12 - Amuse
    # 13 - Alarm clock                
                                
    - service: xiaomi_aqara.play_ringtone
      data:
        gw_mac: !secret gateway_1_mac
        ringtone_id: 10
        ringtone_vol: 80     
      
    - service: xiaomi_aqara.play_ringtone
      data:
        gw_mac: !secret gateway_2_mac
        ringtone_id: 10
        ringtone_vol: 80     
        
    - service: xiaomi_aqara.play_ringtone
      data:
        gw_mac: !secret gateway_3_mac
        ringtone_id: 10
        ringtone_vol: 80             
        
    # Alternamos las luces de la habitacion de Oriol

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01
    
    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01
        
    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
    - delay: 00:00:01

    - service: light.toggle
      entity_id: light.tira_led_cama_oriol
    - service: light.toggle
      entity_id: light.tira_led_mesa_oriol
    - service: light.toggle
      entity_id: light.luz_oriol
         
     #Apagamos la luz del gateway
    - service: light.turn_off
      entity_id: light.gateway_light_7c49eb1d1d0a
    - service: light.turn_off
      entity_id: light.gateway_light_286c07f0e736
    - service: light.turn_off
      entity_id: light.gateway_light_286c07f0b574

Una cosa importante a resaltar es que tuve que montar esta automatización ya que cada vez que arrancaba Home Assistant enviaba un pulso que hacia sonar el timbre , de esta forma eliminamos que el pulso inicial dispare la automatización

##########################################
########## ARRANQUE DEL SISTEMA ##########
##########################################

- id: boot Sistema domotica completamente iniciado
  alias: boot Sistema domotica completamente iniciado
  initial_state: 'on'
  trigger:
    - event: start
      platform: homeassistant    
  action:
    - delay: 00:05:00
    - service: input_boolean.turn_on
      entity_id: input_boolean.int_ha_completamente_iniciado

Esta automatización envía el nivel de sensibilidad al detector de vibraciones ,pudiendo ser cualquiera de estos valores ( low, medium, high )

- id: Sensibilidad timbre entrada
  alias: Sensibilidad timbre entrada
  # Configuramos el valor de la sensibilidad al iniciar HA
  trigger:
    - event: start
      platform: homeassistant  
  action:
    service: mqtt.publish
    #The possible values are: low, medium, high. 
    data_template:
      topic: "zigbee2mqtt/sensor_vibracion_timbre/set"
      payload: '{"sensitivity":low}'

Así nos llegarían las notificaciones a Telegram

Ya solo nos queda mostrarlo en nuestro panel

      - type: entities
        title: Recibidor
        show_name: true
        show_state: false
        show_header_toggle: false
        columns: 3     
        entities: 
          - light.luz_recibidor 
          - input_boolean.int_foto_entrada
          - binary_sensor.sensor_movimiento_recibidor_evento       
          - binary_sensor.sensor_vibracion_timbre_evento
          - input_boolean.int_amplificar_timbre
          - input_boolean.int_cortesia_si_todo_apagado