Hola Habr!
El propósito de este artículo (ciclo) es el
efecto Habra, una historia introductoria sobre mi sistema de automatización del hogar, por supuesto que no inventé y creé todo desde cero, sino que solo recopilé tecnologías y proyectos que consideré más adecuados para este propósito y agregué un poco de mí mismo. Nivel amateur, pero como resultado, todo funciona, la gente lo usa y no corre detrás de mí con un club. Hice todo yo mismo. La crítica constructiva es bienvenida, será interesante conocer cualquier opinión.
El sistema incluye equipos y un conjunto de programas: directamente un sistema de automatización para la comunicación y visualización de equipos, comunicación y telemetría para monitoreo y actualización remotos, un asistente de voz de Yandex. Todo
(casi todo) está abierto y publicado en
Github .
Nivel de equipo
La parte principal y necesaria es un servidor basado en Raspberry Pi, pero sin problemas puede funcionar en una PC con Debian o Ubuntu. Sistema operativo Raspbian. El sistema debería funcionar 24/7/365, por lo que necesita una fuente de alimentación de alta calidad, por ejemplo, una fuente de alimentación ideal para iPad.

Para la gestión remota, también tengo la habilidad para que el asistente de voz Yandex necesite un servidor con una IP "blanca" y un dominio. Se está ejecutando un servidor MQTT en el servidor; SSL / TLS se utiliza por seguridad.
Soporte KNX a través de la puerta de enlace BAOS 771-774. BAOS es la interfaz entre el bus KNX y LAN. Permite el acceso a direcciones en el bus a través de un servicio web en formato JSON.
Mi equipo:Proyectos para Arduino IDEControlador Wifi basado en Wemos D1 mini
Alimentado por una red de 230 voltios, también es posible sin una fuente de alimentación de un bus común de 5 voltios para alimentar a Wemos o desde un equipo que controla, por ejemplo, una unidad de cortina. Es posible instalar en cajas de montaje y unión de suficiente profundidad, por ejemplo detrás de un interruptor.
Se puede utilizar en lugar del control de radio de varios accionamientos de cortina.
Pinout de salidas controladas:
L1, L2: salidas de potencia de triacs BT-137S, controladas por las salidas wemos D0, D5 a través de un optoacoplador MOC 3063S con control de transición de fase a cero. Encender y apagar la carga se llevará a cabo sin causar interferencia a la red.
p1, p2: salida pwm para atenuadores o unidades de cortina motorizadas o botones adicionales, según la configuración. corresponden a las conclusiones de wemos'a D6, D7.
Entrada analógica A0 para conectar varios sensores, como luz o un botón adicional.
ds - La conexión del sensor de temperatura DS18B20 corresponde al pin D1.
DHT - Conexión del sensor de temperatura DHT22 corresponde al pin D2.
b1, b2 - Los botones, pulsación corta y larga, con la función del contador de clics, se pueden conectar a las salidas de pulso de los medidores de electricidad, agua, etc.
Demostración de trabajo
Programa controlador creado en Arduino IDE. Apto para todas las placas base basadas en ESP-8266. La configuración de la red, el control y la operación del controlador se llevan a cabo mediante MQTT. Para una visualización conveniente de la configuración, hay una interfaz web, anteriormente había la capacidad de controlar a través de http, pero luego lo consideré superfluo y lo eliminé.
La interfaz web se puede deshabilitar. Para la comodidad de la configuración inicial, se proporcionan un script winit.sh e instrucciones. Para restablecer el controlador a la configuración predeterminada, debe ingresar el comando "predeterminado 1" o presionar simultáneamente los botones b1, b2 durante 20 segundos. También hay una versión simplificada del programa para puntos de venta Sonoff administrados.
Controlador basado en Arduino Mega
Consiste en el mega en sí y el escudo de la tarjeta de red W5100, la placa tiene salidas separadas para atenuadores y una entrada para sensores y botones, las salidas de relé deben conectarse por separado mediante un cable al conector de 2 filas ubicado en la mega placa en el lado opuesto de los puertos de alimentación y USB. El controlador está diseñado para el gabinete D6MG.
Pinout:
D2-9, D11-13 - Salidas PWM para atenuadores, la frecuencia de PWM aumenta desde el estándar.
D14-21 - Sensores de temperatura DS18B20 y DHT22.
D22-49 - salidas de relé, las salidas D22-29 se pueden configurar para persianas, puertas, accionamientos de cortinas.
D 10.50-53: utiliza la tarjeta de red W5100.
A0-16 - entradas para botones, pulsación corta y larga. A0-A6 se puede configurar para sensores analógicos.
La configuración de red para mega se configura en el programa antes de parpadear. La dirección IP es fija.
Atenuador en triac BT137-600E
Entrada 220 voltios, control PWM 0-5 / 3.3 voltios, establecido mediante la configuración de un puente. 0-5 voltios para trabajar con Arduino Mega o 0-3.3 voltios en caso de wemos. La señal PWM se alimenta a la entrada analógica A0 Arduino Pro donde se convierte en un retraso para abrir el triac, se proporciona un conector para flashear el arduino en su lugar. Espacio designado para radiador. En el lado del arduino, está el conector de control y alimentación del arduino (PWM, -, +), en el lado del smimstor, hay un conector de alimentación de 4 pines: alimentación y salida a la carga, si es necesario, también puede equiparse con un varistor o amortiguador. La placa de atenuación está diseñada para el chasis D2MG.
Proyecto Dimmer:

Demostración de trabajo
También hay una unidad triac de 28 canales en el paquete D9MG.
Pido disculpas por la calidad de la imagen. El equipo está conectado a través de la red de área local, un protocolo para la comunicación MQTT. Estoy usando el servidor MQTT Mosquitto.
Parte de software
Para mayor comodidad, primero debe preparar una imagen del sistema operativo con todos los programas necesarios. Utilizo Raspbian Stretch Lite. Deberá instalar nodejs, python-pip, python3-pip, supervisor, mosquitto, mosquitto-clients, sqlite3. Y paquetes pip: paho-mqtt y psutil. También puede instalar Node-red, perfecto para todo tipo de experimentos.
Después del lanzamiento de Apple Homekit en 2016, resultó que todos los fabricantes y desarrolladores durante toda la existencia de los sistemas Smart Home no podían hacer nada cercano en términos de conveniencia y funcionalidad en comparación con el homkit, esto es similar a la situación con el lanzamiento del primer iPhone, cuando resultó que todo el zoológico teléfonos, teléfonos inteligentes, comunicadores convertidos en un montón de basura. En cualquier caso, siempre es agradable utilizar un producto de calidad y acabado.
Elegí el proyecto
homekit2mqtt como el sistema de visualización principal. Por supuesto, puede usar OpenHUB o Homeassistant, estos sistemas también funcionan con MQTT.
hjmqttHomekit2mqtt crea Homekit Bridge, se puede encontrar en el programa Home en dispositivos Apple. Los accesorios (iluminación, sensores, controladores de temperatura, etc.) deben registrarse en un archivo especial en formato JSON. Los scripts filegen.sh e install.sh son responsables de crear este archivo. Debe registrar los accesorios en filegen.sh, install.sh agrega homekit2mqtt a la carga automática y se inicia. Lo principal ocurre en el archivo hjmqtt.py: la conexión de accesorios con equipos, también manualmente en el archivo, debe registrar los parámetros de accesorios y equipos, direcciones para KNX.
La funcionalidad de los accesorios está registrada en los archivos accesorio.py y accesorioknx.py. Los estados del dispositivo se almacenan en la base de datos sqlite; la biblioteca statdb.py se utiliza para las operaciones de la base de datos.
hjconnectEl próximo proyecto es necesario para telemetría remota. Este es el uso de memoria, discos, carga y temperatura, y el paquete psutil se utiliza para esto. Ahora el acceso abierto está disponible para la versión hjconnect solo para monitoreo y sin encriptación, y como un proyecto separado, el programa para vincular archivos también es MQTT
file-transfer-via-mqtt . La configuración está directamente en el archivo hjconnect.py principal. Si lo ejecuta con la opción -l, puede probarlo en el servidor MQTT local, la configuración del servidor remoto está en la línea 160
rclient.connect("test.mosquitto.org", 1883, 60)
El servidor test.mosquitto.org se puede reemplazar con su dominio o IP. Para identificar la Raspberry Pi, el número de serie del procesador se incluye en el tema, si el programa se ejecuta en otra computadora, en lugar del número de serie, aparecerá la cadena "SN". El intervalo de mensajes se establece en la línea 96.
th = threading.Timer(9, my_stat)
donde 9 son segundos.
Un ejemplo de cómo se ve el monitoreo simaAhora solo Yandex tiene la única columna de habla rusa. Crear una habilidad para Alice es bastante fácil. A diferencia de Siri, existe una completa libertad de acción. Y acceso en cualquier dispositivo. Solo que, desafortunadamente, si bien no hay una forma sensata de lanzar una habilidad, ejecutar una habilidad constantemente es inconveniente.
Este es un ejemplo de habilidad de trabajo. Para comenzar la habilidad, necesita un certificado SSL; se puede generar usando openssl. En la línea sima.py en la línea 14 hay un ejemplo de generación de certificados
openssl req -new -keyout crt.pem -out crt.pem -x509 -days 365 -nodes -subj '/CN=site.com/O=user/C=RU'
site.com y el usuario deben ser reemplazados por sus datos.
Cuando se lanza una habilidad en un nuevo dispositivo, se registra su identificador. Para vincular el identificador y el sistema de automatización, primero debe crear un nuevo archivo csv en el directorio de clientes basado en el archivo my.csv de muestra. El número de serie se escribe en el archivo de acuerdo con la plantilla, este es el mismo número de serie del programa hjconnect y los objetos de control se escriben: nombre, tipo, tema. El tema es una parte importante del tema accesorio MQTT del archivo JSON para homekit2mqtt. Luego, usando sn.py, debe convertir el número de serie en una contraseña y asignarle un nombre a esta contraseña en el dispositivo desde el cual administrará. El programa hjconnect proporciona comunicación, y el servidor de supervisión MQTT es la misma computadora en la que se ejecuta la habilidad.
Gracias adios