Hack YI PRO 2k Home e integración en Home Assistant

Después de probar la Yi 1080p que me ha gustado bastante decidí hacerme con un modelo similar pero con resolución 2K , en este caso la YI PRO 2k Home , exteriormente son exactamente iguales

Una de la cosas buenas que tiene esta cámara es que aunque le instales el hack no pierdes el servicio de Yi Home para poder acceder directamente desde el exterior a traves de la aplicación de Yi Home

Lo primero será restablecer la cámara pulsando diez segundos y emparejarla con la aplicación Yi Home , ojo no con la Mi Home que no aparece ni el tipo de cámara , ni reconoce el QR de la parte trasera de la cámara

Tendremos que fijarnos en el numero de serie de la cámara para comprobar que es compatible y el firmware que debería llevar

Yi Pro 2K HomeRFUS – YFUS – ZFUS12.0.51*y623

Lo siguiente es pulsar el botón de reset para restablecerla y emparejarla con la aplicación Yi Home , después del reset esperaremos a que diga la frase “waiting for connect”

Acercaremos unos 15 cms. el código QR que aparece en la pantalla del móvil para que la cámara lo lea y se configure

Si todo es correcto ya podremos ver imágenes de nuestra cámara en la aplicación Yi Home

Una vez conectada iremos a ver a que dirección IP ha sido asignada.

Lo siguiente será bajar los ficheros adecuados para ese cámara y para el firmware desde aquí que tal como estaba en la tabla anterior seran los siguientes :

Formateamos una tarjeta con sd card formatter a FAT32

Copiaremos el contenido en una uSD formateada en FAT32

Si queremos poner las credenciales de nuestra wifi copiaremos el fichero Factory/configure_wifi.cfg.ori a Factory/configure_wifi.cfg y pondremos las credenciales

# Don't use backslash char \
# Don't use double quote " around ssid and psk
# Space chars are allowed
wifi_ssid=My AP 2.4GHz
wifi_psk=password$

Después de insertar la tarjeta y encenderemos la cámara , tras un par de minutos veremos que responde al ping y que podemos acceder desde la aplicación Yi Home

Le daremos una IP fija en pi-hole

Probaremos la comunicación con el comando ping

Si entramos en el navegador con la Ip de la cámara accederemos a la pagina de configuración de la cámara

Aquí veremos los enlaces tanto para RTSP como para los snapshots que mas tarde usaremos en Home Assistant

Links


High res streamrtsp://192.168.1.117/ch0_0.h264
Only audio streamrtsp://192.168.1.117/ch0_2.h264
High res snapshothttp://192.168.1.117/cgi-bin/snapshot.sh?res=high&watermark=yes
Low res snapshothttp://192.168.1.117/cgi-bin/snapshot.sh?res=low&watermark=yes
GitHub projectyi-hack-Allwinner-v2

En General podremos deshabilitar el Cloud de Yi , yo prefiero tenerlo a la par de Home Assistant

Lo siguiente será definir tanto el usuario y la contraseña para RTSP como para HTTP , así como la contraseña del usuario root.

Si queremos crear alguna tarea en cron las definiremos en la sección contrab , esta por ejemplo borraría todas las grabaciones con mas de 30 días de antigüedad

0 */6 * * * find /tmp/sd/record/* -mtime +30 -exec rm {} \;

Y esta reiniciara al cámara cada doce horas

0 */12 * * * reboot

En la sección de Expert definiremos que borre automáticamente ficheros cuando le que un porcentaje inferior al que le indiquemos

En la sección MQTT definiremos los datos de conexión a nuestro servidor MQTT

Iremos a la sección NTP

Y buscaremos la cadena adecuada para nuestra zona horaria

La añadiremos en Timezone

Si todo es correcto tras reiniciar debemos ver em Mqtt Explorer los datos de nuestra cámara

Es el momento de empezar a trastear con nuestro Home Assistant , lo primero será definir el sensor de movimiento

  ############################################################
  # Sensores camaras
  ############################################################
  
    - state_topic: "yi-cam-2k-pro/motion_detection"
      name: comedor_yi_pro2k_movimiento
      payload_on: "motion_start"
      payload_off: "motion_stop"
      device_class: "motion"  
      qos: 1     

Creamos una cámara tipo ffmpeg

  - platform: ffmpeg
    name: comedor_yi_pro2k
    input: !secret url_ffmpeg_yipro2k
    # extra_arguments: -q:v 2-32   

Creamos un sensor del tipo ping

  - platform: ping 
    host: 192.168.1.117
    name: ping_yi_pro2k
    count: 5
    scan_interval: 150

Los ponemos bonitos en nuestro customize.yaml

binary_sensor.ping_yi_pro2k:
  friendly_name: YI Pro 2K comedor
  icon: mdi:wifi
  
binary_sensor.comedor_yi_pro2k_movimiento:
  friendly_name: Sensor movimiento yipro2k Comedor
  icon: mdi:motion-sensor 

Ya podremos empezar a hacer automatizaciones con todo esto

A veces esta camara se queda frita ,por ello es mejor desactivar los snapshots y activar el fichero de swap

Performance

The performance of the cam is not so good (CPU, RAM, etc…). Low ram is the bigger problem. If you enable all the services you may have some problems. For example, enabling snapshots may cause frequent reboots. So, enable swap file even if this will waste the sd

En \yi-hack\etc\system.conf nos aseguramos que este activo

SWAP_FILE=yes
SWAP_SWAPPINESS=15

Y la inferface lo desactivamos

Y con esto y un bizcocho …..

Integrar controlador zigbee led TS0504B en Home Assistent

En el proceso de cambiar de dispositivos wifi a zigbee en esta ocasión le toca a las tiras led que tengo instaladas en casa , pedi una para hacer pruebas , pedi la versión con alimentación a 12Vdc ya que las tiras instaladas son RGBW a 12Vdc , hay una versión de este controlador con alimentación directa por USB , pero solo serviria para tiras led a 5Vdc.

Este seria el controlador en concreto.

Nada mas conectarlo zigbee2mqtt nos lo detecta como un controlador tuya TS0504B

Le cambiaremos la etiqueta en el fichero de configuración de zigbee2mqtt

  '0xa4c1383595478432':
    friendly_name: 'led_zb2_pruebas'

AL momento ya empezaremos a recibir información via MQTT

{
  "brightness": 254,
  "color": {
    "x": 0.1355,
    "y": 0.0399
  },
  "color_mode": "xy",
  "device": {
    "applicationVersion": 65,
    "dateCode": "",
    "friendlyName": "led_zb2_pruebas",
    "hardwareVersion": 1,
    "ieeeAddr": "0xa4c1383595478432",
    "manufacturerID": 4417,
    "manufacturerName": "_TZ3210_onejz0gt",
    "model": "TS0504B",
    "networkAddress": 48475,
    "powerSource": "Mains (single phase)",
    "stackVersion": 0,
    "type": "Router",
    "zclVersion": 3
  },
  "last_seen": "2024-05-01T21:38:10+02:00",
  "linkquality": 105,
  "state": "ON"
}

zigbee2mqtt/led_zb2_pruebas

Este seria el json del autodiscovery de HA , pero yo prefiero integrarlos manualmente en mi Home Assistant

{
  "availability": [
    {
      "topic": "zigbee2mqtt/bridge/state"
    },
    {
      "topic": "zigbee2mqtt/led_zb2_pruebas/availability"
    }
  ],
  "availability_mode": "all",
  "brightness": true,
  "brightness_scale": 254,
  "color_mode": true,
  "command_topic": "zigbee2mqtt/led_zb2_pruebas/set",
  "device": {
    "configuration_url": "https://zigbee2mqtt.antrivas.duckdns.org/#/device/0xa4c1383595478432/info",
    "identifiers": [
      "zigbee2mqtt_0xa4c1383595478432"
    ],
    "manufacturer": "TuYa",
    "model": "Zigbee RGBW light (TS0504B)",
    "name": "led_zb2_pruebas",
    "via_device": "zigbee2mqtt_bridge_0x00124b001ca16260"
  },
  "json_attributes_topic": "zigbee2mqtt/led_zb2_pruebas",
  "name": null,
  "object_id": "led_zb2_pruebas",
  "origin": {
    "name": "Zigbee2MQTT",
    "sw": "1.35.3",
    "url": "https://www.zigbee2mqtt.io"
  },
  "schema": "json",
  "state_topic": "zigbee2mqtt/led_zb2_pruebas",
  "supported_color_modes": [
    "xy"
  ],
  "unique_id": "0xa4c1383595478432_light_zigbee2mqtt"
}

Esta era la configuración para los controladores wifi con el firmware espurna

    - name: tira_led_estudio
      state_topic: led-despacho/relay/0
      command_topic: led-despacho/relay/0/set
      payload_on: 1
      payload_off: 0
      availability_topic: led-despacho/status
      payload_available: 1
      payload_not_available: 0
      brightness_state_topic: led-despacho/brightness
      brightness_command_topic: led-despacho/brightness/set
      rgb_state_topic: led-despacho/rgb
      rgb_command_topic: led-despacho/rgb/set
      white_value_command_topic: led-despacho/channel/3/se

Y con este controlador quedaria así :

    - name: tira_led_estudio
      schema: json
      state_topic: "zigbee2mqtt/led_despacho_zb"
      command_topic: "zigbee2mqtt/led_despacho_zb/set"
      availability_topic: "zigbee2mqtt/led_despacho_zb/availability"
      payload_available: online
      payload_not_available: offline      
      brightness: true
      rgb: true
      # white_value: true
      effect: true
      effect_list: [blink, breathe, okay, channel_change, finish_effect, stop_effect]
      optimistic: false
      qos: 0   

Crearemos un par de sensores , uno de calidad del enlace y otro de disponibilidad

  ### TIRA LED ESTUDIO

    - state_topic: "zigbee2mqtt/led_despacho_zb"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:signal"
      unit_of_measurement: "lqi"
      value_template: "{{ value_json.linkquality }}"    
      name: "led_despacho_zb_estado"  
  
    - state_topic: "zigbee2mqtt/led_despacho_zb"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:calendar-clock"
      value_template: "{{ value_json.last_seen }}"
      name: "led_despacho_zb_ultima_conexion"   

Crearemos un sensor binario de conexión

    - state_topic: "zigbee2mqtt/led_despacho_zb/availability"       
      availability_topic:  "zigbee2mqtt/led_despacho_zb/availability"     
      name: led_despacho_zb_disponibilidad      
      device_class: "connectivity"      
      payload_on: "online"
      payload_off: "offline"  

Y crearemos un sensor que nos indicara cuando ocurrió la ultima conexión del controlador

  - platform: template
    sensors:
      led_despacho_zb_ultima_conexion_minutos:
        value_template: >-
          {% set x1 = as_timestamp(states('sensor.led_despacho_zb_ultima_conexion')) %}
          {% set x2 = as_timestamp(now()) %}
          {% set time = x2 - x1 | int(0) %}
          {% set days = (time/86400) | int %}
          {% set hours = (time / 3600 % 24) | int %}
          {% set minutes = (((time / 3600) % 1) * 60) | int %}
          {{ days ~ 'd ' ~ hours ~ 'h ' ~ minutes ~ 'm' }}        
        friendly_name: Ultima conexión tira led estudio
        icon_template: "mdi:calendar-clock"

Una de las cosas que son diferentes es que antes tenia control tanto de la parte led de color como la parte de blanco a la vez , con este controlador si se envia el valor RGB 255,255,255 desactiva la parte de color y activa la parte de blanco.

Por ejemplo así desactiva la parte de color y activa la parte de blanco

    - service: light.turn_on
      data:
        entity_id: light.tira_led_estudio
        brightness: 255
        rgb_color: [255,255,255]  

Lo vestiremos un poco en nuestro lovelace , yo suelo usar el custom component rgb-light-card

Esta seria la configuración para este caso en concreto

      - type: entities
        title: Estudio
        show_name: true
        show_state: false
        show_header_toggle: false
        columns: 3     
        entities:  
          - light.luz_estudio 
          - light.tira_led_estudio 
          - type: 'custom:rgb-light-card'
            entity: light.tira_led_estudio
            justify: left
            hide_when_off: true
            colors:
              - rgb_color:
                  - 255
                  - 255
                  - 255
                icon_color: '#FFFFFF'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 0
                  - 0
                icon_color: '#ff0000'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 0
                  - 0
                  - 255
                icon_color: '#3366CC'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 63
                  - 255
                  - 0
                icon_color: '#33CC33'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 0
                  - 255
                  - 255
                icon_color: '#00ffff'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 255
                  - 0
                icon_color: '#F1C40F'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 109
                  - 0
                  - 219
                icon_color: '#7D3C98'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 127
                  - 0
                icon_color: '#D35400'             
                brightness: 255
                transition: 1

Uno de los problemas que me he encontrado es que la tira led venia cambiada, en lugar de GND R G B W era GND G R B W , en espurna lo solvente por software

Esta seria la configuración para cada tipo de tira led

Y esta era la que tenia yo , aparentemente esta bien , pero no , interiormente la tira led estaba cambiada

Un par de soldaduras y colores cambiados

Y con esto y un bizcocho …..