F1ATB forum
Amelioration MQTT / PREFIXE / TOPIC - 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 : Amelioration MQTT / PREFIXE / TOPIC (/thread-171.html)

Pages : 1 2 3 4


RE: Amelioration MQTT / PREFIXE / TOPIC - Francky - 16-10-2024

Merci a vous deux Smile


RE: Amelioration MQTT / PREFIXE / TOPIC - Francky - 27-10-2024

Bonjour 

Donc j'ai essayé de le faire moi meme sur la V12.06 car je suis passé de enphase à shelly em pro pour la source de donnée 
Bon le .bin , j'y arrive pas car j'ai un message de probleme de taille et il ne le créé pas Sad  Je l'envoi avec ARDUINO du coup 

Alors j'ai suivi tes indications sauf pour l'histoire de l'etat, cela fonctionne mais il y a un soucis pour la partie publication
Niveau forcage ok dans le prefixe mais pas la temperature (J'ai migré aussi d'une sonde interne a un capteur zigbee) 

Si je publie dans prefixe/temperatureMQTT , je reste à 0 alors que si je publie a la racine, cela fonctionne 

Pour infos, j'avais le meme soucis avec ta version V12


RE: Amelioration MQTT / PREFIXE / TOPIC - Nalexdouze - 28-10-2024

Ha je n'ai pas de sonde de temperature, je n'ai donc pas pu voir que j'avais oublié des choses  Big Grin

Je regarde et te redis  Tongue


RE: Amelioration MQTT / PREFIXE / TOPIC - Francky - 28-10-2024

(28-10-2024, 10:20 AM)Nalexdouze a écrit : Ha je n'ai pas de sonde de temperature, je n'ai donc pas pu voir que j'avais oublié des choses  Big Grin

Je regarde et te redis  Tongue

Merci  Smile


RE: Amelioration MQTT / PREFIXE / TOPIC - Nalexdouze - 29-10-2024

Voici l'ensemble de mes modifications MQTT mise à jour pour la version 12.06 au 29-10-2024 rassemblées dans cette réponse.

Action dans le Topic PrefixMQTT :

Dans le fichier MQTT.ino

• ajouts en ligne 10
Code :
char ActionsTopic[50];

• suppression de la ligne 63
Code :
char TopicAct[50];

• remplacement de l'ancienne ligne 64 et 65
Code :
sprintf(TopicAct, "%s", LesActions[i].Titre.c_str());
clientMQTT.subscribe(TopicAct);
par (devenue ligne 63 et 64)
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());
clientMQTT.subscribe(ActionsTopic);

• ajoute en ligne (devenue 124, entre le for et le if)
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());

• remplacement de la ligne 125
Code :
if (LesActions[i].Actif > 0 && LesActions[i].Titre == String(topic)) {
par
Code :
if (String(topic) == ActionsTopic && LesActions[i].Actif > 0) {

DiscoveryTopic dans le Topic homeassistant :

• aux lignes 210, 225, 236, 250 et 263, remplaceer PrefixMQTT par "homeassistant/"

soit par exemple pour la ligne 210
Code :
sprintf(DiscoveryTopic, "%s/%s/%s_%s/%s", PrefixMQTT, SSR, MQTTdeviceName.c_str(), VarName.c_str(), "config");
devient
Code :
sprintf(DiscoveryTopic, "%s/%s/%s_%s/%s", "homeassistant/", SSR, MQTTdeviceName.c_str(), VarName.c_str(), "config");

Organisation du topic façon Shellies :

• remplacement de la ligne 68 
Code :
sprintf(StateTopic, "%s%s_state", PrefixMQTT, MQTTdeviceName.c_str());

par
Code :
sprintf(StateTopic, "%s%s/state", PrefixMQTT, MQTTdeviceName.c_str());

• remplacement des lignes 63 et 124
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());

par
Code :
sprintf(ActionsTopic, "%s%s/actions/%s", PrefixMQTT, MQTTdeviceName.c_str(), LesActions[i].Titre.c_str());

AvailableTopic dans le Topic PrefixMQTT/MQTTdeviceName :

• modifier la ligne 38
Code :
sprintf(AvailableTopic, "%s/%s", MQTTdeviceName.c_str(), TopicA.c_str());

par
Code :
sprintf(AvailableTopic, "%s%s/%s", S.c_str(), MQTTdeviceName.c_str(), TopicA.c_str());

• la déplacer en ligne 41 juste après
Code :
sprintf(PrefixMQTT,"%s",S.c_str());

Un topic infos pour la frime Tongue  :

Pour jouer je souhaitais un topic info  Wink

• ajouter en ligne 11
Code :
char InfoTopic[50];

• ajouter en ligne 80 et 81
Code :
sprintf(InfoTopic, "%s%s/info", PrefixMQTT, MQTTdeviceName.c_str());
clientMQTT.publish(InfoTopic, DEVICE, true);
 
juste après 
Code :
PeriodeMQTTMillis = 500;

Et voici ce que j'obtiens :
   

En postant les actions dans le topic : RMS/routeur-fcb467f4ea10/actions/Triac

Avec cette configuration
   

(27-10-2024, 08:20 PM)Francky a écrit : Bonjour 

Donc j'ai essayé de le faire moi meme sur la V12.06 car je suis passé de enphase à shelly em pro pour la source de donnée 
Bon le .bin , j'y arrive pas car j'ai un message de probleme de taille et il ne le créé pas Sad  Je l'envoi avec ARDUINO du coup 

Alors j'ai suivi tes indications sauf pour l'histoire de l'etat, cela fonctionne mais il y a un soucis pour la partie publication
Niveau forcage ok dans le prefixe mais pas la temperature (J'ai migré aussi d'une sonde interne a un capteur zigbee) 

Si je publie dans prefixe/temperatureMQTT , je reste à 0 alors que si je publie a la racine, cela fonctionne 

Pour infos, j'avais le meme soucis avec ta version V12

Je me demandais je ce que j'avais bien pu cassé  Big Grin

En fait apparement rien  Wink
Code :
        if (Source_Temp[C] == "tempMqtt") {
          char TopicV[50];
          sprintf(TopicV, "%s", TopicT[C].c_str());
          clientMQTT.subscribe(TopicV);
        }
      }
      if (Source == "Pmqtt") {
        char Topicp[50];
        sprintf(Topicp, "%s", TopicP.c_str());
        clientMQTT.subscribe(Topicp);
      }

Comme pour une source MQTT le routeur vas écouter le topic renseigné dans le champs du formulaire.

Ainsi dans mon cas j'ai fait les tests suivant :

   

Temp extérieure sur le topic ESP32/Capteur-Bureau/status/DS18B20:0
Et Temp ballon PAC sur le topic TemperatureMQTT

Comme tu peux le voir j'ai bien les deux canaux MQTT visible sur l'accueil

   

Et ils sont lu a différents endroits 

   

Et voici mon binaire compilé toujours avec le support de l'écran OLED  Big Grin


.zip   Solar_Router_V12_06CA-f.bin.zip (Taille : 847.6 Ko / Téléchargements : 3)


RE: Amelioration MQTT / PREFIXE / TOPIC - Francky - 04-11-2024

(29-10-2024, 03:44 PM)Nalexdouze a écrit : Voici l'ensemble de mes modifications MQTT mise à jour pour la version 12.06 au 29-10-2024 rassemblées dans cette réponse.

Action dans le Topic PrefixMQTT :

Dans le fichier MQTT.ino

• ajouts en ligne 10
Code :
char ActionsTopic[50];

• suppression de la ligne 63
Code :
char TopicAct[50];

• remplacement de l'ancienne ligne 64 et 65
Code :
sprintf(TopicAct, "%s", LesActions[i].Titre.c_str());
clientMQTT.subscribe(TopicAct);
par (devenue ligne 63 et 64)
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());
clientMQTT.subscribe(ActionsTopic);

• ajoute en ligne (devenue 124, entre le for et le if)
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());

• remplacement de la ligne 125
Code :
if (LesActions[i].Actif > 0 && LesActions[i].Titre == String(topic)) {
par
Code :
if (String(topic) == ActionsTopic && LesActions[i].Actif > 0) {

DiscoveryTopic dans le Topic homeassistant :

• aux lignes 210, 225, 236, 250 et 263, remplaceer PrefixMQTT par "homeassistant/"

soit par exemple pour la ligne 210
Code :
sprintf(DiscoveryTopic, "%s/%s/%s_%s/%s", PrefixMQTT, SSR, MQTTdeviceName.c_str(), VarName.c_str(), "config");
devient
Code :
sprintf(DiscoveryTopic, "%s/%s/%s_%s/%s", "homeassistant/", SSR, MQTTdeviceName.c_str(), VarName.c_str(), "config");

Organisation du topic façon Shellies :

• remplacement de la ligne 68 
Code :
sprintf(StateTopic, "%s%s_state", PrefixMQTT, MQTTdeviceName.c_str());

par
Code :
sprintf(StateTopic, "%s%s/state", PrefixMQTT, MQTTdeviceName.c_str());

• remplacement des lignes 63 et 124
Code :
sprintf(ActionsTopic, "%s%s", PrefixMQTT, LesActions[i].Titre.c_str());

par
Code :
sprintf(ActionsTopic, "%s%s/actions/%s", PrefixMQTT, MQTTdeviceName.c_str(), LesActions[i].Titre.c_str());

AvailableTopic dans le Topic PrefixMQTT/MQTTdeviceName :

• modifier la ligne 38
Code :
sprintf(AvailableTopic, "%s/%s", MQTTdeviceName.c_str(), TopicA.c_str());

par
Code :
sprintf(AvailableTopic, "%s%s/%s", S.c_str(), MQTTdeviceName.c_str(), TopicA.c_str());

• la déplacer en ligne 41 juste après
Code :
sprintf(PrefixMQTT,"%s",S.c_str());

Un topic infos pour la frime Tongue  :

Pour jouer je souhaitais un topic info  Wink

• ajouter en ligne 11
Code :
char InfoTopic[50];

• ajouter en ligne 80 et 81
Code :
sprintf(InfoTopic, "%s%s/info", PrefixMQTT, MQTTdeviceName.c_str());
clientMQTT.publish(InfoTopic, DEVICE, true);
 
juste après 
Code :
PeriodeMQTTMillis = 500;

Et voici ce que j'obtiens :


En postant les actions dans le topic : RMS/routeur-fcb467f4ea10/actions/Triac

Avec cette configuration


(27-10-2024, 08:20 PM)Francky a écrit : Bonjour 

Donc j'ai essayé de le faire moi meme sur la V12.06 car je suis passé de enphase à shelly em pro pour la source de donnée 
Bon le .bin , j'y arrive pas car j'ai un message de probleme de taille et il ne le créé pas Sad  Je l'envoi avec ARDUINO du coup 

Alors j'ai suivi tes indications sauf pour l'histoire de l'etat, cela fonctionne mais il y a un soucis pour la partie publication
Niveau forcage ok dans le prefixe mais pas la temperature (J'ai migré aussi d'une sonde interne a un capteur zigbee) 

Si je publie dans prefixe/temperatureMQTT , je reste à 0 alors que si je publie a la racine, cela fonctionne 

Pour infos, j'avais le meme soucis avec ta version V12

Je me demandais je ce que j'avais bien pu cassé  Big Grin

En fait apparement rien  Wink
Code :
        if (Source_Temp[C] == "tempMqtt") {
          char TopicV[50];
          sprintf(TopicV, "%s", TopicT[C].c_str());
          clientMQTT.subscribe(TopicV);
        }
      }
      if (Source == "Pmqtt") {
        char Topicp[50];
        sprintf(Topicp, "%s", TopicP.c_str());
        clientMQTT.subscribe(Topicp);
      }

Comme pour une source MQTT le routeur vas écouter le topic renseigné dans le champs du formulaire.

Ainsi dans mon cas j'ai fait les tests suivant :



Temp extérieure sur le topic ESP32/Capteur-Bureau/status/DS18B20:0
Et Temp ballon PAC sur le topic TemperatureMQTT

Comme tu peux le voir j'ai bien les deux canaux MQTT visible sur l'accueil



Et ils sont lu a différents endroits 



Et voici mon binaire compilé toujours avec le support de l'écran OLED  Big Grin




MERCI pour cette réponse ultra détaillée 
MAJ effectuée, je referais les tests pour la temperature demain