La historia de cómo automaticé el apartamento usando Node-RED. Parte II

La tan esperada continuación de la publicación sobre la automatización del apartamento . En esta parte hablaré sobre iluminación, un sistema multimedia y sensores de seguridad.



Encendiendo


Para controlar la iluminación, se utilizan varios componentes:

  • cortinas motorizadas;
  • Iluminación regulable.

Brillar


La luz en las habitaciones se divide en dos zonas. Yo uso lámparas regulables LED ikeev. Utilizo tres módulos para el control de:
Dimmer incorporado FIBARO Dimmer 2
dimmer incorporado Fibaro Dimmer 2

Doble relé incorporado FIBARO Doble interruptor 2x1.5kW
incorporado dual relé Fibaro interruptor doble 2x1.5kW

Relé incorporado FIBARO Single Switch 2.5kW
incorporado relé conmutador Fibaro Individual 2,5 kW

Dimmer puede elegir automáticamente un método de regulación (en los bordes anterior y posterior de la fase) y de calibración para mínimo y el máximo brillo. Como tenía un sistema de tres cables por adelantado para todos los enchufes, no tuve que usar un bypass. Las lámparas LED no parpadean y no se encienden cuando no hay voltaje. Para los módulos regulables, utilizo interruptores de timbre para que pueda ajustar el brillo.


Diagrama de cableado del atenuador de tres hilos

Así es como funciona:

  • - , ( ).
  • - , — . . , .
  • , , . — .
  • , . , 1% .
  • , 15 .
  • , .














Como escribí anteriormente, todas las ventanas de mi apartamento dan a una avenida muy transitada con luces brillantes. Para resolver el problema de la luz brillante de las lámparas en la noche o en el verano del sol brillante, utilizo persianas motorizadas.

Al principio quería comprar kits confeccionados, pero los precios eran muy altos y no me gustó la combinación de colores. Esta idea tuvo que ser descartada y ensamblar varios conjuntos por su cuenta.

De los motores de 220 V, la elección era pequeña: la francesa Somfy o la china Dooya. Somfy es más silencioso, pero también más caro, por lo que la elección recayó en los motores Dooya DM35S. Los pedí junto con sujetadores en el "Aliexpress". El motor tiene dos interruptores de límite que ajustan la posición máxima y mínima.


Motor con soportes

El siguiente problema fue la tubería para enrollar cortinas. De acuerdo con las reglas del mensaje de correo, puede enviar un paquete de no más de 180 cm, y una de las ventanas que tengo es de más de 2 metros. En el mercado de la construcción más cercano, encontré una tubería de aluminio del diámetro deseado: 50 mm. Después de instalar los motores en las tuberías, queda por encontrar cortinas opacas. Ordené la tela en mis tamaños de "Aliexpress" después de acordar con el vendedor que me enviaría solo la tela, sin mecanismos.


La cortina montada fija Las

cortinas se controlan utilizando el módulo de control de persiana Z-Wave FIBARO Roller Shutter 2. Módulo de control de rejilla




El módulo está integrado en el zócalo. Para tales módulos, es aconsejable colocar inmediatamente tomas profundas para empujar el módulo, los cables y el interruptor. El módulo tiene suficientes configuraciones, incluida la respuesta a las alarmas, el cálculo del consumo de energía, la calibración con interruptores de límite.


Interruptor montado Las

cortinas se instalan en cada habitación y en la cocina. Puede controlar las cortinas mediante los interruptores ubicados junto a ellas o mediante una interfaz o secuencia de comandos.

Las cortinas se bajan automáticamente cuando anochece y las luces se encienden en la calle. Se elevan según el tiempo programado para cada habitación entre semana y fines de semana. Si está oscuro afuera, la luz comienza a encenderse suavemente en la habitación donde se baja la cortina.

Los días laborables y los fines de semana se calculan de acuerdo con el calendario de producción descargado. Puede reconfigurar la hora al día siguiente para cada habitación utilizando el comando telegrama. Antes de plegar las cortinas de acuerdo con el "reloj despertador", llega un mensaje de telegrama con la capacidad de confirmar, cancelar y reprogramar durante 30 minutos. Si la acción no sigue, las cortinas se pliegan automáticamente. En los días brillantes, las cortinas establecen automáticamente su posición según la iluminación de la habitación y la hora del día, y también comprueban si la luz está encendida o no. Al recibir el comando "Vacaciones", se bajan todas las cortinas en todas las habitaciones. Cortina de Gestión del escenario cortina de Gestión del escenario








Ejemplo de trabajo

Sistema multimedia


Tengo muchos dispositivos multimedia con varios controles remotos en la sala de estar, y quería controlarlos con un solo botón.

En Internet, encontré códigos IR separados para encender y apagar el amplificador, el televisor y el divisor HDMI. Utilizando el script Python pronto_broadlink, se transcodificaron a base64 y luego se convirtieron en una matriz de bytes y se escribieron en la base del código IR. Por lo tanto, ahora no es necesario saber en qué estado se encuentra el dispositivo ahora: simplemente puede enviar la señal nuevamente.

Como mi amplificador es bastante viejo y no sabe cómo procesar una imagen 4K a través de HDMI, compré un divisor HDMI. Le permite dividir la señal de video y audio en dos HDMI separados: uno de ellos está conectado al amplificador, el segundo al televisor.


Amplificador y otros dispositivos.

Por el momento tengo dos fuentes de audio y video: una computadora de escritorio y un servidor. Desde la interfaz, puede encender todos los dispositivos para la reproducción con un botón, solo en un caso la recepción de la señal se configurará en el divisor desde el servidor y, en el segundo, desde la computadora. En el futuro, se planea conectar las consolas de juegos al divisor.

Si todos salen de la casa, todos los dispositivos multimedia están apagados. Escena de control de medios




El sistema de presencia funciona con 6 sensores de movimiento y un sensor de apertura de la puerta delantera. Si, después de abrir y cerrar la puerta, no se ha activado un solo sensor de ocupación, se enviará un mensaje a Telegram en un intervalo determinado con confirmación. Si no se toman medidas en dos minutos o si se presiona el botón "Aceptar", el sistema cambia al modo "Fuera de casa". Si se produce un movimiento en este momento, el comando se cancela y el mensaje se elimina.

Intenté usar BLE, pero en mi caso no funcionó muy estable y dependía en gran medida del transmisor del teléfono. Detección automática de presencia




Sensores de seguridad


Los dispositivos de bloqueo Gidrolock están instalados en las tuberías de agua . Cuando el cable de control está en cortocircuito a fase, el actuador cierra el grifo; cuando se desconecta, se abre. Ambas unidades están conectadas a un relé incorporado Philio de contacto seco.

Gidrolock
El accionamiento del

relé Gidrolock está controlado por sensores NEO Coolcam Z-Wave ubicados en las áreas de posibles fugas. Todos los sensores están directamente asociados con el relé, de modo que el agua se cierra sin la participación del controlador. Para evitar que el grifo se agriete, cada dos semanas por la noche se abre y se cierra automáticamente. Diagrama de automatización de la unidad cuando Philio fuma un sensor




la ventilación se apaga para no inflar el fuego. Al mismo tiempo, se envía un mensaje al chat de telegramas, y el sensor chilla asquerosamente.

Otros sensores y dispositivos



Autorizar servidor


Este módulo es una implementación simple de un servicio de autorización.
Hay dos métodos http: uno verificará si la solicitud proviene de la red interna y, de ser así, autorizará al usuario emitiéndole un token JWT. El token JWT está encriptado usando RSA 256, la clave privada debe estar registrada en el archivo al lado. Si la solicitud no es de la red interna, el usuario será redirigido a la página de inicio de sesión, donde debe ingresar el nombre de usuario y la contraseña e iniciar sesión. Como no se supone la separación en los usuarios, el archivo de inicio de sesión y la contraseña en forma cifrada (SHA 512) están cerca en el archivo de configuración.

Servidor MQTT


El servidor MQTT se implementa utilizando el componente aedes .

El servidor se eleva en dos puertos: interno, para la comunicación con el servidor, sin autorización, y externo, que implementa WebSocket. Todos los clientes front-end se conectan a través de un socket y pasan la autenticación durante la autorización, se suscriben al tema y publican cualquier mensaje. El token JWT que se recibió del servidor de autorización entra y se valida con la clave pública. Para las solicitudes del servidor, no se realiza la validación.

Nodo personalizado-Nodos ROJOS


Al escribir la automatización, se requería implementar un nodo adicional y dos para finalizar.

Tuve que modificar node-red-contrib-openzwave , ya que mi solicitud de extracción fue aceptada solo después de 7 meses, pero ahora puede usar la biblioteca desde npm. El refinamiento consistió en lanzar un evento de eliminación de nodos.



El nodo MQTT también se ha finalizado. De hecho, el refinamiento principal es extraer la identificación del cliente conectado y volver a escribirla cuando se envía a la cola. Aquí puede arreglárselas con la funcionalidad de subflujo. También se suponía que debía transferir cualquier dato a la entrada del nodo MQTT, pero no fue útil.



Para controlar las cortinas y los grifos de agua, se requería un nodo de programación. Disponible en ese momento en la biblioteca eran demasiado ricas en características y no admitían una implementación simple usando CRON. Mi implementación es bastante simple: se puede tomar un cronograma a la entrada de un nodo o establecerlo internamente. Es posible cancelar el horario. Debajo del capó, se utiliza el horario de nodo .



Frente


Cada componente activo del apartamento, que está enrollado en automatización, es un módulo en la parte delantera. Cada módulo es autónomo y contiene todos los componentes necesarios para la representación. Los módulos se dividen en dos agregaciones: estática y Z-Wave. Los módulos deben implementar una interfaz.

Interfaz
export interface INode {
    id: string;
    type: NodeTypes;
    name: string;
    addWidget: ComponentClass<AddProps> | StatelessComponent<AddProps>;
    model: INodeModelConstructor;
    service?: INodeServiceConstructor;
    smallComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    bigComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogEditComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogViewComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
}


Ejemplo de implementación
class Widget extends BaseWidget implements INode {
    model: INodeModelConstructor = Model;
    manufacturerid: string = '0x0086';
    producttype: string = '0x1a02';
    productid: string = '0x0064';
    addWidget: StatelessComponent<AddProps> = AddWidget;
    service: INodeServiceConstructor = Service;
    smallComponent: StatelessComponent<WidgetProps<Model>> = SmallComponent;
    bigComponent: StatelessComponent<WidgetProps<Model>> = BigComponent;
    dialogEditComponent: ComponentClass<WidgetProps<Model>> = DialogEditComponent;
    dialogViewComponent: ComponentClass<WidgetProps<Model>> = DialogViewComponent;
}
export default Widget;


Para módulos estáticos, por ejemplo, aires acondicionados, debe implementar un almacén de datos en la parte delantera. Tal implementación es inconveniente, en el buen sentido necesita ser cambiada a un repositorio.

Para los módulos Z-Wave, organicé un repositorio común y el seguimiento de todos los cambios en él.

El módulo implementa la pantalla de dos maneras:

  • para pantallas "grandes" (tableta, computadora);
  • para teléfonos

Dependiendo del tipo de dispositivo, se seleccionará el control táctil o del mouse.

La aplicación está construida con webpack + babel: de acuerdo con la configuración actual, está ensamblada para las dos últimas versiones de Firefox, Chrome, Chrome Android.

Características de los códigos fuente.


Las fuentes

All Flow están deshabilitadas para no arrojar errores en el registro. El nodo de configuración para Z-Wave se elimina: tiene errores si no encuentra el controlador Z-Wave y deja caer todo el Nodo-RED. Debería verse más o menos así:


Para que funcione el cargador de calendario de trabajo, debe registrarse en data.gov.ru , obtener un token allí e ingresarlo después de access_token:


El pronóstico del tiempo se descarga de darksky.net una vez cada 15 minutos. También necesita una ficha, debe registrarse e ingresar la ficha después del pronóstico, en las coordenadas:


Para enviar notificaciones de telegramas, debe obtener su bot, ingresarlo en el nodo de configuración de Telegram y escribir la identificación del chat cuando sea necesario. En el caso de mi Flow, este es un subflujo: las



fuentes se dividen en frontal y posterior. En la parte posterior se encuentra:

  • Autorizar servidor.
  • Servidor MQTT.
  • Módulos personalizados Node-RED.
  • Flujos exportados en un archivo, que puede cargarse en su propia cuenta o en una instancia separada para las pruebas.
  • Un proyecto para Node-RED, en el que necesita instalar los módulos y luego solo cargar el flujo exportado (los módulos ya están en el proyecto).
  • Respaldo Mongo-base.

Puede encontrar información de instalación más detallada en el archivo readme en el repositorio de github .

Planes


Los planes son usar el micrófono de un teléfono inteligente o una tableta montada en la pared para el control de voz. Planeo implementar mi sistema de código abierto en un servidor basado en CMU Sphinx .

También planeo armar un módulo para tomar y transmitir lecturas de plomería y medidores de electricidad.

También vale la pena considerar el uso de estadísticas acumuladas para varios parámetros con el fin de optimizar la automatización.

Conclusión


Por el momento, he logrado la automatización casi completa de la casa según mis necesidades: mantener un clima y una iluminación cómodos en la casa. Debido a cierta automatización, fue posible reducir el consumo de electricidad (en aproximadamente 1,500 ₽ en invierno en comparación con el mismo equipo sin automatización), tanto desde el lado de los elementos de calefacción como desde el lado de la iluminación.

Por supuesto, todavía hay errores en los algoritmos, pero los detectaré algún día, al menos me estoy moviendo en esta dirección. El sistema funciona de manera estable, no veo ningún freno, a pesar de la muy baja velocidad en el protocolo Z-Wave.

Por supuesto, el sistema no se pagará por sí mismo a expensas del ahorro, hay más una cuestión de comodidad. Tal automatización es muy húmeda en términos de pequeñas cosas como cerrar y abrir cortinas, controlar la luz. Cuando estás en un apartamento normal, a veces olvidas encender o apagar las luces y no abres las cortinas.

Raramente ajusto el sistema climático con mis manos, pero a veces es necesario encender o apagar el aire acondicionado o ajustar la temperatura de la batería. En general, estoy satisfecho con el sistema resultante: permite menos tiempo para realizar ajustes. En el caso de una falla del controlador, toda la funcionalidad permanecerá en su lugar (solo la automatización se caerá). La funcionalidad del cierre de agua también se preservará. Si decido vender el apartamento, eliminaré fácilmente toda la automatización. O déjelo en su lugar, pero vendiendo más.

All Articles