Sensor de presencia en una silla con un sensor de vibración de Aqara

¿Has conseguido solucionar algún problema en Home Assistant y quieres compartirlo? ¿Alguna automatización para ayudar al resto? ¡Comparte!
eduardo
Site Admin
Mensajes: 95
Registrado: Mié Dic 12, 2018 1:09 am

Sensor de presencia en una silla con un sensor de vibración de Aqara

Mensaje por eduardo » Jue Dic 27, 2018 9:50 am

NOTA: Este aporte no es mío, es un usuario del grupo de Telegram llamado HHH que me pidió publicarlo. ¡Gracias!

Este código sirve para obtener uno de los 3 valores númericos de los sensores de coordination_158d0002bxxxxx de los sensores de vibracion xiaomi

*Problema:*
Por defecto Home assistant reporta el valor de un sensor coordination_158d0002bxxxxx del siguiente modo "311,-11,1198" cada uno de los números hace referencia a uno de los tres ejes del sensor. Pero Home assistant lo reporta como un String y no como un número. Un String en porgramación es todo aquello que no sea un número, es decir, palabras) esto presenta un problema y es que no se puede utilizar el sensor para hacer operaciones del tipo por encima/debajo de esta cifra haz... y encima la aleatoriedad del sensor y los valores de los estados de los ejes lo hacen imposible para programación.

Los sensores de coordinacion incluidos dentro de los sensores xiaomi son bastantes precisos, eso quiere decir que se pueden utilizar perfectamente para saber si alguien está sentado, tan solo con uno de los valores de los ángulos. Introduce el sensor por debajo de la funda de tu asiento o respaldo y apunta sus valores cuando estas sentado y cuando estás de pie, con suerte el número presentará variaciones muy extremas, por ejemplo, pasará de 20 estando de pie a 311 estando sentado.
Cuando tengas unos cuantos valores tan solo debes indicar el punto de activación o límite (tresshold en inglés) en /value_template: /icon_template:

Código: Seleccionar todo

##
##  ¡¡¡¡¡¡¡¡¡¡¡¡LEER ANTES DE UTILIZAR!!!!!!!!!!!!!!
##
##
##  Este código sirve para obtener uno de los 3 valores númericos de los sensores de coordination_158d0002bxxxxx de los sensores de vibracion xiaomi
## 
##    Problema:
##    Por defecto Home assistant reporta el valor de un sensor coordination_158d0002bxxxxx del siguiente modo "311,-11,1198" cada uno de
##    los números hace referencia a uno de los tres ejes del sensor. Pero Home assistant lo reporta como un String 
##    y no como un número. Un String en porgramación es todo aquello que no sea un número, es decir, palabras) esto presenta un problema
##    y es que no se puede utilizar el sensor para hacer operaciones del tipo por encima/debajo de esta cifra haz... y encima la aleatoriedad 
##    del sensor y los valores de los estados de los ejes lo hacen imposible para programación.
##  ____________________________________________________________________________________________________________________________________________________________________ 
##     El código se puede resumir del siguiente modo:
##     1º se crea la variable con://                                                                                 |   {% set var_sensor_sentado =
##     2º se apunta al estado del sensor://                                                                          |    states.sensor.coordination_158d0002b14481.state
##     3º se divide el estado en base aquellos valores que se encuentran entre comas, se crearan 3 valores://        |  .split(",")
##     4º como tenemos 3 valores ejemplo "311,-11,1198" podemos apuntar* al que queramos con la siguiente linea://   |   [0]
##     5º se filtra el valor como un integrer (un numero sin decimal)                                                |   |int %}
##     
##       una vez ya tenemos ese valor podemos utilizarlo como un sensor de plantilla/ template sensor

## ¡¡¡¡¡¡IMPORTANTE PARA APUNTAR AL PRIMER VALOR UTILIZA [0], PARA EL SEGUNDO [1] PARA EL TERCERO [2]!!!!!!!!!!!!!
## EJEMPLO:
##
##          Entidad                            | Estado
##          ___________________________________|________________________________________________
##          sensor.coordination_158d0002bxxxxx   311,-11,1198
##
##       si utilizamos [0] el valor que obtenemos es = 311
##       si utilizamos [1] el valor que obtenemos es = -11
##       si utilizamos [2] el valor que obtenemos es = 1198
##
##
##
## ¿CÓMO UTILIZARLO PARA SENSOR DE PRESENCIA Y SABER SI HAY ALGUIEN SENTANDO?
## Los sensores de coordinacion incluidos dentro de los sensores xiaomi son bastantes precisos, eso quiere decir que se pueden utilizar perfectamente para saber si alguien
## está sentado, tan solo con uno de los valores de los ángulos. Introduce el sensor por debajo de la funda de tu asiento o respaldo y apunta sus valores cuando estas sentado
## y cuando estás de pie, con suerte el número presentará variaciones muy extremas, por ejemplo, pasará de 20 estando de pie a 311 estando sentado.
## Cuando tengas unos cuantos valores tan solo debes indicar el punto de activación o límite (tresshold en inglés) en /value_template: /icon_template: 
## 
## sistuye el código por tu límite         %- if var_sensor_sentado > 150 -% 
## ejemplo:                                %- if var_sensor_sentado > 50 -% 
## 
## ¿POR QUÉ FUNCIONA?
## Cuando te sientas, tu peso ejerce presión hacia abajo, si pones el sensor en un extremo del asiento el sensor se inclinará unos milimetros siendo reportado en homeassistant.
## 
## CONSEJOS:
## Ponlo en un extremo, elije el valor que presente los cambios más drásticos, tambien te sirve como sensor de inclinación, comparte es gratis.


sensor:
  - platform: template
    sensors:
	  
      nombre_sensor:
        value_template: >- 
          {% set var_sensor_sentado = states.sensor.coordination_158d0002bXXXXX.state.split(",")[0]  |int %}
          {%- if var_sensor_sentado > 150 -%}
            sentado
          {%- else -%}
            vacio
          {%- endif -%} 
        icon_template: >-  
          {% set var_sensor_sentado = states.sensor.coordination_158d0002bXXXXX.state.split(",")[0]  |int %}
          {%- if var_sensor_sentado > 150 -%}
            mdi:seat-recline-normal
          {%- else -%}
            mdi:transit-transfer
          {%- endif -%} 
--
Fundador y miembro activo de la comunidad de domoticaencasa.es ! :D

Responder