Il y a 3 heures
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();
}
}
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();
}
}
