nodemcu modifier variables en wifi

Bonjour,
j'ai un programme qui ouvre et ferme mes volets à heure programmée en prenant l'heure sur un serveur ntp.
il tourne sur un nodeMCU esp12e
ca marche
je voudrais depuis un autre nodemcu modifier des variables pour par exemple
changer l'heure d'ouverture ou de fermeture, passer de manuel en automatique ou inversement...
j'ai lu 40.000 post domotique et autre, je ne voudrais pas mettre un rasberry pi, je ne voudrais pas non plus utiliser une solution comme domoticz ou jeedom car mon programme est autonome, mais je veux juste pouvoir modifier ses variables
Comment puis-je faire simplement s'il vous plait ?
voici juste pour info mon programme dont je voudrais modifier les variables à distance
je voudrais par exemple modifier heureMonte, minuteMonte,heureBaisse,minuteBaisse et un boolen modeAuto;
Attention : je cherche des solutions simples car je suis un vieux débutant :confused:
merci à vous

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

#define NB_TRYWIFI        10    // Nbr de tentatives de connexion au réseau WiFi - Number of try to connect to WiFi network

const char* ssid = "maBox";
const char* password = "monMotDePasse";

int pinMonte =13, pinBaisse= 12;//correspond à D7 en montée et D6 en descente
int heureMonte=12, minuteMonte=28,heureBaisse=12,minuteBaisse=30;

WiFiClient espClient;
WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 7200, 60000);//france heure d'été
//NTPClient timeClient(ntpUDP, "fr.pool.ntp.org", 0, 60000);

void setup() {
   pinMode(pinMonte, OUTPUT);      // met la broche numérique en sortie
    pinMode(pinBaisse, OUTPUT);      // met la broche numérique en sortie
    digitalWrite(pinMonte,HIGH);//obligé car hors tension il est en HIGH
    digitalWrite(pinBaisse,HIGH);//obligé car hors tension il est en HIGH

  Serial.begin(9600);
  Serial.println("");
  Serial.print("Startup reason:");Serial.println(ESP.getResetReason());

  WiFi.begin(ssid, password);

  Serial.println("Connecting to WiFi.");
  int _try = 0;
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print("..");
    delay(500);
    _try++;
    if ( _try >= NB_TRYWIFI ) {
        Serial.println("Impossible to connect WiFi network, go to deep sleep");
        ESP.deepSleep(10e6);
    }
  }
  Serial.println("Connected to the WiFi network");
  
  // Démarrage du client NTP - Start NTP client
  timeClient.begin();
}

void loop() {
    // Met à jour l'heure toutes les 10 secondes - update time every 10 secondes
    timeClient.update();
    if(timeClient.getSeconds()==00)
    {
      Serial.println(timeClient.getFormattedTime());
      if(WiFi.status() != WL_CONNECTED) {
    Serial.print("..");
      }
    }

    //Serial.print(timeClient.getHours());

  // la date sur la deuxième ligne du LCD
    //************************************
    //alarme
    if((timeClient.getMinutes()==minuteMonte) && (timeClient.getHours()==heureMonte))
        {
         monte();
        }
    else if((timeClient.getMinutes()==minuteBaisse) && (timeClient.getHours()==heureBaisse))
{   
  baisse();
}
    else
    {
      repos();
      }
}
//******************************** fonctions commande
void monte()
{
  Serial.println("Monte ");
        digitalWrite(pinMonte,LOW);//obligé car hors tension il est en HIGH
        digitalWrite(pinBaisse,HIGH);
  }
void baisse()
 {
    Serial.println("Baisse ");
    digitalWrite(pinMonte,HIGH); 
    digitalWrite(pinBaisse,LOW);//obligé car hors tension il est en HIGH
    }
    void repos()
 {
    Serial.println ("repos");
      digitalWrite(pinMonte,HIGH);//obligé car hors tension il est en HIGH
      digitalWrite(pinBaisse,HIGH);//obligé car hors tension il est en HIGH
    }

Bonjour

je voudrais depuis un autre nodemcu modifier des variables pour par exemple
changer l'heure d'ouverture ou de fermeture, passer de manuel en automatique ou inversement..

Pourquoi faire cela à partir d'une seconde carte NodeMCU ?

il parait possible d'ajouter au programme actuel (client NTP) un serveur HTTP qui proposerait une page permettant de modifier les paramètres à partir de tout navigateur, à distance, sans seconde carte NodeMCU
L'exemple HelloServer (groupe ESP8266WebServer) est simple.

Bonjour,

merci Al1fch, tu as probablement raison je vais regarder ca...

je n'avais pas envisagé cette solution car je ne maîtrise pas le HTML et il me faudra mettre plein de boutons interactifs et gérer la mise en page...

je suis allé voir l'exemple que tu cite HelloServer, merci.
je vais chercher des exemples avec plusieurs boutons.
je verrai ca dans 1 semaine car pour l'instant je suis en camping et je n'ai pas mon matériel avec moi (je voulais avancer sur la réflexion pour me jeter dessus en rentrant à la maison)...
LuckyMaxou

Vous pouvez jetez un oeil sur mon petit tuto Exemple d'usage du shield Ethernet pour faire un serveur interactif qui montre comment avoir des boutons sur une page web qui interagissent avec l'application sur l'Arduino. Le principe est similaire si vous êtes en Wi-Fi

Bonjour,
merci J-M-L, je viens de le parcourir, ca me semble être un super tuto et ca répond bien à ma demande et à la suggestion de al1fch
merci à vous 2

bonjour,
je viens de repenser à mon problème,
j'ai 6 volets à commander, donc 6 esp8266
générer une page html avec un esp ok, mais comment gérer 6 nodeMCU qui auront (je suppose chacun leur adresse IP)
merci
LuckyMaxou

Bonjour
chaque carte ('Station' WiFi) connectée au réseau local se verra attribuer par la box une adresse IP
cette adresse IP individuelle sera indiquée au navigateur pour obtenir la page web de la carte NodeMCU ciblée

Bonjour,
merci al1fch, mais comment faire pour que mes 6 cartes s'affichent sur la même page ?
supposons que j'aie 1 bouton monte et 1 bouton baisse sur la carte 192.168.01 et les mêmes sur la 192.168.02, je voudrais pouvoir à l'heure programmée
monter 1
monter 2
monter les 2
etc...
merci

Bien définir COMPLETEMENT le projet
Participer à un fil de discussion sinueux avec des données mouvantes n'est pas très motivant !!
je suis tenté d'attendre que les choses se stabilisent avant de poursuivre :wink:

Il y a plusieurs solutions

  • Vous rajoutez un arduino maître qui est celui qui offre l’interface et qui parle aux autres de manière invisible

  • Vous utilisez Ajax pour remonter les infos des différents éléments dans une page web (aggrégation de requêtes vers différents hôtes) et les boutons envoient des requêtes vers différentes url

Etc

Mais,oui écrivez un cahier des charges..

Bonjour Vous 2,
oui je suis d'accord avec vous sur le fait que répondre à des questions sur un projet non élaboré n'est pas motivant.
mettre un arduino maitre était ma seule et unique question sur mon premier post de ce sujet, ayant eu comme suggestion (tout à fait pertinente, et encore merci à vous) de faire une page html, je me suis mis à y réfléchir et découvert les problèmes générés liés à mon inexpérience, mais si vous relisez mon post, ma demande était bien claire avec un esp8266 maitre et 6 clients...
Bonne journée
LuckyMaxou

luckymaxou:
Bonjour Vous 2,
mais si vous relisez mon post, ma demande était bien claire avec un esp8266 maitre et 6 clients...

effectivement.

mais le maître peut peindre la page HTML qui embarque des URLs vers les clients ou le maître peut aggréger les infos des clients et peindre la page complète. les 2 sont possibles, à vous de décider ce qui vous tente le plus.

S'il s'agit bien de piloter 6 cartes NodeMCU à partir d'un appareil central la réalisation récente de *lesept * 'simulateur de présence' donnera peut être des pistes complémentaires

Bonjour,

Mon petit grain de sel pour compléter ce qui vous a déjà été répondu.

L'important est effectivement que vous définissiez vraiment ce que vous voulez faire, même si vous ne savez pas le faire pour l'instant. Cela va déterminer l'architecture de votre système.

J'ai procédé un peu comme vous et adopté une architecture essentiellement décentralisée :

  • chaque noeud, par ex. un contrôleur de volets roulant, est indépendant. Il a son propre serveur HTTP /HTML qui permet de le commander et de le programmer,
  • ensuite, j'ai rajouté un "tableau de bord" qui interroge chacun des noeuds et présente toutes les informations essentielles sur une seule page d'où on peut accéder par des liens vers les noeuds pour les commander,
  • il y a aussi quelques cas où des noeuds demandent des informations à d'autres (architecture "pull").

Cela ressemble beaucoup à ce que vous a proposé J-M-L. Aujourd'hui j'ai une petite vingtaine de noeuds (10 volets) et le tableau de bord enregistre également toutes les données dans un fichier de son SPIFFS d'où je peux le récupérer grâce à un serveur FTP.
Tout est implémenté sur des ESP8266 dont la puissance est vraiment étonnante compte tenu de leur coût. Ils sont également parfaitement stables.

L'avantage que je vois à cette démarche, c'est que vous pouvez progresser à votre rythme, en commençant par des choses simples, qui sont tout de suite opérationnelles. Ensuite, il n'y a pas de dépendance d'un serveur central. Sans le tableau de bord, tout continue de fonctionner, mais il faut se connecter directement sur chacun des noeuds.

Le point faible de mon système est le manque de standardisation des messages entre les noeuds. J'ai fait avec des petits messages TCP. C'est simple et ça marche bien, mais à refaire aujourd'hui, j'aurais sans doute habillé les messages avec du JSON, du XML ou du MQTT...

Dernier point, cela m'a pris 3 ans et il y a encore quelques petites choses à rajouter...

Bonne bidouille

MicroQuettas

merci beaucoup à vous 3 pour votre aide et vos suggestions
j'ai beaucoup de travail en perspective et beaucoup à apprendre, je vais regarder tout ca (le simulateur de présence m'a l'air très pédagogique)
à bientôt
LuckyMaxou

Bonjour
Je travaille actuellement sur une nouvelle version du simulateur qui se base sur la bibliothèque 'painless mesh' pour l'organisation du réseau et l'échange d'information entre chaque nœud. Elle est très facile de prise en main, pour peu qu'on fasse l'effort de lire la documentation sur le wiki.
Je te la conseille.

Bonjour,
Merci "lesept" pour ta suggestion, je suis allé voir, j'ai téléchargé la bibliothèque et vu les exemples.
je ne vais pas l'utiliser car pour l'instant pas assez de support, tutos et aide sur painless mesh pour le vieux débutant que je suis.
Par contre comme je l'ai déjà écrit, ton post "simulation de présence est très ben écrit et très pédagogique, je vais (dans quelques jours quand je serai rentré de vacances) le lancer et jouer avec pour essayer de l'adapter à mon utilisation avec des NodeMCU au lieu des prises sonoff

Bonjour à tous,
je ne m'en sors pas tout cela est trop lourd à ingurgiter pour le débutant que je suis, je vais donc me débrouiller avec un programme basique (juste ajouter des variables modifiables à distance sur mon programme existant qui est plus haut.
je me permet de vous reposer un peu la même question :
si l'ip de mon client est 192.168.0.01 et que je veuille mettre à jour la variable

int heureMonte=12

quelle commande html dois-je envoyer et coté client (donc mon programme qui est en tête de sujet) comment puis je traiter la réponse pour que la variable soir mise à jour ?

sinon, al1fch demandait quel était le cahier des charges, au départ c'était ca :

6 esp8266 (nodemcu qui commandent des relais)
autonomes à 100%
pour chacun l'heure mise à jour chaque minute (via serveur ntp)
par défaut ils sont en manuel et peuvent fonctionner même s'ils ne reçoivent aucune commande (c'est ca mon intérêt)
Ce que je dois ajouter à mon programme c'est la mise à jour des variables à distance

les variables à mettre à jour à distance pour chacune sont :
boolean auto (montée programmée ou manuelle)
int etat (j'ai 4 états monte,arretUp,baisse, arretDown)

int heureMontee
minuteMontee
heureDescente
minuteDescente

mais je vais simplifier car sinon je n'y arriverai pas.
il vaut mieux un petit programme que je suis capable de faire qu'un gros que je ne sais pas faire, il ne sera pas interdit d'améliorer quand mes connaissances seront améliorées

Dans le tuto de J-M-L je pense que j'ai compris la syntaxe de commande
http://192.168.1.29/W=5 deviendrait dans mon cas http://192.168.0.01/heureMontee=5 (je ne voudrais pas incrémenter ou decrémenter mais remplacer la valeur en stock.
et pour ce qui est du traitement client pour que la variable soit mise à jour, j'avoue ne pas avoir tout compris
Merci de votre patience

Tu peux faire comme ça

http:///hm=5&mm=25&hd=12&md=35

Tu recevras un String dans ton code contenant "hm=5&mm=25&hd=12&md=35" qu'il faudra décoder pour en extraire les valeurs

[quote author=lesept

Tu recevras un String dans ton code contenant "hm=5&mm=25&hd=12&md=35" qu'il faudra décoder pour en extraire les valeurs
[/quote]
Merci "lesept", comme je l'ai écrit je pensais bien avoir compris l'envoi mais la réception je ne sais pas comment l'attendre, la recevoir et la traiter...
Je crois vraiment que je suis nul !