Page 2 sur 2
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 13:42
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)
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 17:05
par Postel_nicolas
Oui je veux bien , merci
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 18:35
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¶m=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¶m=udevice&idx=" + String(DEVICE_IDX2) + "&nvalue=" + stat;
iEnvoiDomoticz(theUrl);
}
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 19:04
par Postel_nicolas
Je te remercie pour le temps que tu ma accordé pour modifié le code
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 (227.41 Kio) Consulté 2120 fois
Et voici le log

- script.jpg (50.23 Kio) Consulté 2120 fois
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 19:33
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

)
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.
Re: Retour d'état carte wemos
Publié : 23 juin 2021, 19:40
par Postel_nicolas
Ok Jieffe je vais ouvrir un nouveau sujet
Encore merci pour le code
