Cómo controlar tomas de corriente RF baratas desde OpenHAB

  • Mark Lucas
  • 0
  • 1853
  • 89
Anuncio

Las tomas de corriente inteligentes son la forma más sencilla de automatizar su hogar, pero a un precio de alrededor de $ 40 cada una por 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 enchufes baratos basados ​​en RF, del tipo que viene con su propio control remoto personalizado, y tiene algunos selectores de canal e ID en la parte posterior. Desafortunadamente, no hay centros de casas inteligentes en el mercado Batalla de los centros de casas inteligentes: ¿Qué hay afuera y qué viene? Battle of the Smart Home Hubs: ¿Qué hay afuera y qué viene? que trabajan con esos ¿No sería genial si pudieras vincularlos a tu sistema de bricolaje inteligente de alguna manera? Bueno, puedes, de hecho, muy fácilmente, con alrededor de $ 10 en partes.

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

Que necesitas:

  • Placa de desarrollo ESP8266 NodeMCU v12E (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 433Mhz (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 enchufes controlados por RF se ejecutan en la banda de 433 mHz (debería decir en el control remoto). Compré el mío de Maplin en un paquete de 3 por alrededor de £ 20 ($ 25.89).

Si es la primera vez que programa la placa NodeMCU, deberá descargar los complementos de Arduino para ello: siga la primera parte de nuestra guía introductoria de Arduino Killer Conozca al Arduino Killer: ESP8266 Conozca al Arduino Killer: ESP8266 ¿Qué sucede si ¿Le dijo que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Pues lo hay. para el chip NodeMCU / ESP8266. También necesitarás Conductores CH430. Puede encontrar los controladores firmados de macOS CH430 aquí, o Windows aquí.

He usado v1.6.5 del Arduino porque cualquier cosa más alta presenta más problemas de los que resuelve. Baja si aún no lo has hecho.

Antes de continuar, voy a asumir un nivel básico de conocimiento sobre la programación Arduino Programación Arduino para principiantes: Tutorial del proyecto Controlador de semáforos Programación Arduino para principiantes: Tutorial del proyecto Controlador de semáforos Construir un controlador de semáforo Arduino lo ayuda a desarrollar habilidades básicas de codificación ! Te ayudamos a comenzar. , y que tiene su configuración de NodeMCU en el administrador de la placa, y puede cargar correctamente un código de demostración. También debería haber agregado las bibliotecas incluidas en nuestra descarga a su Arduino / bibliotecas carpeta.

Si tienes un PubSubClient o biblioteca MQTT, haga una copia de seguridad y elimínelo: el que he incluido en la descarga es el único en el que podría recibir mensajes de manera confiable en NodeMCU, y lo intenté mucho!

Detección de RF (opcional)

Este paso no es necesario si solo desea controlar los enchufes del interruptor DIP o del selector de marcación; estos son compatibles de fábrica, y se necesitará una modificación mínima del código (sin embargo, esto es interesante hacerlo primero, así que ' entenderé lo que sucede detrás de escena).

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

mySwitch.enableReceive (0); // Receptor en 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 la parte frontal de la placa del receptor (es la más larga de las dos, el transmisor es cuadrado), el lado con los componentes en:

  • El extremo derecho es GND. Conéctese a GND en la placa NodeMCU.
  • A la izquierda está VCC. Conéctese a VIN en la placa NodeMCU.
  • Medio dos pines son la señal. Conecte cualquiera de ellos a D4 en el NodeMCU (están conectados entre sí, por lo que no importa cuál).

Ahora sube el modificado ReceiveDemo_Advanced, y cuando termine, abra el monitor en serie y comience a presionar los botones en sus controles remotos. Copie el decimal (incluida la longitud de bits), la longitud del pulso y el protocolo cuando presione un botón.

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

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

Continúa tantos botones como necesites.

Probar el transmisor

A continuación, intentaremos enviar códigos utilizando el transmisor. Conecte el módulo transmisor (el cuadrado) de la siguiente manera. Tenga cuidado: el etiquetado en estos pines es atroz.

El pin VCC está realmente en el medio, 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 GND a GND (retire el módulo receptor, ya no lo necesita).

Cargue el Ejemplos -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, y nuevamente, cambie el pin de datos:

mySwitch.enableTransmit (10);

a

mySwitch.enableTransmit (2);

Tenga en cuenta que se incluyen una variedad de ejemplos en la biblioteca, y cuál funciona para usted dependerá del tipo exacto de interruptor que tenga. El tipo A (interruptores DIP) y B (diales o controles deslizantes) 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 la ID del canal (el dial superior) y 4 es la ID del socket (el dial inferior). Estos fueron escritos en números romanos en mis enchufes. Por lo tanto, se puede direccionar un máximo de 16 zócalos individuales, aunque varios zócalos 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 operarlos, funcionó lo siguiente. 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 de 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 enviando la misma señal nuevamente void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (código decimal, número de bits) delay (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 funcionen primero antes de pasar al siguiente paso.

Control a través de MQTT

Abre el boceto que descargaste de Github llamado mqtt_rcswitch.ino, y comience modificando 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 para 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. . Tenga en cuenta que mi código está diseñado para enchufes tipo B (interruptor giratorio), aunque también podría modificarlo fácilmente para interruptores DIP.

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

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

Por defecto, los siguientes comandos MQTT funcionan:

sala de estar / control / interruptor / X / Y (donde X es el canal e Y es la ID del enchufe; con el cuerpo del mensaje activado o desactivado)
sala de estar / control / pantalla (con el cuerpo del mensaje hacia arriba o hacia abajo)

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

Agregar a OpenHAB

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

/ * Dispositivos RF433mHz * / Cambiar CinemaScreen "Screen" (Cinema) mqtt = "> [corredor: sala de estar / control / pantalla: comando: ENCENDIDO: abajo],> [corredor: sala de estar / control / pantalla: comando: APAGADO: arriba ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [broker: livingroom / control / switch / 4/1: command: ON: on],> [broker: livingroom / control / switch / 4/1: comando: OFF: apagado] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [agente: livingroom / control / switch / 4/2: comando: ON: on],> [agente: livingroom / control / switch / 4/2: comando: OFF: 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 zócalos en sí no pueden informar su estado, por lo que si usa el control remoto original, el control del estado del zócalo puede no reflejarse con precisión en OpenHAB. Siga usando solo la interfaz OpenHAB y debería estar 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.




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.