16-01-2025, 04:43 PM
(Modification du message : 16-01-2025, 04:46 PM par Nalexdouze.)
Ta proposition et ton travail m'ont inspiré
J'ai travaillé à partir de ma version 12.06 personnalisée.
J'ai modifié cette partie du callback
Ainsi en envoyant un message JSON
{
"tOnOff":0, // en minutes, déja existant
"Mode": "Decoupe", // Inactif || Decoupe/OnOff || Multi || Train
"Seuil": 600, // Seuil Pw de l'action
"Periode": 0 // Période de l'action à modifier de 0 à X
}
dans le sujet : PrefixMQTT / MQTTdeviceName / actions / nom_de_Actions
Le message peut ne contenir d'une seule valeur. Si aucune période n'est précisée ça sera la 0 qui sera modifiée.
Je souhaitais faire ces actions car étant en Offre EDF Zen Week-End - Option Flex, une sorte de Tempo, les jours "rouges" je désactive manuellement ma période 1 (de 20h30 à 0h) pour ne pas chauffer l'eau à un tarif trop élevé. Ainsi je peux scénariser le Seuil Pw à 5800 le jours "Eco" et à 0 les jours de "Sobriété" pour neutraliser la chauffe du soir.
Reste a voir s'il est pertinent de garder en StockMessage les actions reçu...
Si d'autres téméraires sont intéressé et veulent tester ce bout de code
J'ai travaillé à partir de ma version 12.06 personnalisée.
J'ai modifié cette partie du callback
Code :
if (subMQTT == 1) {
for (int i = 0; i < NbActions; i++) {
sprintf(ActionsTopic, "%s%s/actions/%s", PrefixMQTT, MQTTdeviceName.c_str(), LesActions[i].Titre.c_str());
// Vérifie si le topic correspond à une action
if (String(topic) == ActionsTopic) {
// Lecture et mise à jour de la valeur Actif à partir du mode
String modeRecu = StringJson("Mode", message); // Utilisation de StringJson pour extraire "Mode"
if (modeRecu.length() > 0) {
int modeActif = -1; // Valeur par défaut pour détecter une erreur
if (modeRecu == "Inactif") {
modeActif = 0;
} else if (modeRecu == "Decoupe" || modeRecu == "OnOff") {
modeActif = 1;
} else if (modeRecu == "Multi") {
modeActif = 2;
} else if (modeRecu == "Train") {
modeActif = 3;
}
// Applique le changement si le mode est valide
if (modeActif >= 0) {
LesActions[i].Actif = modeActif;
StockMessage(LesActions[i].Titre + " mis à jour vers le mode : " + modeRecu);
} else {
StockMessage("Mode reçu invalide pour l'action " + LesActions[i].Titre);
}
}
// Ignorer les actions inactives
if (LesActions[i].Actif == 0) {
StockMessage("Action reçu pour " + LesActions[i].Titre + " ignorée car inactivée.");
return;
}
// Lecture des autres paramètres (Seuil/Vmin, etc.)
LesActions[i].tOnOff = ValJson("tOnOff", message); // Durée de marche forcée
float seuilRecu = ValJson("Seuil", message);
int periodeRecu = ValJson("Periode", message);
if (!isnan(seuilRecu)) {
LesActions[i].Vmin[periodeRecu] = seuilRecu; // Mise à jour de Vmin pour la période donnée
}
LesActions[i].Prioritaire(); // Applique les modifications immédiatement
}
}
}
Ainsi en envoyant un message JSON
{
"tOnOff":0, // en minutes, déja existant
"Mode": "Decoupe", // Inactif || Decoupe/OnOff || Multi || Train
"Seuil": 600, // Seuil Pw de l'action
"Periode": 0 // Période de l'action à modifier de 0 à X
}
dans le sujet : PrefixMQTT / MQTTdeviceName / actions / nom_de_Actions
Le message peut ne contenir d'une seule valeur. Si aucune période n'est précisée ça sera la 0 qui sera modifiée.
Je souhaitais faire ces actions car étant en Offre EDF Zen Week-End - Option Flex, une sorte de Tempo, les jours "rouges" je désactive manuellement ma période 1 (de 20h30 à 0h) pour ne pas chauffer l'eau à un tarif trop élevé. Ainsi je peux scénariser le Seuil Pw à 5800 le jours "Eco" et à 0 les jours de "Sobriété" pour neutraliser la chauffe du soir.
Reste a voir s'il est pertinent de garder en StockMessage les actions reçu...
Si d'autres téméraires sont intéressé et veulent tester ce bout de code
Enphase -> Node-RED -> Source MQTT
3x IQ7+/3x 375WhC + 4x IQ8MC/4x 400WhC
1x Routeur 12.06_Custom -> CES 2,5kW
Domotique gérée sous Jeedom 4.4.19 (DIY VMM Synology)
3x IQ7+/3x 375WhC + 4x IQ8MC/4x 400WhC
1x Routeur 12.06_Custom -> CES 2,5kW
Domotique gérée sous Jeedom 4.4.19 (DIY VMM Synology)