![]() |
|
Modification fonction callback du fichier EnvoiMQTT.ino - Version imprimable +- F1ATB forum (https://f1atb.fr/forum_f1atb) +-- Forum : Forum de F1ATB (https://f1atb.fr/forum_f1atb/forum-3.html) +--- Forum : Routeur Photovoltaïque (https://f1atb.fr/forum_f1atb/forum-4.html) +---- Forum : Evolutions faites, à faire, dont vous rêvez... (https://f1atb.fr/forum_f1atb/forum-10.html) +---- Sujet : Modification fonction callback du fichier EnvoiMQTT.ino (/thread-2688.html) |
Modification fonction callback du fichier EnvoiMQTT.ino - Sthev - 21-05-2026 Bonjour à tous. J'ai modifié la fonction callback afin de pouvoir modifier le pourcentage d'ouverture forcée par MQTT (test ok par envoi MQTT de home assistant de ForceOuvre). La modification : if (message.indexOf("ForceOuvre\":") > 0) { LesActions[i].ForceOuvre = int(ValJson("ForceOuvre", message)); recordDemande = true; } à ajaouter dans la fonction callback : // Callback après souscription à un topic et réaliser une action void callback(char *topic, byte *payload, unsigned int length) { char Message[length + 1]; for (int i = 0; i < length; i++) { Message[i] = payload[i]; } Message[length] = '\0'; String message = String(Message) + ","; TelnetPrintln("Mqtt::" + message); for (int canal = 0; canal < 4; canal++) { if (String(topic) == TopicT[canal] && Source_Temp[canal] == "tempMqtt") { temperature[canal] = ValJson("temperature", message); TemperatureValide[canal] = 5; } } if (String(topic) == TopicP && Source == "Pmqtt") { // Mesure de puissance PwMQTT = ValJson("Pw", message); PvaMQTT = ValJson("Pva", message); PfMQTT = ValJson("Pf", message); P_MQTT_Brute = String(Message); if (message.indexOf("Pw") > 0) LastPwMQTTMillis = millis(); } if (subMQTT == 1) { char TopicAct[60]; bool recordDemande = false; for (int i = 0; i < NbActions; i++) { if (LesActions[i].Titre.length() > 0) { snprintf(TopicAct, sizeof(TopicAct), "%s/%s", MQTTdeviceName.c_str(), LesActions[i].Titre.c_str()); if (strcmp(TopicAct, topic) == 0) { if (message.indexOf("tOnOff\":") > 0) LesActions[i].tOnOff = int(ValJson("tOnOff", message)); if (message.indexOf("ForceOuvre\":") > 0) { LesActions[i].ForceOuvre = int(ValJson("ForceOuvre", message)); recordDemande = true; } if (message.indexOf("Mode\":") > 0) { String modeRecu = StringJson("Mode", message); recordDemande = true; if (modeRecu == "Inactif") { LesActions[i].Actif = MODE_INACTIF; } else if (modeRecu == "Decoupe" || modeRecu == "OnOff") { LesActions[i].Actif = MODE_DECOUPE_ONOFF; } else if (modeRecu == "Multi") { LesActions[i].Actif = MODE_MULTISINUS; } else if (modeRecu == "Train") { LesActions[i].Actif = MODE_TRAINSINUS; } else if (modeRecu == "PWM") { LesActions[i].Actif = MODE_PWM; } else if (modeRecu == "Demi") { LesActions[i].Actif = MODE_DEMISINUS; } } if (message.indexOf("Periode\":") > 0) { int periodeRecu = int(ValJson("Periode", message)); if (periodeRecu >= 0 && periodeRecu < LesActions[i].NbPeriode) { recordDemande = true; if (message.indexOf("SeuilOn\":") > 0) LesActions[i].Vmin[periodeRecu] = int(ValJson("SeuilOn", message)); if (message.indexOf("SeuilOff\":") > 0) LesActions[i].Vmax[periodeRecu] = int(ValJson("SeuilOff", message)); // Mode OnOff if (message.indexOf("OuvreMax\":") > 0) LesActions[i].Vmax[periodeRecu] = int(ValJson("OuvreMax", message)); // Autre Modes } } LesActions[i].Prioritaire(); StockMessage("Action MQTT : " + String(topic) + " | " + String(Message)); } } } if (recordDemande) RecordFichierParametres(); } } |