Hogar inteligente sin control remoto, pero con un cubo.

Problema



Durante la reparación de un nuevo departamento, regresé al departamento en el que no había vivido durante 10 años y decidí practicar la disciplina "Smart Home" para equipar un nuevo departamento de manera competente. El equipo en este apartamento tampoco es el más inteligente ni el más nuevo, ya que fue producido hace ~ 10 años. Sobre todo en el departamento me molestó la abundancia de controles remotos infrarrojos, se perdieron y cargaron al cerebro con la selección del correcto. Hasta hace poco, se decidió hacer una gran cantidad de botones no utilizados en los controles remotos. Y las consolas no son estéticas ni higiénicas, algunas son angulares, otras con bordes redondeados, los botones se vuelven amarillos y los restos de la vida de los habitantes se acumulan en ellos, lo que forma una "biocenosis de subbotones". Como resultado, una docena de controles remotos están esparcidos por la casa con un montón de botones innecesarios, para operaciones simples tuve que buscar dos o tres piezas, su mirada rasca mis ojos,Quería un control de voz táctil y de moda cómodo.



, . . xiaomi Xiaomi universal IR remotecontroller Xiaomi Mi Smart Home Magic Cube, Xiaomi smart home gateway 2





, , IR , — ZigBee . , , .


, , xiaomi, , Mi Home “”. , , . , . , , ( ) Mi Home 10 5 , 30 10 , , , 1 , . , ...


El problema de China no viene solo, excepto que los frenos se han convertido en la incapacidad de atornillar un cubo inteligente al control de sonido.


El cubo está controlado por gestos:

  • Agitar
  • Moverse en un avión
  • Gire 90/180 grados alrededor del eje horizontal
  • Rotar alrededor de un eje vertical
  • Y etc...



— , , , , , 90 — 10 , 45 — 5 . , — ZigBee, - , 3 .


Home Assistant, , , Xiaomi , ZigBee . Security token IR , Mi Home . xiaomi gateway , UART RX/TX Home Assistant.


El Home Assistant en sí mismo debe iniciarse en algún lugar, Synology DS718 + se presentó bajo esta tarea, que se utilizó como centro de medios DLNA y descarga de torrents. Este dispositivo puede ejecutar contenedores Docker, y un contenedor con Home Assistant se enrolla fácilmente en él. Home Assistant es genial, pero a diferencia de Mi Home, debes escribir toda la elegancia de una casa con bolígrafos en yaml. Habiendo dominado el DSL entendí Home Assistant y escupí desde otra herramienta de programación que no requiere conocimiento del PL, pude preparar una muleta de la forma deseada.



Código de automatización:
- id: volumen_up
  alias: Subir volumen
  desencadenar:
  - event_data:
      tipo_acción: rotar
      entity_id: binary_sensor.cube_0000000103ec74
    event_type: xiaomi_aqara.cube_action
    plataforma: evento
  condición:
    condición: plantilla
    value_template: "{{trigger.event.data.action_value> 0}}"
  acción:
  - plantilla_servicio: "script.bbk_vol_up _ {{(trigger.event.data.action_value / 3) | int}}"

Esta automatización capta el evento de rotación en el sentido de las agujas del reloj y llama a un script en cuyo nombre se sustituye el número de señales de aumento de sonido que debe enviar el emisor de infrarrojos. Como probablemente haya adivinado, cada esquina de la rotación requiere su propio script, se llamó copiar y pegar para crearlos, y me dio 20 scripts como estos:


bbk_vol_up_10:
  secuencia:
  - datos:
      mando:
      - bbk_vol_up
      delay_secs: 0.04
      num_repeats: 10
    entity_id: remote.xiaomi_miio_192_168_2_62
    servicio: remote.send_command

La configuración del emisor con señales interceptadas desde los altavoces del control remoto se ve así:
remoto:
  - plataforma: xiaomi_miio
    host: 192.168.2.62
    token: 392cbed325e862ffff983c4575b7a6f2
    comandos:
      bbk_power:
        comando: raw: nE5m0wlk0msxmEsmszmEsm0wAHKaABkAoQAcAL1MZtOQEFmM3ARMCHwCymM2m4ENgXEAioHlgy + AwoL3gvYAh4L0gGGEBYLCAL0BR4CHhU4A + wQ8TC
      bbk_vol_up:
        comando: raw: nMwmUwlk0mk1mEsms3ADKbABlM5hLJtMAD2ALKazkAdgAymM3AYMBApjNgKTmgGLABuBD4IaAEKA1YJrgyuBDwJvgZeEx4C / geHMZsA4YCDjxoAxo
      bbk_vol_down:
        comando: raw: nE5m0wlk0msxmEsmszmEsm0wAHKaABkAoQAcAL1MZtOQEFmM3ARMCHwIfAdQBFZuAQYFfAfuBCoHngveEx4C / gL + Cj4R2ANfLJqAYQUChU3MAA



¡Hurra! El sonido controla la rotación del cubo alrededor del eje vertical, y el televisor y los altavoces se encienden girando el cubo 90 grados alrededor del eje horizontal.

Home Assistant , , Google Assistant Home Assistant, . GA , . , . Ethernet , , IP , IP — , . custom_component Home Assistant:


import logging
from homeassistant.helpers.entity import Entity
from pythonping import ping

logger = logging.getLogger(__name__)

def setup_platform(hass, config, add_entities, discovery_info=None):
    entities = []
    for name, ip in config['hosts'].items():
        entities.append(IPSensor(name, ip))

    add_entities(entities)

class IPSensor(Entity):
    def __init__(self, name, ip):
        self._name = name
        self._ip = ip
        self._state = None
        self._is_on = None

    @property
    def name(self):
        return self._name

    @property
    def state(self):
        return self._state

    @property
    def state_attributes(self):
        return {'ip_address': self._ip}

    @property
    def device_class(self):
        return 'connectivity'

    @property
    def is_on(self):
        return self._is_on

    def update(self):
        result = ping(self._ip, count=1, timeout=0.1)
        self._is_on = result.success()
        self._state = 'on' if result.success() else ‘off'

Luego conecte el emisor de infrarrojos con el sensor al interruptor de esta manera:
cambiar:
  - plataforma: plantilla
    interruptores:
      toshiba_tv:
        value_template: "{{is_state ('binary_sensor.toshiba_tv', 'on')}}"
        encender:
          servicio: script.toshiba_power
        apagar:
          servicio: script.toshiba_power

Y ese cambio comenzó a mostrarse en Google Home y a controlarse desde la voz.

PD Ejercicio con una casa inteligente fue exitoso, fue a comprar nuevos dispositivos!
PPS Un centro ZigBee ahora por alguna razón ilumina el pasillo ...

Era




Se ha convertido



All Articles