Tienes que acceder para crear publicaciones y debates.

Controlador Arduino mqtt

Páginas:123

Alucinante estos de Xiaomi, tienen unos cuantos dispositivos (Sensor de Temperatura. y Humedad, Sensores para apertura de puertas y ventanas, Sensores PIR, interruptores de pared ) y no están mal de precio.

Haber si me actualizo en mqtt que "apunta maneras" este sistema.

Gracias Roberto ¡¡¡¡

Roberto, estuve revisando el código, y tengo las siguientes preguntas y modificación de código para mi caso particular:

En mi caso, y para ejemplificar, tengo una central que tiene 4 circuitos (0,1,2 y 3) y sólo el circuito número 2 y3 es la que controlo por mqtt.

Luego, en global variables defino los topic de sólo los cirtuitos 2 y 3, lo definiría así:

const char   TopicCircuit[Number_Circuit][9]={"","","CIRCUI02","CIRCUI03"};

no pasa nada si no defino topics para los circuitos 0 y 1.

Luego, el valor a enviar por el mensaje mqtt del topic CIRCUI02 es "on" si es 1, y "off" si es 0, dado que es un enchufe broadlink, y el CIRCUI03 es "replay" si es 1 , por lo tanto, en el UserLoop una alternativa de solución es:

 

for (n=0;n<Number_Circuit;n++){

if(mqttCircuit[n]!=circuits[n].Value){ //aca comparo para sólo enviar el mqtt una sola vez

boolean EvOk=false;//Variable que indica que todo comunico ok

if((n==2)&&(mqttCircuit[n]==1)){EvOk=clientMQTT.publish(TopicCircuit[n],"on"));}

if((n==2)&&(mqttCircuit[n]==0)){EvOk=clientMQTT.publish(TopicCircuit[n],"off"));}

if((n==3)&&(mqttCircuit[n]==1)){EvOk=clientMQTT.publish(TopicCircuit[n],"replay"));}

Else {EvOk=clientMQTT.publish(TopicCircuit[n],String(circuit.Value[n]));}

if (EvOk){mqttCircuit[n]=circuits[n].Value;}//Si comunicacion ok actualizamos

#ifdef EXC_ENABLE_WATCH_DOG

wdt_reset();

#endif

}

Creo que voy bien.

Ahora no sé si sea bueno enviar al boleo mensajes mqtt para circuitos que no sean mqtt, tal vez sea más eficiente enviar sólo para los circuitos mqtt.

 

 

A mi personalmente me gusta poco la verdad, por no decir nada, pero bueno si te va bien.

El mega mqtt seria mas conveniente dejarlo para solo para circuitos mqtt, no con topic en blanco y demas.. .eso no sabemos como afectara en rendimiento a largo plazo y para saberlo con seguridad se tendría que ver todo el código de la librería.... pero bueno, eso es decisión tuya.

Por lo demás vas bien... solo te quedaría que cuando otro equipo cambie el topic este se refleje en todo el sistema.

Es decir, que cuando cualquier equipo ajeno a excontrol modifique el circuito cambiando el topic la central de excontrol se de cuenta y lo refleje.

Para eso modifica la función messageReceived, toma esto como base.

void messageReceived(String &topic, String &payload) {
int n=0;
int v=0;
if (payload=="on"){v=1;}
else if(payload=="off"){v=0;}
else{ v=payload.toInt();}

#ifdef EXC_DEBUG_MODE
Serial.println("incoming: " + topic + " - " + payload);
#endif

if (v<0){//Valor invalido retorno de función
#ifdef EXC_DEBUG_MODE
Serial.println("El valor no puede ser inferior a cero!!");
#endif
return;
}

for (n=0;n<Number_Sensor;n++){
if (topic==TopicSensors[n]){mqttSensors[n]=v;Sensors[n].Value=v;return;}
}
if (v>255){//Valor invalido retorno de función
#ifdef EXC_DEBUG_MODE
Serial.println("Valor invalido!!");
#endif
return;
}
for (n=0;n<Number_Circuit;n++){
if (topic==TopicCircuit[n]){mqttCircuit[n]=v;circuits[n].Value=v;return;}
}

}

El cambio lo tienes en las primeras lineas.. concretamente en esta parte, creo que ese entiende bastante bien.

    if (payload=="on"){v=1;}
else if(payload=="off"){v=0;}
else{ v=payload.toInt();}

 

Roberto, sí la verdad que no sé cómo se comportaría, no lo he probado a cabalidad. Tal vez lo mejor sería eliminar el for, y sólo enviar los mensajes mqtt para sólo los circuitos mqtt, o como dices tú, tener un mega sólo para mqtt.

Respecto a la función messageReceived me parece muy bueno, así queda todo integrado, lo probaré.

hola, os dejo el codigo que tengo de subscribe a estados , de en este caso el sonoff, eso me funciona bien el tema esta que no modifica en el sistema el estado , se que algo esta mal incluso el codigo se puede mejorar pero no soy capaz, haber si algun compañero me puede indicar el camino . gracias

Archivos subidos:

Hola marcos... si te parece  lo tratamos por este hilo.

https://domotica-arduino.es/foro-excontrol-domotica-y-automatizacion/topic/desarrollo-colaborativo-integracion-sonoff-mqtt-excontrol-usando-controlador-arduino-mqtt/#postid-873

Comprende que el no disponer del equipo físicamente hace muy difícil la depuración de cualquier sistema... es posible que tengamos que hacer mas de un ajuste.

Yo creo que si no funciona lo que te paso al 100% anda muy cerca... pero... hay que probar.

Una cosa mas... se recomienda no usar la sd... si usas server los gráficos se hacen el servidor, no necesitas hacer una copia en la sd y mas aun si no tienes sensores.

Buenas acabo de adquirir un Sensor Xiaomi Mijia de temperatura y humedad. Mi intención es conectarlo al sistema domotico, como primeras pruebas con el sistema mqtt en el server.

Por lo leído en internet "usar dispositivos xiaomi aqara sin gateway" entiendo que hay que comprar :

CC Debugger

_CC2531 USB sniffer con el cable

El primero es para flasear al segundo ( Sólo se utiliza la primera vez).

Y el segundo es para que haga de "puente" entre el server y el sensor de Xiaomi.

De esta manera no tenemos que comprar su propio gateway y además sirve para conectar otros dispositivos de otras marcas.

No se si alguien se ha metido con este tema, si es que sí, podría decirme si voy por el buen camino ?

Gracias.

 

Hola Alf_sito...

Pues si... es tal y como comentas.... es todo tal cual.

Una buena alternativa es usar esto.

https://github.com/Koenkk/zigbee2mqtt

Es compatible con tu equipo y mucho mas,  la lista de dispositivos es impresionante.

https://koenkk.github.io/zigbee2mqtt/information/supported_devices.html

Seguramente seria una buena sección del subforo... o dentro de mqtt ir abriendo una sección para integrar zigbee... mediante mqtt .

Si os parece creamos sección ..

 

 

Creo que sí había que crear un subforo por que es muy interesante.

Por cierto esta librería que acabas de poner es igual que la de  / xiaomi-zb2mqtt 

o es mejor ?

Me respondo... esta mas actualizada ¡¡¡¡

Páginas:123