Etat GPIO vers MQTT - 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 : Etat GPIO vers MQTT (/thread-345.html) |
Etat GPIO vers MQTT - Crazybike63 - 21-08-2024 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 RE: Etat GPIO vers MQTT - Nalexdouze - 21-08-2024 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/integrations/binary_sensor/#device-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. RE: Etat GPIO vers MQTT - Crazybike63 - 22-08-2024 (21-08-2024, 03:28 PM)Nalexdouze a écrit : Salut, 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 .... RE: Etat GPIO vers MQTT - F1ATB - 22-08-2024 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); RE: Etat GPIO vers MQTT - Crazybike63 - 22-08-2024 (22-08-2024, 09:31 AM)F1ATB a écrit : Il faut faire comme pour ActifType: 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 RE: Etat GPIO vers MQTT - Nalexdouze - 22-08-2024 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"; RE: Etat GPIO vers MQTT - Crazybike63 - 24-08-2024 (22-08-2024, 02:12 PM)Nalexdouze a écrit : Ton lien est très bien expliqué je trouve 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 ? RE: Etat GPIO vers MQTT - Crazybike63 - 24-08-2024 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 RE: Etat GPIO vers MQTT - F1ATB - 25-08-2024 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); ... } RE: Etat GPIO vers MQTT - Crazybike63 - 04-09-2024 Bonjour, ca y est ca fontionne !! Merci à Nalexdouze et F1ATB, grace à vous j'ai pu apprendre et comprendre "sprintf" Merci beaucoup |