Retour d'état carte wemos

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Jieffe
Messages : 55
Inscription : 27 mars 2021, 20:52

Re: Retour d'état carte wemos

Message par Jieffe »

J'ai corrigé 2-3 petits trucs par-ci par-là. Je te renvoie le code complet corrigé si cela te dit. (J'ai mis un refresh toutes les 5 secondes sur la page Web, comme cela, l'état du relais est actualisé en live quand tu l'actives via Domoticz)
Postel_nicolas
Messages : 17
Inscription : 11 juin 2021, 18:09
Localisation : Eure (27)

Re: Retour d'état carte wemos

Message par Postel_nicolas »

Oui je veux bien , merci
Jieffe
Messages : 55
Inscription : 27 mars 2021, 20:52

Re: Retour d'état carte wemos

Message par Jieffe »

Voilà, voilà ... j'ai mis comme IDX 03 pour le switch, vérifie si c'est correct

Code : Tout sélectionner

// Wifi
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
// Temperature
#include <OneWire.h>
#include <DallasTemperature.h>

// Définition des constantes reseau wifi
#define STASSID nom_du_réseau        // ssid réseau wifi
#define STAPSK  mot_de_passe        // mot de passe wifi 
const char* ssid = STASSID;
const char* password = STAPSK;

WiFiClient wifiClient;

//Adresse Ip/port du serveur domoticz
#define DOMOTICZ_IP "192.168.1.111"
#define DOMOTICZ_PORT 8080

//idx du device virtuel domoticz
#define DEVICE_IDX   02   // température
#define DEVICE_IDX2  03  // switch

// Variables relatives à Domoticz
char *sDomoticzIp = DOMOTICZ_IP;
int iDomoticzPort = DOMOTICZ_PORT;
HTTPClient oDomoticzClient;
String osUrl = ""; //Pour construire l'URL JSON d'envoi des données à domoticz

// ATTRIBUTION PIN et autre AUTRES
const int led = BUILTIN_LED;
const int relayPin = D5;
int celsius;               // variable qui enregistre la température de l'eau
int compteur = 0;          // variable qui met à 0 la valeur compteur
int val;

// SONDE DS18B20,température
OneWire  ds(D4);  // on pin D4 (AVEC RESISTANCE DE 4.7KOHM)
DallasTemperature sensors(&ds);

// Le serveur Web "ecoute" sur le port 80 (port HTTP par défaut)
ESP8266WebServer server(80);

/****************************************************************************/
void handleRoot() {

  //// MESURE DE LA TEMPERATURE
  sensors.requestTemperatures();
  celsius = sensors.getTempCByIndex(0);

  // Lecture de l'état du relais
  val = digitalRead(relayPin);

  // En-tête et titre de la page
  String s = "<!DOCTYPE HTML>";
  s += "<html>";
  s += "<head>";
  s += "<title>MODULE GESTION PISCINE ";
  s += (val) ? "ON" : "OFF"; // Affiche ON ou OFF selon l'état du relais
  s += "</title> ";
  s += "<meta http-equiv='refresh' content='5;url=/'/>";
  s += "<meta charset='UTF-8'>";
  s += "<body style=\"";
  s += "margin:auto; background-color:white; width:100%;\">";
  s += "</head>";
  s += "<h1 style=\"text-align:center; font-size:300%;\">MODULE GESTION PISCINE</h1>\r\n";

  // Bouton ON / OFF
  s += "<br/><br/><div><a style=\"display:block; height:70px; background-color:";
  s += (val) ? "green" : "red"; // La couleur du bouton change selon l'état du relais
  s += "; color:white; text-align:center; padding:20px; margin:20px; font-size:300%; text-decoration: none;\" href=\"http://";
  s += WiFi.localIP().toString();
  s += "/setgpio/";
  s += (val) ? "0" : "1";
  s += "\">Relais pompe piscine</a></div>\r\n";

  s += "<p style=\"margin:20px;\">Température de l'eau : ";
  s += celsius;
  s += " degrés Celcius";
  s += " </p>";
  s += " </br>";
  // Informations de connexion (SSID et force du signal)
  s += "<p style=\"margin:20px;\">Connecté à : ";
  s += ssid;
  s += " - Force du signal : ";
  long rssi = WiFi.RSSI();
  s += rssi;
  s += " dBm</p>";
  s += "</body></html>\n";

  // Envoie de la page (Le code HTTP 200 indique que la requête a été traitée avec succès
  server.send(200, "text/html", s);
}
/****************************************************************************/
void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}
/****************************************************************************/
void setup(void) {

  IPAddress ip(192, 168, 1, 120); // ip fixe
  IPAddress dns(192, 168, 1, 1);  // ip fixe
  IPAddress gateway(192, 168, 1, 1);  // ip fixe
  IPAddress subnet(255, 255, 255, 0); // ip fixe
  WiFi.config(ip, dns, gateway, subnet);
  // Initialisation GPIO led et relais en sorties
  pinMode(led, OUTPUT);
  pinMode(relayPin, OUTPUT);

  digitalWrite(led, HIGH);
  digitalWrite(relayPin, LOW);

  // Initialisation port série à 115 200 bauds
  Serial.begin(115200);

  // Initialisation DS18B20
  sensors.begin();

  // Connection au point d'accès WiFi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Affichage des paramètres de connexion (point d'accès et IP obtenue par DHCP)
  Serial.println("");
  Serial.println("WiFi connected");
  delay(500);
  Serial.println("MODULE PISCINE");
  delay(500);
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // Quand un client se connecte sur l'URL / on appelle la fonction handleRoot()
  server.on("/", handleRoot);
  Serial.print("Connection détectée ");

  // Quand un client se connecte sur l'URL /setgpio/1
  server.on("/setgpio/1", []() {
    digitalWrite(relayPin, HIGH); // Activation de relais
    digitalWrite(led, 1);; // test avec led interne
    handleRoot();                 // appel de la fonction handleRoot()
    Serial.print("RELAIS ON "); Serial.println("");
    sendStatus(val);
  });

  // Quand un client se connecte sur l'URL /setgpio/0
  server.on("/setgpio/0", []() {
    digitalWrite(relayPin, LOW);  // Désactivation de relais
    digitalWrite(led, 0);; // test avec led interne
    handleRoot();                 // appel de la fonction handleRoot()
    Serial.print("RELAIS OFF "); Serial.println("");
    sendStatus(val);
  });

  // Si le client se connecte sur une URL non programmée
  server.onNotFound(handleNotFound);  // appel de la fonction handleNotFound()

  // Démarrage du serveur
  server.begin();
  Serial.println("HTTP server started");
  sendStatus(0);
}
/****************************************************************************/
void loop(void) {
  server.handleClient();  // Attente de la connexion d'un client

  sensors.requestTemperatures();
  celsius = sensors.getTempCByIndex(0);

  Serial.print("  température = ");
  Serial.print(celsius);
  Serial.print(" °C");

  ////////////////////////////////////////////Envoi des données à domoticz
  //construit l'URL d'appel

  osUrl = "/json.htm?type=command&param=udevice&idx=" + String(DEVICE_IDX) + "&nvalue=0&svalue=" + String(celsius);

  //////////////////// Appel domoticz pour mettre a jour le capteur

  if (compteur == 0) {
    int iResCallDomo = iEnvoiDomoticz( osUrl );
  }

  compteur = compteur + 1;

  if (compteur == 120) {
    compteur = 0;
  }
  Serial.print("  Compteur = ");
  Serial.println(compteur);
}

/*====================================================================
    Fonction pour mettre a jour le capteur dans domoticz
   ==================================================================*/
int iEnvoiDomoticz( String osDomoUrl ) {
  oDomoticzClient.begin( wifiClient, sDomoticzIp, iDomoticzPort, osDomoUrl );
  int iHttpCode = oDomoticzClient.GET();
  oDomoticzClient.end();
  return iHttpCode;
}

void sendStatus(int stat) {
  String theUrl = "/json.htm?type=command&param=udevice&idx=" + String(DEVICE_IDX2) + "&nvalue=" + stat;
  iEnvoiDomoticz(theUrl);
}
Postel_nicolas
Messages : 17
Inscription : 11 juin 2021, 18:09
Localisation : Eure (27)

Re: Retour d'état carte wemos

Message par Postel_nicolas »

Je te remercie pour le temps que tu ma accordé pour modifié le code :D

Juste une autre question concernant un script blocky, pour gérer la pompe j'ai fait le script ci dessous par contre je n'arrive pas à le faire fonctionner selon la température de l'eau je veux activer la pompe tant de temps mais j ai l'impression que les "comparaisons" ne fonctionnent pas.

voici le code
script.jpg
script.jpg (227.41 Kio) Consulté 2122 fois
Et voici le log
script.jpg
script.jpg (50.23 Kio) Consulté 2122 fois
Jieffe
Messages : 55
Inscription : 27 mars 2021, 20:52

Re: Retour d'état carte wemos

Message par Jieffe »

J'ai essayé l'un ou l'autre script en Blocky mais sans résultat correct. Je dois avouer que je n'ai pas creusé le sujet.

D'après ce que je vois de ton script, ton log ne devrait pas mentionner les "gestions piscine" inférieures à la température courante (sauf s'il y a un iceberg dans ta piscine et qu'elle est à moins de 3°C pour le moment :lol: )

Maintenant, si c'était moi, je gérerais la température directement depuis le programme du Wemos, éventuellement en ajoutant sur l'interface web la possibilité d'activer la pompe manuellement ou automatiquement.

Je te conseille de re-poser ta question dans un nouveau sujet dans lequel les experts en Blocky pourront mieux t'aider.
Postel_nicolas
Messages : 17
Inscription : 11 juin 2021, 18:09
Localisation : Eure (27)

Re: Retour d'état carte wemos

Message par Postel_nicolas »

Ok Jieffe je vais ouvrir un nouveau sujet

Encore merci pour le code ;)
Répondre