Cómo controlar los enchufes de alimentación de RF baratos de OpenHAB

Cómo controlar los enchufes de alimentación de RF baratos de OpenHAB / Casa inteligente

Las tomas de corriente inteligentes son la forma más sencilla de automatizar su hogar, pero con alrededor de $ 40 cada una para una toma basada en Wi-Fi o ZWave, es poco probable que compre más de unas pocas..

Sin embargo, es posible que ya tenga algunos zócalos baratos basados ​​en RF, del tipo que vienen con su propio control remoto personalizado, y tienen algunos selectores de ID e canal en la parte posterior. Desafortunadamente, no hay centros de casas inteligentes en el mercado. Battle of the Smart Home Hubs: ¿Qué hay ahí fuera y qué viene? Battle of the Smart Home Hubs: ¿Qué hay ahí fuera y qué viene? Leer más que trabajan con esos. ¿No sería genial si pudiera vincularlos a su sistema de casa inteligente DIY de alguna manera? Bueno, usted puede, muy fácilmente de hecho, con alrededor de $ 10 en partes..

Con un poco más de trabajo, también puede integrar algún otro hardware remoto basado en RF a medida, como esta pantalla de cine de presupuesto.

Que necesitas:

  • ESP8266 NodeMCU v12E dev board (el modelo exacto no importa, v1 o v3 también deberían estar bien). La razón por la que estamos usando una placa NodeMCU es porque queremos la conexión Wi-Fi fácil más adelante. El enlace es para un paquete de 2, que cuesta $ 7 cada uno..
  • Paquete de transmisor y receptor de 433 MHz (alrededor de $ 3).
  • Las bibliotecas RCSwitch y MQTT, y nuestro código, todos disponibles para descargar desde Github.
  • Un servidor MQTT, local o remoto..
  • Algunos zócalos controlados por RF se ejecutan en la banda de 433 mHz (debe decirse en el control remoto). Compré la mía de Maplin como paquete de 3 por aproximadamente 20 £ ($ 25.89).

Si es la primera vez que programa la placa NodeMCU, deberá descargar los complementos de Arduino para ella: siga la primera parte de nuestra guía introductoria de Arduino Killer Conozca a Arduino Killer: ESP8266 Conozca a Arduino Killer: ESP8266 ¿Qué pasa si ¿Te dijo que hay una placa de desarrollo compatible con Arduino con Wi-Fi integrado por menos de $ 10? Bueno, la hay. Lea más para el chip NodeMCU / ESP8266. También necesitarás Drivers ch430. Puede encontrar los controladores macOS CH430 firmados aquí, o Windows aquí.

He usado v1.6.5 del Arduino porque cualquier versión superior presenta más problemas de los que resuelve. Bajar de categoría si aún no lo ha hecho.

Antes de continuar, asumiré un nivel básico de conocimiento sobre la programación de Arduino. Programación para principiantes de Arduino: el controlador de semáforo Programación de Arduino para principiantes: el controlador de semáforos La semana pasada, aprendimos sobre la estructura básica de un programa de Arduino y Eché un vistazo más de cerca al ejemplo de "parpadear". Esperemos que haya aprovechado la oportunidad para experimentar con el código, ajustando los tiempos. Esta vez,… Lea más, y que tiene su configuración de NodeMCU en el administrador de la placa, y puede cargar correctamente algún código de demostración. También debe haber agregado las bibliotecas incluidas en nuestra descarga a su Arduino / bibliotecas carpeta.

Si tienes un PubSubClient o biblioteca MQTT, realice una copia de seguridad y elimínela: la que he incluido en la descarga es la única en la que puedo recibir mensajes de forma confiable en NodeMCU, y lo intenté mucho!

RF Sniffing (opcional)

Este paso no es necesario si solo desea controlar el interruptor DIP o los enchufes del selector de marcación; estos son compatibles de fábrica, y se necesitará una modificación mínima del código (esto aún es interesante hacerlo primero, así que Entiendo lo que está pasando detrás de las escenas).

Si tiene otros controles remotos de RF que le gustaría intentar agregar, primero deberá “oler” Los códigos de RF que se transmiten. Para ello, carga la ReceiveDemo_Advanced boceto de la Menú -> Ejemplos -> RCSwitch carpeta, y cambiar la siguiente línea de 0

mySwitch.enableReceive (0); // Receptor en la interrupción 0 => que es el pin # 2

a 2.

mySwitch.enableReceive (2); // Receptor en GPIO 2 / D4.

Conecte el módulo receptor de la siguiente manera. Mirando al frente de la placa del receptor (es el más largo de los dos, el transmisor es cuadrado) - el lado con los componentes en:

  • Extremo derecho es GND. Conéctese a GND en la placa NodeMCU.
  • Lejos a la izquierda es VCC. Conectar a VIN en la placa NodeMCU.
  • Los dos pines del medio son la señal. Conecte cualquiera de los dos a D4 en la NodeMCU (están conectados entre sí, por lo que no importa cuál).

Ahora sube el modificado ReceiveDemo_Advanced, y cuando haya terminado, abra el monitor serie y comience a presionar los botones de sus controles remotos. Copie el decimal (incluida la longitud de bit), la duración del pulso y el protocolo cuando presiona un botón.

Después de hacer esto, encontré que la pantalla de mi proyector estaba usando

  • PANTALLA ARRIBA: Recibió 8694273/24 bits; Longitud del pulso: 355 o 356; Protocolo: 1
  • PANTALLA ABAJO: Recibió 8694276/24 bits; Longitud de pulso: 355 o 356; Protocolo: 1

Continúa por tantos botones como necesites.

Probando el transmisor

A continuación, vamos a intentar enviar códigos usando el transmisor. Cablee el módulo transmisor (el cuadrado) de la siguiente manera. Ten cuidado: el etiquetado de estos pines es atroz..

El pin VCC está en el centro, no en el lado izquierdo. Destruí un módulo en el proceso de resolver esto. Esa cosa que dice “UN POCO” es en realidad “DATOS”, deletreado al revés. Nuevamente, los datos van a D4, VCC a VIN y de GND a GND (retire el módulo receptor, ya no lo necesita).

Cargar el Ejemplos -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, y otra vez, cambiar el pin de datos:

mySwitch.enableTransmit (10);

a

mySwitch.enableTransmit (2);

Tenga en cuenta que una variedad de ejemplos están incluidos en la biblioteca, y cuál funciona para usted dependerá del tipo exacto de interruptor que tenga. Los tipos A (interruptores DIP) y B (diales o deslizadores) son los más comunes; consulte las imágenes en la página RCSwitch. Para el tipo B, encender y apagar un enchufe es tan simple como:

mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);

donde 1 es el ID de canal (el dial superior) y 4 es el ID de socket (el dial inferior). Estos fueron escritos en números romanos en mis cuencas. Por lo tanto, se puede abordar un máximo de 16 sockets individuales, aunque varios sockets pueden usar la misma dirección si tiene varios dispositivos para encender a la vez.

Sin embargo, la pantalla de mi proyector era un poco diferente: usaba una longitud de pulso diferente. Entonces, para operar esos, lo siguiente funcionó. Tenga en cuenta que también puede definir un protocolo diferente si su control remoto lo necesita, PERO asegúrese de definir el protocolo ANTES de la duración del pulso. La longitud del pulso se sobrescribe al cambiar el protocolo.

 // Tenga en cuenta que mi pantalla realmente requiere DOS pulsaciones de botón (no una pulsación larga, sino dos pulsaciones físicas), por lo que estoy retrasando un poco y luego envío la misma señal de nuevo void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (código decimal, número de bits) retraso (2000); mySwitch.send (8694273,24);  void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); retraso (2000); mySwitch.send (8694276,24);  

Pruebe que todos sus códigos funcionan primero antes de continuar con el siguiente paso.

Controlando a través de MQTT

Abre el boceto que descargaste de Github llamado mqtt_rcswitch.ino, y comience por modificar el SSID y la contraseña de la red para su hogar. Luego, cambie el nombre del canal si lo desea y configure el servidor MQTT. Si aún no tiene un servidor MQTT ejecutándose en su instalación de OpenHAB, lea la parte 2 de nuestra guía para principiantes de OpenHAB Guía para principiantes de OpenHAB Parte 2: ZWave, MQTT, Reglas y gráficos Guía de principiantes de OpenHAB Parte 2: ZWave, MQTT, Reglas y gráficos OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil de configurar. De hecho, puede ser francamente frustrante. Lee mas . Tenga en cuenta que mi código está diseñado para tomas de tipo B (interruptor giratorio), aunque también podría modificarlo fácilmente para los interruptores DIP.

La parte más importante del código es la mensaje recibido() Función, que responde a los comandos MQTT entrantes. En esta función, primero verificamos la palabra clave principal, elegí “cambiar” y “pantalla”. En el caso de “cambiar”, luego analizamos el canal y la ID del conector; A continuación, compruebe el cuerpo de carga útil para el comando.

 void messageReceived (String topic, String payload, char * bytes, longitud int sin firmar) if (topic.indexOf ("switch")> = 0) // cambiar el control, analizar el canal y el id del conector int channel = getValue ( tema, '/', 3) .toInt (); int plug = getValue (topic, '/', 4) .toInt (); if (payload == "on") mySwitch.switchOn (canal, conector);  else mySwitch.switchOff (canal, conector);  else else if (topic.indexOf ("screen")> = 0) // control de pantalla si (payload == "up") screenUp ();  else if (payload == "down") screenDown ();  / * agregue otro más si está aquí para escuchar más comandos (o simplemente modifique el anterior si no desea la pantalla) * / 

Por defecto entonces, los siguientes comandos MQTT funcionan:

sala de estar / control / interruptor / X / Y (donde X es canal, e Y es ID de conexión; con el cuerpo del mensaje activado o desactivado)
sala / control / pantalla (con el cuerpo del mensaje arriba o abajo)

Use la línea de comandos o un cliente MQTT de GUI para probar sus dispositivos antes de agregarlos a OpenHAB.

Añadiendo a OpenHAB

Como último paso, solo necesitamos crear algunos elementos para estos conmutadores en OpenHAB. He definido los siguientes elementos por ahora, pero debería poder averiguar cómo agregar más:

/ * Dispositivos RF433mHz * / Cambiar CinemaScreen "Screen" (Cinema) mqtt = "> [broker: livingroom / control / screen: command: ON: down],> [broker: livingroom / control / screen: command: OFF: up ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [broker: livingroom / control / switch / 4/1: comando: ON: on],> [broker: livingroom / control / switch / 4/1: comando: OFF: apagado] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [broker: livingroom / control / switch / 4/2: command: ON: on],> [broker: livingroom / control / switch / 4/2: comando: APAGADO: apagado] " 

¡Ahora debería poder controlar sus dispositivos de RF desde OpenHAB! Una cosa que me sorprendió gratamente fue el alcance: un solo nodo pudo cubrir la mayor parte de mi casa. Por supuesto, puede agregar otro nodo, escuchando el mismo canal, que simplemente repite los mismos comandos, si necesita más cobertura.

La única limitación a tener en cuenta es que los sockets en sí mismos no pueden informar de su estado, por lo que si usa el control remoto original, el control del estado del socket puede no reflejarse con precisión en OpenHAB. Sigue usando solo la interfaz OpenHAB y estarás bien.

¿Preguntas o problemas? Pregunta en los comentarios, y haré todo lo posible para ayudarte.. Si desea mejorar mi código, no dude en enviar una solicitud de extracción.

Explorar más sobre: ​​Domótica, enchufes inteligentes.