En este artículo explicaremos como utilizar los enchufes inalámbricos a 433 Mhz en Souliss.
Esta opción puede ser muy útil para quienes tengan problemas con el cableado de algunos puntos de corriente, o para quienes tengan prisa por empezar y ver resultados de su proyecto sin necesidad de meterse en obras.
Para ello necesitaremos un kit de enchufes por radio frecuencia, como por ejemplo el de la foto de inicio (pero hay muchos más). Además necesitaremos un emisor de radiofrecuencia a 433 Mhz, (ejemplo: http://www.dx.com/es/p/433mhz-rf-transmitter-receiver-link-kit-green-221225#.V2bw_zXlyj8), y un Arduino o ESP.
La librería
También necesitaremos utilizar la librería RC-Switch.
Podremos obtener la última versión de: https://github.com/sui77/rc-switch/releases/latest y la instalemos en el directorio “libraries” . Tambien la podemos instalar desde el menú: “Programa”, “Include Library”, “Manage Libraries…”, y en el campo “Filter your search…” introducir: RC-Switch, seguidamente hacer clic en “Install”..
En sí, esta librería está diseñada para gestionar los siguientes encoders / decoders:
- SC5262 / SC5272
- HX2262 / HX2272
- PT2262 / PT2272
- EV1527 / RT1527 / FP1527 / HS1527
- HT6P20X
El Hardware
Francia
"phenix YC-4000S" outlets
Alemania
- Elro Home Control Funk Set - Protocol:1 / BitLength:24
- Brennenstuhl Comfort RCS 1000N - Protocol:1 / BitLength:24 - (Available from Amazon in different countries)
- Globaltronics GT-FSI-07 / GT-9000 - Protocol:4 or 5 / BitLength:24 - (Available as "EasyHome Funksteckdosen-Set" about once a year from Aldi Süd)
Italia
España
- Three plug packet from Alcampo / Auchan (15€). Addresses come hard-coded. BitLength:24, PulseLength = 184 (code example)
Suecia
- Three plug packet + remote, FHT-7901, from Kjell & Company. Protocol:1, PulseLength = 150
Reino Unido
- Socket + Remote starting at £5
Paises Bajos
- Velleman WRS3B Protocol:1 / BitLength:24
- Eurodomest 972080 3 sockets + remote (Protocol: 1 / BitLength:24) at €9,95
Desconocido / no especifica el país
- Comen SD-UN2-RF
- !MRC03
- SilverCREST 53117
- SilverCrest RC DS1 4001-A FR 3726 (Wireless Socket Set); Remote control RCT DS1 AAA-A 3726; Sockets RCR DS1 3711-A IP20 FR 3726; IAN 113854; Protocol: 4 or 5 [details] ; BitLength: 24; SilverCrest is a brand of the Lidl stores; sold in the Czech Republic and probably also Germany, Slovakia and Poland
El emisor de RF
Conectaremos el emisor de RF, alimentando el Gnd, el positivo a + 5Vcc, y el terminal data al pin 10 de nuestro arduino. En el pin “ant” soldar un cable de 16,5 cm.
Los enchufes RF
CONFIGURACIÓN MEDIANTE MICRO-SWITCH
- En el caso de utilizar enchufes con codificación mediante micro-switch de 10 posiciones, verificaremos que los cinco primeros coinciden en todos ellos y en el mando (código de la instalación):
Las opciones son la siguientes:
On Off Off Off Off = 1
Off On Off Off Off = 2
Off Off On Off Off = 3
Off Off Off On Off = 4
Como podéis observar en la imagen anterior, la codificación de los cinco primeros switch coinciden, siendo estos: On Off Off Off Off, o lo que es lo mismo: 1 0 0 0 0, por lo que el código escogido en la instalación de este ejemplo será; 1.
Los siguientes cinco switch identifican el canal, en el caso de la foto está seleccionado el canal “1”, On Off Off Off Off.
Las opciones son la siguientes:
On Off Off Off Off = 1
Off On Off Off Off = 2
Off Off On Off Off = 3
CONFIGURACIÓN POR SELECTORES ROTATIVOS
En el caso de disponer de un receptor con codificación mediante selectores rotativos, la configuración deberá de ser igual a la que estos tengan seleccionados.
En la imagen se observa que están seleccionados IV y 2. El 4 corresponde al código de la instalación y el 2 al canal.
El Software
Seguidamente cargaremos el siguiente Sketch, basado en una propuesta del foro en inglés, en el que hemos añadido hasta tres equipos receptores para comprender mejor su funcionamiento.
// Configure the framework
#include "bconf/StandardArduino.h" // Use a standard Arduino
#include "conf/ethW5100.h" // Ethernet through Wiznet W5100
#include "conf/Gateway.h" // The main node is the Gateway
// Include framework code and libraries
#include <SPI.h>
#include "Souliss.h"
#include <RCSwitch.h>
// Define the network configuration according to your router settings
uint8_t ip_address[4] = {192, 168, 1, 77};
uint8_t subnet_mask[4] = {255, 255, 255, 0};
uint8_t ip_gateway[4] = {192, 168, 1, 1};
#define Gateway_address 77
#define Peer_address 78
#define myvNet_address ip_address[3] // The last byte of the IP address (77) is also the vNet address
#define myvNet_subnet 0xFF00
#define myvNet_supern Gateway_address
#define LIGHT1_NODE1 0
#define LIGHT2_NODE1 1
#define LIGHT3_NODE1 2
RCSwitch mySwitch = RCSwitch();
// Send an output command to the socket
#define RcDigOut(code1, code2, value, slot) Souliss_RcDigOut(code1, code2, value, memory_map, slot)
void Souliss_RcDigOut(U8 code1, U8 code2, U8 value, U8 *memory_map, U8 slot)
{
// If output is active switch on the pin, else off
if(memory_map[MaCaco_OUT_s + slot] == value)
mySwitch.switchOn(code1,code2);
else
mySwitch.switchOff(code1,code2);
}
void setup()
{
Initialize();
// Set network parameters
Souliss_SetIPAddress(ip_address, subnet_mask, ip_gateway);
SetAsGateway(myvNet_address); // Set this node as gateway for SoulissApp
// Set the typical logic to handle the lights
Set_T11(LIGHT1_NODE1);
Set_T11(LIGHT2_NODE1);
Set_T11(LIGHT3_NODE1);
// Define inputs, outputs pins
pinMode(2, INPUT); // Hardware pulldown required
pinMode(3, INPUT); // Hardware pulldown required
pinMode(7, OUTPUT); // trasmettitore 433Mhz
// Declare the pin where the transmitter is connected
mySwitch.enableTransmit(7);
}
void loop()
{
// Here we start to play
EXECUTEFAST() {
UPDATEFAST();
// Read every 510ms the input state and send it to the other board
FAST_510ms() {
// Use Pin2 as ON/OFF command
DigIn(2, Souliss_T1n_ToggleCmd, LIGHT1_NODE1);
// Use Pin3 as ON/OFF command
DigIn(3, Souliss_T1n_ToggleCmd, LIGHT2_NODE1);
// Use Pin4 as ON/OFF command
DigIn(4, Souliss_T1n_ToggleCmd, LIGHT3_NODE1);
// Execute the logic
Logic_T11(LIGHT1_NODE1);
Logic_T11(LIGHT2_NODE1);
Logic_T11(LIGHT3_NODE1);
// Send an output to the socket if there is a data change
if(isTrigger()) {
RcDigOut(1, 2, Souliss_T1n_Coil, LIGHT1_NODE1);
RcDigOut(1, 3, Souliss_T1n_Coil, LIGHT2_NODE1);
RcDigOut(1, 4, Souliss_T1n_Coil, LIGHT3_NODE1);
}
}
// Here we handle here the communication
FAST_GatewayComms();
}
EXECUTESLOW() {
UPDATESLOW();
SLOW_10s() { // We handle the light timer with a 10 seconds base time
Timer_T11(LIGHT1_NODE1);
Timer_T11(LIGHT2_NODE1);
Timer_T11(LIGHT3_NODE1);
}
SLOW_70s() {
RcDigOut(1, 2, Souliss_T1n_Coil, LIGHT1_NODE1);
RcDigOut(1, 3, Souliss_T1n_Coil, LIGHT2_NODE1);
RcDigOut(1, 4, Souliss_T1n_Coil, LIGHT3_NODE1);
}
}
}
Explicaión del código
El sketch está configurado para una codificación con código de instalación “1”, y los canales 1, 2, y 3.
// Send an output to the socket if there is a data change
if(isTrigger()) {
RcDigOut(1, 2, Souliss_T1n_Coil, LIGHT1_NODE1);
RcDigOut(1, 3, Souliss_T1n_Coil, LIGHT2_NODE1);
RcDigOut(1, 4, Souliss_T1n_Coil, LIGHT3_NODE1);
Después de las pruebas realizadas hemos verificado que hay que sumar un uno al número de canal, por ello el canal 1 se configura como 1, 2 el 2 como 1, 3, y el 3 como 1, 4.
En caso de escoger el código de instalación 2 se configuraría como 2, 2 , 2 , 3 , y 2 , 4.
En el apartado EXECUTEFAST() se verifica el estado de las entradas u órdenes de la apk, y se envían todos los estados de cada canal programado, es decir, si enviamos una orden de marcha en el canal 1, y tenemos en paro los canales 2 y 3, se emitirá la señal de marcha para el canal 1 y la de paro para los canales 2 y 3. Esta condición repetirá para cada cambio de estado de las entradas u órdenes desde la la apk.
En el apartado EXECUTESLOW() se verifica el estado de las entradas u órdenes de la apk, y se envían todos los estados de cada canal programado, es decir, aunque no estemos enviando ninguna orden de marcha o paro, cada ciclo de tiempo se emitirá la señal de marcha y paro para cada canal, según el último estado de estos. Esta función es útil debido a que no tenemos una supervisión cableada del estado de cada enchufe o receptor RF, con ello nos aseguramos de que la orden enviada se esté ejecutando.
Deberemos de tener en cuenta de que si desde el mando a distancia original enviamos alguna orden, la apk no sabría el estado, por ello se ha optado por repetir la orden Souliss cada cierto tiempo. Si encendemos desde el mando un canal, este se apagará pasado cierto tiempo dado que esta sería la última orden que constaría en el sistema.
Para optimizar el sistema se puede configurar el mando en canales diferentes a los del sketch, y a través de un receptor RF en el Arduino o ESP, tratar estas señales como entradas de canal y así generar a través del sistema Souliss la correspondiente orden de salida.
:OOO Madre mia!! Un trabajo espectacular Pep!! :))
ResponderEliminarLos tuyos son los de Alcampo u otros?
No, son los Elro, los compré en una oferta de Amazon por 10 €, pero ya no los tienen a ese precio.
EliminarLa verdad es que se trata de un sistema muy sencillo de poner en marcha por cualquier persona, sin necesidad de demasiados conocimientos.
Gran trabajo, yo cuando vi el hack creo que de juan pintom empece a comprar enchufes de esos :-D algunos probados y otros sin probar.
ResponderEliminar- de bauhaus tengo 3 con un mando y pila por 9€ (sin probar, son sin microinterruptores :-( )
- brico de pot 3 y un mando sin pila creo que 20€ probados y van bien.
-De Carrefour pack mando un enhufe sin pila por 6€ probado y funciona. aunque.... Ojo que los han cambiado y han cambiado la electronica a smd pero no han cambiado las instruciones :-D asi que si cambias el canal o letra en el encufe la LIAS, a no ser que lo sepas y cuando tienes que poner 1111100001 en realidad es 100011111 vamos el interruptor 9 es el 1, el 8 es el 2 y asi...
otra cosa a tener encuenta con estos enchufes de carrefouer o por lo menos me pasa a mi... es que no puedo caturar los codigos con el mando. Pero como son los mismos que los de brico de pot... pues capturo con ese mando
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminar