Envoyer une page au client sur serveur web lors d' un changement d' etat de pin

Bonjour,

J ‘ aimerais faire en sorte que la page web de mon code soit envoyée au(x) client(s) connecté(s) dans le cas où un changement d ‘ état de pin intervient au cours de l’ utilisation de l’ arduino qui n’ a pas été demandé par un client .

Une idée de comment établir la chose ?

par exemple je gere des relais pour mon arrosage de façon automatisé avec le code joint , et donc quand l ‘ arrosage est terminé , j ‘ aimerais que la page se mette à jour sur mon téléphone qui reste connecté au serveur web de l’ arudino avec firefox .

serveur_machine_etats_7_378_DEV_TEST_retour_page_web.zip (20.5 KB)

Est ce que si je transforme cette fonction :

void desactiverUnArrosageAsync(t_commandID pin) {
for (uint8_t a = 0; a < NOMBREDARROSAGE; a++) {
if (lesArrosages[a].pinRelais == pin) {
if (lesArrosages[a].etat != INACTIF) {
if (!TEST) digitalWrite(lesArrosages[a].pinRelais, RELAIS_INACTIF);
lesArrosages[a].etat = INACTIF;
if (gestionnaireDeTache.findAsyncCommand(pin)) gestionnaireDeTache.unregisterAsyncCommand(pin);


  }
}
break;

}
}

en :

void desactiverUnArrosageAsync(t_commandID pin) {
for (uint8_t a = 0; a < NOMBREDARROSAGE; a++) {
if (lesArrosages[a].pinRelais == pin) {
if (lesArrosages[a].etat != INACTIF) {
if (!TEST) digitalWrite(lesArrosages[a].pinRelais, RELAIS_INACTIF);
lesArrosages[a].etat = INACTIF;
if (gestionnaireDeTache.findAsyncCommand(pin)) gestionnaireDeTache.unregisterAsyncCommand(pin);

    EthernetClient client = webServer.available();  // listen for incoming clients  
    if (client) sendHTTPResponse(client);
  }
}
break;

}
}

chaque fois que le callback sera appelé a la fin du temps d ‘ arrosage , la page se mettra à jour sur le client ?

Le plus simple c'est que la page utilise javascript pour demander s'il y a une mise à jour à faire toutes le secondes par exemple. Vous utilisez AJAX en modifiant le DOM (le description de la page HTML pour accéder directement à des éléments), comme cela la page ne va pas clignoter.

Sinon ça peut être par websockets si vous voulez que ce soit le serveur qui envoie les infos.

De mémoire vous êtes sur une MEGA avec un shield ethernet, c'est ça ? donc l'approche AJAX sera la plus simple

Bonjour .

Oui , c’ est bien cela.

je prefererais que le serveur envoie les infos uniquement quand c’ est nécéssaire , plutot qu ‘ une actualisation “ constante “.

Sur ESP32 c’est facile parce qu’il y a les bibliothèques adaptées… sur mega il va falloir coder pas mal de trucs à la main…. Pas simple

ça ne peut pas ffaire l’ affaire ? ça : GitHub - u0078867/Arduino-Websocket-Fast: Websocket client for Arduino, with fast data send · GitHub

ou encore ça : GitHub - gilmaimon/ArduinoWebsockets: A library for writing modern websockets applications with Arduino (ESP8266 and ESP32) · GitHub ?

Vous pouvez essayer le premier puisqu’ils parlent de UNO mais je n’ai pas regardé quel type de lien reseau ils attendent . Le second semble pour ESP