Expansor de timbre con Home Assistant – Parte II

Buenas , después de varios días de pruebas con el sensor de proximidad he visto que hay dos problemas , uno salvable por programación que es que al reiniciar el Docker de zigbee2mqtt manda un true que hace que suene el timbre , este ya esta salvado , pero otro que a pesar de habar bajado la sensibilidad al mínimo cuando cierran algunas puertas fuertemente en la escalera lo detecta y manda un falso positivo , este no se puede salvar tan fácilmente , pero siempre queda el plan B y el C !!!!

En este caso el plan B ha sido usar uno de los sensores magnéticos para puertas y ventanas de Xiaomi ( MCCGQ11LM) que tenia por casa y cambiar el sensor de vibración por uno magnético.

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

El montaje queda de la siguiente forma:

Al activarse la bobina el campo magnético que genera basta para excitar el sensor del MCCGQ11LM , hay que tener en cuenta que funcionaria a la inversa de un sensor de ventana

Vista lateral del montaje del sensor

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

'0x00158d0003d4a2e2':
  friendly_name: sensor_proximidad_timbre

Crearemos el sensor binario que captura la detección de movimiento.

# SENSOR PROXIMIDAD TIMBRE ENTRADA
- platform: "mqtt"
  state_topic: "zigbee2mqtt/sensor_proximidad_timbre"
  availability_topic: "zigbee2mqtt/bridge/state"
  payload_on: false
  payload_off: true
  value_template: "{{ value_json.contact }}"
  device_class: "door"
  name: sensor_proximidad_timbre_evento  

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

### SENSOR PROXIMIDAD TIMBRE

- platform: "mqtt"
  state_topic: "zigbee2mqtt/sensor_proximidad_timbre"
  availability_topic: "zigbee2mqtt/bridge/state"
  unit_of_measurement: "%"
  icon: "mdi:battery"
  device_class: "battery"
  value_template: "{{ (((value_json.voltage|float)-2800)/5)|int }}"
  expire_after: 21600
  force_update: true
  name: "sensor_proximidad_timbre_bateria"

- platform: "mqtt"
  state_topic: "zigbee2mqtt/sensor_proximidad_timbre"
  availability_topic: "zigbee2mqtt/bridge/state"
  icon: "mdi:signal"
  unit_of_measurement: "lqi"
  value_template: "{{ value_json.linkquality }}"
  name: "sensor_proximidad_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_proximidad_timbre_battery_level:
  friendly_name: Sensor proximidad timbre
  value_template: "{{ states.sensor.sensor_proximidad_timbre_bateria.state |default(-1)|int if states.sensor.sensor_proximidad_timbre_bateria is not none }}"
  unit_of_measurement: '%'
  icon_template: '{% if states.sensor.sensor_proximidad_timbre_bateria.state|int  == 100 %}
       mdi:battery
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 90 %}
       mdi:battery-90
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 80 %}
       mdi:battery-80
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 70 %}
       mdi:battery-70
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 60 %}
       mdi:battery-60
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 50 %}
       mdi:battery-50
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 40 %}
       mdi:battery-40
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 30 %}
       mdi:battery-30
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 20 %}
       mdi:battery-20
    {% elif states.sensor.sensor_proximidad_timbre_bateria.state|int  >= 10 %}
       mdi:battery-10
    {% else %}
       mdi:battery-outline
    {% endif %}'  

Le damos los valores en customize.yaml

binary_sensor.sensor_proximidad_timbre_evento:
  friendly_name: Sensor timbre 
  icon: "mdi:bell-ring"
sensor.sensor_proximidad_timbre_bateria:
  friendly_name: Sensor timbre 
sensor.sensor_proximidad_timbre_estado:
  friendly_name: Sensor timbre 

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_proximidad_timbre_evento
      to: 'off' 
  condition:
    - condition: state
      entity_id: input_boolean.int_amplificar_timbre
      state: 'off' 
    - condition: state
      entity_id: input_boolean.int_ha_completamente_iniciado
      state: 'on'              
  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_proximidad_timbre_evento
      to: 'off' 
  condition:
    - condition: state
      entity_id: input_boolean.int_amplificar_timbre
      state: 'on' 
    - after: '07:00:00'
      before: '23:30: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

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_proximidad_timbre_evento
    - input_boolean.int_amplificar_timbre
    - input_boolean.int_cortesia_si_todo_apagado 

Y como siempre hay un plan C en caso de que fallase el plan B , en este caso no lo llegue a realizar , pero ya lo tenia preparado y estudiado , con un relé de 230V el cual conectaría su bobina en paralelo con la alimentación del timbre y usando los contactos común y normalmente abierto cerraría los contactos de un Xiaomi MiJia wireless switch ( WXKG01LM ) ya que tengo varios que me sobraron de cuando los use para convertir los interruptores Simón a zigbee.