Las tomas de corriente inteligentes son la forma más sencilla de automatizar su hogar, pero a unos $ 40 cada una para un zócalo Wi-Fi o basado en ZWave, es poco probable que compre más de unas pocas.
Sin embargo, es posible que ya tenga algunas tomas económicas basadas en RF, del tipo que viene con su propio control remoto personalizado, y tiene algunos selectores de canal y de identificación en la parte posterior. Desafortunadamente, no hay hubs caseros inteligentes en el mercado. Battle of the Smart Home Hubs: ¿Qué hay allí y qué viene? Battle of the Smart Home Hubs: ¿Qué hay allí y qué viene? Leer más que funcionan con esos. ¿No sería genial si pudieras unirlos en tu sistema de casa inteligente DIY de alguna manera? Bueno, puedes, con bastante facilidad, 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 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 una 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 funcionan en una banda de 433 mHz (debería decir en el control remoto). Compré el mío de Maplin como un paquete de 3 por alrededor de £ 20 ($ 25.89).
Si esta es la primera vez que programa la placa NodeMCU, deberá descargar los complementos de Arduino: siga la primera parte de nuestra guía introductoria de Arduino Killer Conozca al asesino de Arduino: ESP8266 Conozca a la asesina de Arduino: ESP8266 ¿Qué pasa si ¿Te dijeron que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Bueno, lo hay. Lea más sobre el chip NodeMCU / ESP8266. También necesitarás controladores CH430 . Puede encontrar controladores macOS CH430 firmados 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. Downgrade si no lo has hecho ya.
Antes de continuar, voy a asumir un nivel básico de conocimiento sobre la programación de Arduino Programación de Arduino para principiantes: el controlador de semáforo Programación de Arduino para principiantes: el controlador de semáforo La semana pasada, aprendimos sobre la estructura básica de un programa Arduino y Echó un vistazo más de cerca al ejemplo de "parpadeo". Con suerte aprovechó la oportunidad para experimentar con el código, ajustando los tiempos. Esta vez, ... Leer más, y que tiene su configuración de NodeMCU en el administrador de la placa, y puede cargar correctamente algunos códigos de demostración. También debería haber agregado las bibliotecas incluidas en nuestra descarga a su carpeta Arduino / libraries .
Si tiene una biblioteca PubSubClient o MQTT existente, haga una copia de seguridad y elimínela; la que he incluido en la descarga es la única en la que pude recibir mensajes de manera confiable en NodeMCU, ¡y lo intenté mucho !
Sniffing RF (Opcional)
Este paso no es necesario si solo desea controlar los enchufes DIP-switch o Dial Selector, que se admiten de fábrica, y se necesitará una modificación mínima del código (esto aún es interesante para hacer primero, así que ' Entiendo lo que está pasando detrás de escena.
Si tiene otros controles remotos de RF que le gustaría agregar, primero tendrá que "olfatear" los códigos RF que se transmiten. Para hacerlo, cargue el boceto ReceiveDemo_Advanced del menú -> Examples -> RCSwitch folder, y cambie la siguiente línea de 0
mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2
a 2.
mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4.
Conecte el módulo receptor de la siguiente manera. Mirando al frente de la placa receptora (es la más larga de las dos, el transmisor es cuadrado) - el lado con los componentes en:
- La extrema derecha es GND. Conéctese a GND en la placa NodeMCU.
- La extrema izquierda es VCC. Conéctese a VIN en la placa NodeMCU.
- Los dos pines centrales son la señal. Conecte uno a D4 en el NodeMCU (están conectados entre sí, por lo que no importa cuál).
Ahora cargue el ReceiveDemo_Advanced modificado, y cuando termine, abra el monitor de serie y comience a presionar los botones en sus controles remotos. Copie el decimal (incluida la longitud del bit), la duración del impulso y el protocolo cuando presiona un botón.
Después de hacer esto, descubrí que la pantalla de mi proyector estaba usando
- SCREEN UP: Recibido 8694273 / 24bit; Longitud de pulso: 355 o 356; Protocolo: 1
- PANTALLA ABAJO: Recibida 8694276 / 24bit; Duración del pulso: 355 o 356; Protocolo: 1
Continúa con todos los botones que necesites.
Probando el transmisor
A continuación, vamos a intentar enviar códigos usando el transmisor. Conecte el módulo del 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 "ATAD" es en realidad "DATOS", deletreado al revés. De nuevo, los datos van a D4, VCC a VIN y GND a GND (eliminan el módulo receptor, ya no lo necesitan).
Cargue los ejemplos -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, y nuevamente, cambie 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. 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 socket 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 pueden 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 operarlos, 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 impulso. La longitud del pulso se sobrescribe al cambiar el protocolo.
// Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); }
Pruebe todos los códigos que están funcionando primero antes de pasar al siguiente paso.
Controlando a través de MQTT
Abra el boceto que descargó de Github llamado mqtt_rcswitch.ino, y comience modificando el SSID de la red y la contraseña de 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 OpenHAB, lea la parte 2 de nuestra guía para principiantes 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 configurarlo. 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 interruptores DIP.
La parte más importante del código es la función messageReceived (), que responde a los comandos MQTT entrantes. En esta función, primero estamos buscando la palabra clave principal: elegí "cambiar" y "pantalla". En el caso de "cambio", analizamos el canal y la identificación del conector; luego verifica el cuerpo de la carga para el comando.
void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ }
Por defecto, entonces, funcionan los siguientes comandos MQTT:
sala / control / interruptor / X / Y (donde X es el canal e Y es la identificación del conector, con el cuerpo del mensaje activado o desactivado)
sala de estar / control / pantalla (con el cuerpo del mensaje arriba o abajo)
Use la línea de comando o un cliente GUI MQTT para probar sus dispositivos antes de agregarlos a OpenHAB.
Añadiendo a OpenHAB
Como último paso, solo necesitamos crear algunos elementos para estos modificadores en OpenHAB. Definí los siguientes elementos por ahora, pero debería poder averiguar cómo agregar más:
/ * Dispositivos RF433mHz * / Cambiar CinemaScreen "Pantalla" (Cine) {mqtt = "> [intermediario: sala / control / pantalla: comando: ENCENDIDO: abajo], > [intermediario: 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 ="> [broker: livingroom / control / switch / 4/2: comando: ON: on], > [broker: 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 fue capaz de 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 su estado, por lo que si usa el control remoto original, es posible que el control del estado del socket no se refleje con precisión en OpenHAB. Limítese a usar solo la interfaz OpenHAB y debería estar bien.
¿Preguntas o problemas? Pregunte en los comentarios, y haré todo lo posible para ayudar . Si desea mejorar mi código, siéntase libre de enviar una solicitud de extracción.