Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
21-08-2024, 02:40 PM
Bonjour tout le monde, j'ai besoin d'un coup de main pour modifier le code de l'ESP.
J'ai fabriqué un routeur pour modifier un spa (suppression de l'electronique d'origine par le routeur sur lequel j'ai apporté quelques modifications, deux sondes de temperature, un ventilo piloté pour le radiateur des triacs, un ecran, etc.... )
J'ai besoin de lire l'etat logique d'un GPIO de mon esp, (celui ci est deja choisi, pas besoin d'un code pour choisir parmi plusieurs), et d'envoyé via MQTT son état a HomeAssistant. Il s'agit d'une alarme quand le filtre se colmate.
J'ai quelques connaissances en arduino et je sais lire l'état avec un digitalRead mais apres je ne sais pas modifier le "MQTT.ino" de F1ATB, je crois qu'il faut grater du coté des " void DeviceToDiscover" ou "void DeviceBin2Discover" mais je n'en suis pas du tout
Si un âme charitable peut me mettre sur la voie .....
Merci par avance
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
Messages : 96
Sujets : 8
Inscription : Jun 2024
Réputation :
4
Salut,
Alors je dirais qu'il te faut dans
Citation :void sendMQTTDiscoveryMsg_global()
ajouter une ligne avant
Citation :Serial.println("Paramètres Auto-Discovery publiés !");
du genre
Citation :DeviceToDiscover("state_GPIO", "", "device_class", "0");
Soit tu trouve une classe correspondant à ton attente sinon laisse le champ device_class vide.
https://www.home-assistant.io/integratio...vice-class
Puis dans
Citation :void SendDataToHomeAssistant()
avant
Citation :sprintf(value, "%s}", value);
ajoutes
Citation :sprintf(value, "%s,\"Etat Filtre\":%d", value, var_digitalRead);
Je peux me tromper mais je pense que tu dois creuser dans ce sens.
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)
Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
(21-08-2024, 03:28 PM)Nalexdouze a écrit : Salut,
Alors je dirais qu'il te faut dans
Citation :void sendMQTTDiscoveryMsg_global()
ajouter une ligne avant
Citation :Serial.println("Paramètres Auto-Discovery publiés !");
du genre
Citation :DeviceToDiscover("state_GPIO", "", "device_class", "0");
Soit tu trouve une classe correspondant à ton attente sinon laisse le champ device_class vide.
https://www.home-assistant.io/integratio...vice-class
Puis dans
Citation :void SendDataToHomeAssistant()
avant
Citation :sprintf(value, "%s}", value);
ajoutes
Citation :sprintf(value, "%s,\"Etat Filtre\":%d", value, var_digitalRead);
Je peux me tromper mais je pense que tu dois creuser dans ce sens.
Bonjour Nalexdouze, merci pour ta réponse rapide et très détaillée. J'ai testé mais bien que je n'ai pas d'erreur de compilation cela ne semble pas fonctionner. mosquito et mqtt explorer ne détectent pas le nouveau message (découverte ). Je l'ai fait pour une deuxième sonde de température (radiateur triacs) et cela fonctionne bien ....
Quelle documentation utiliser pour le codage MQTT.ino ?
Je vais continuer à chercher ....
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
Messages : 709
Sujets : 22
Inscription : May 2024
Réputation :
75
Il faut faire comme pour ActifType:
La découverte
DeviceBin2Discover(ActifType);
et l'envoi
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 1);
ou
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 0);
Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
(22-08-2024, 09:31 AM)F1ATB a écrit : Il faut faire comme pour ActifType:
La découverte
DeviceBin2Discover(ActifType);
et l'envoi
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 1);
ou
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 0);
Bonjour André et merci pour votre réponse.
Pourriez vous m'expliquer la construction de " sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 1);"
ou m'indiquer un lien ou je pourrais trouver une explication ?
J'ai trouvé celui ci: sprintf() avec Arduino | Imprimer plusieurs variables sur le moniteur série (programmingelectronics.com)
Merci pour votre aide
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
Messages : 96
Sujets : 8
Inscription : Jun 2024
Réputation :
4
Ton lien est très bien expliqué je trouve
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 1);
On reprends la variable String(value) du json envoyé et on y ajoute des compléments.
En gros value = value+"ajout";
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)
Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
(22-08-2024, 02:12 PM)Nalexdouze a écrit : Ton lien est très bien expliqué je trouve
sprintf(value, "%s,\"%s\":%d", value, ActifType.c_str(), 1);
On reprends la variable String(value) du json envoyé et on y ajoute des compléments.
En gros value = value+"ajout";
Je suis perdu, je veux juste envoyer "1" ou "0"
Si je comprends bien sprintf permet d'envoyer une "phrase" ou chaine dans lequel on veux mettre des variables différentes, je nage plus je coule
je n'arrive pas à décortiquer le code d'André, j'imagine que c'est simple pour vous mais moi je suis complètement perdu.
ca doit ressembler à quelque chose comme ca :
char etatgpio [1];
sprintf(etatgpio, "%d", digitalRead(14));
je ne comprend pas le " ActifType.c_str(), 1);" ou " ActifType.c_str(), 0);" cela veut dire qu'il est à 1 ou à 0 ?
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
24-08-2024, 07:18 PM
(Modification du message : 24-08-2024, 07:49 PM par Crazybike63.)
j'ai créé ca:
etatgpio = digitalRead (14);
DeviceBin2Discover(etatgpio);
Puis pour l'envoi:
sprintf(value, "%s,\"%s\":%d", value, etatgpio.c_str(), 1);
je teste ....
Et ca marche pas lol
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
Messages : 709
Sujets : 22
Inscription : May 2024
Réputation :
75
sendMQTTDiscoveryMsg_global() {
String monGPIO ="gpio14";
.....
...
DeviceBin2Discover(monGPIO);
}
SendDataToHomeAssistant() {
String monGPIO ="gpio14";
.....
...
int etatgpio = digitalRead (14);
sprintf(value, "%s,\"%s\":%d", value, monGPIO.c_str(), etatgpio);
...
}
Messages : 6
Sujets : 1
Inscription : Aug 2024
Réputation :
0
Bonjour, ca y est ca fontionne !!
Merci à Nalexdouze et F1ATB, grace à vous j'ai pu apprendre et comprendre "sprintf"
Merci beaucoup
Sud 3 KWc 8 X 405Wc RECOM et 2 Hoymiles HM1500
Ouest 1,6 KWc 4 X 425Wc TRINA SOLAR et 2 Hoymiles HM800
4 routeurs (ballon, chauffage atelier, radiateur chambre, SPA)
|