MQTT-LampeADN/src/my_MQTT.h

171 lines
5.1 KiB
C

// MQTT client
#include <PubSubClient.h>
#define MQTT_broker "192.168.0.11"
#define MQTT_port 1883
#define MQTT_user ""
#define MQTT_password ""
// DEFINITION DES TOPICS POUR CE MODULE -------------------------------------------
char topic_lumiere[8 + DEVICEID_SIZE];
char topic_lumiere_color[8 + 6 + DEVICEID_SIZE];
char topic_lumiere_bright[8 + 11 + DEVICEID_SIZE];
char topic_lumiere_anim[8 + 10 + DEVICEID_SIZE];
char topic_lumiere_rempli[8 + 7 + DEVICEID_SIZE];
WiFiClient espClient;
PubSubClient clientMQTT(espClient); // Definition du client MQTT
char g_CHAR_messageBuff[100];
// --------------------------------------------------------------------------------
// Reconnexion au serveur MQTT
//
void MQTT_connect() {
DEBUG("Boucle jusqu'à obtenir une connexion");
//Boucle jusqu'à obtenir une connexion
while (!clientMQTT.connected()) {
DEBUG("Connexion au serveur MQTT...");
// ON arrive à se conecter au brocker MQTT
if (clientMQTT.connect(HostName, MQTT_user, MQTT_password)) {
DEBUG("OK");
// Connection au brocker MQTT ratée
} else {
DEBUG("KO, erreur : ");
DEBUG(clientMQTT.state());
DEBUG(" On attend 5 secondes avant de recommencer");
delay(5000);
}
}
// Souscription aux topics
clientMQTT.subscribe("lumiere/#");
}
// --------------------------------------------------------------------------------
// Déclenche les actions à la réception d'un message MQTT.
// lumiere/portal [ON|OFF] : Allumage de la barre de LEDS.
// lumiere/portal/color [#RRVVBB] : Changement de couleur des LEDS.
// lumiere/portal/animation [1/2/3/4/5] : Animation des LEDS.
//
void MQTT_callback(char* topic, byte* payload, unsigned int length) {
// create character buffer with ending null terminator (string)
char message[100];
unsigned int i;
for ( i = 0; i < length; i++) {
message[i] = payload[i];
}
message[i] = '\0';
// Traitement des topics
// .....................................................................................
if ( strcmp( topic, topic_lumiere ) ==0 ) {
DEBUG("Detection du topics :" + String( topic_lumiere ));
if ( String( message ) == "ON") {
DEBUG("Allumage les leds");
LED_colorWipe(strip.Color(0, 0, 255), 20);
} else if ( String( message ) == "OFF") {
DEBUG("Extinction des leds");
LED_colorWipe(strip.Color(0, 0, 0), 20);
}
g_BOO_AnimationSeconde = false;
// .....................................................................................
} else if ( strcmp( topic, topic_lumiere_color) == 0) {
DEBUG("Detection du topics :" + String( topic_lumiere_color ));
// Test si on a une couleur RGB dans le message
if ( LED_isAColor( message ) ) {
// Définition de la couleur
Couleur c;
c = LED_ExtractRVB( message );
DEBUG("Affichage de la couleur : " + String(c.R) + " " + String(c.V) + " " + String(c.B));
// Changemnt des LEDS avec la couleur
LED_colorWipe(strip.Color(c.R, c.V, c.B), 20);
}
// .....................................................................................
} else if ( strcmp( topic, topic_lumiere_bright) == 0 ) {
DEBUG("Detection du topics :" + String( topic_lumiere_bright ));
// Test si on a bien une valeur numérique
if ( LED_isADigit( message ) ) {
DEBUG("Luminosite : " + String( message ));
strip.setBrightness( String( message ).toInt() % 255 );
strip.show();
}
// .....................................................................................
} else if ( strcmp( topic, topic_lumiere_anim) ==0 ) {
DEBUG("Detection du topics :" + String( topic_lumiere_anim ));
DEBUG("Lancement de l'Animation avec le parametre :" + String( message ));
LED_Animation(String( message ).toInt());
// .....................................................................................
} else if ( strcmp( topic, topic_lumiere_rempli) ==0 ) {
DEBUG("Detection du topics :" + String( topic_lumiere_rempli ));
DEBUG("Lancement du remplissage à :" + String( message ));
LED_Remplissage(String( message ).toInt());
}
}
// --------------------------------------------------------------------------------
// Initialisation du brocker MQTT.
//
void MQTT_setup(){
// Création du client MQTT
DEBUG("Création du client MQTT");
clientMQTT.setServer(MQTT_broker, MQTT_port); // Configuration de la connexion au serveur MQTT
DEBUG("fonction de callback");
clientMQTT.setCallback(MQTT_callback); // La fonction de callback qui est executée à chaque réception de message
// Connection au Brocker MQTT
DEBUG("Connection au Brocker MQTT");
MQTT_connect();
// Construction des topcs auxquels s'abonner.
DEBUG("Construction des topcs auxquels s'abonner.");
sprintf( topic_lumiere, "lumiere/%s", DeviceID);
sprintf( topic_lumiere_color, "lumiere/color/%s", DeviceID);
sprintf( topic_lumiere_bright, "lumiere/brightness/%s", DeviceID);
sprintf( topic_lumiere_anim, "lumiere/animation/%s", DeviceID);
sprintf( topic_lumiere_rempli, "lumiere/allume/%s", DeviceID);
}