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. Lamentablemente, no hay centros de casas inteligentes en el mercado Battle of the Smart Home Hubs: ¿Qué hay afuera y qué viene? Lee mas que trabajan con esos ¿No sería genial si pudieras vincularlos de alguna manera a tu sistema inteligente de bricolaje? Bueno, puede, 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:
- ESP8266 NodeMCU v12E placa de desarrollo (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 433Mhz (alrededor de $ 3).
- Las bibliotecas RCSwitch y MQTT, y nuestro código, todo disponible 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 nuestro Guía introductoria de Arduino Killer Conoce al asesino de Arduino: ESP8266¿Qué pasa si te digo que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Pues lo hay. Lee mas para el chip NodeMCU / ESP8266. También necesitarás Conductores CH430. Puedes encontrar controladores firmados de macOS CH430 aquío Ventanas 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 Programación Arduino Programación Arduino para principiantes: Tutorial de proyecto de controlador de semáforo¡Construir un controlador de semáforo Arduino lo ayuda a desarrollar habilidades básicas de codificación! Te ayudamos a comenzar. Lee mas , 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 probé mucho!
Detección de RF (opcional)
Este paso no es necesario si solo desea controlar el interruptor DIP o las tomas de enchufe del selector de marcación, que son compatibles desde el primer momento, y se necesitará una modificación mínima del código (sin embargo, esto todavía es interesante hacer primero, por lo que comprenderá lo que sucede detrás del escenas).
Si tiene otros controles remotos 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 el frente de la placa del receptor (es el más largo de los 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 de 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 por todos los botones que 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. Lo que dice "ATAD" es en realidad "DATOS", escrito 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 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 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, pero dos físicas presiona), así que estoy retrasando un poco y luego enviando la misma señal nuevamente anular 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 OpenHAB Beginner's Guide Part 2: ZWave, MQTT, Rules and ChartingOpenHAB, 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 enchufes 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 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 "interruptor", analizamos el canal y conectamos la ID; luego verifique el cuerpo de la carga útil para el comando.
void messageReceived (tema de cadena, carga útil de cadena, char * bytes, longitud int sin signo) {if (topic.indexOf ("switch")> = 0) {// interruptor de control, analiza el canal y conecta la identificación 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 comandos o un cliente MQTT GUI 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: livingroom / control / screen: command: ON: down],> [broker: livingroom / control / screen: command: OFF: up]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: livingroom / control / switch / 4/1: command: ON: on],> [broker: livingroom / control / switch / 4/1: command: OFF: apagado]"} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [broker: livingroom / control / switch / 4/2: command: ON: on],> [broker: livingroom / control / switch / 4/2: command: 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 sockets no pueden informar su estado, por lo que si use el control remoto original, controle que el estado del zócalo no se refleje con precisión 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.
James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.