Script BOX temperature


#1

Objectif :
sur son Dashboard, avoir une box qui affiche la température.

Source :
extérieure à la machine Gladys, mais sur le même réseau
provenant d’un NodeMCU + DHT11
autoalimenté par une 18650

une photo pour commencer :

code du script Gladys :

var box = {
	"uuid": "b94ccd88-0f46-11e8-b642-0ed5f89f718b",
	"title": "Temperature",
	"ngcontroller": "",
	"html": "<!--Temperature --><div id=\"Temperature\" style=\"width: 100%\"><object type=\"text/html\" data=\"http://192.168.1.32/temp\"></object></div>",
	"icon": "fa fa-thermometer-empty",
	"type": "box box-solid bg-green-gradient",
	"view": "dashboard"
}
gladys.boxType.create(box);

résultat :

box temperature


Humidité et temperature DHT22
#2

Salut @clopance !

Pas mal ton projet !
Juste pour te prévenir, le système de box va changer avec la prochaine mise à jour !
Je suis en train de rédiger un bon gros tuto sur comment créer une box pour expliquer comment ça va fonctionner dorénavant ^^

Donc un peu de patience :slight_smile:

Et pour ta box je viens tout juste d’en faire une qui affiche les courbes des devices

image

Je sais pas si ça te plaira mais au moins j’te prévient histoire de ne pas faire deux fois le même boulot ^^


#3

Merci c cool

pour la courbe il faudrait que mon NodeMcu fasse partie des Devices, et ça je ne sais pas…


#4

Pourquoi ? C’est que tu ne sait pas comment faire ou que tu ne veux pas ?


#5

oui pardon,
je ne sais pas faire,
tu m’arretes si je me trompe,
pour l’instant il n’y a pas de rapport entre ma box qui fait une requete vers un equiement reseau et les Devices Galdys,
hormis la présence de mon équipement réseau dans la liste des Devices (trouvé pas le module NetworkScanner) :


#6

D’accord je comprend mieux !

Alors c’est très simple:

  1. Tu crée un device qui correspond à ton capteur avec comme service HTTP (il est factice c’est juste pour lui en donner un)

  2. Dans ce device tu crée un sensor avec comme min -30, comme max 50 (par exemple) et comme unité °C

  3. Tu récupère l’ID du deviceType que tu le colle dans la requête que ton NodeMCU va effectuer (toutes les heures ou toutes les minutes)

La requête à faire c’est celle-ci et si tu veux plus de détails il y a un article sur le blog qui en parle ^^

Et après dans la box il te suffira de sélectionner ton capteur dans la liste déroulante pour voir les données :slight_smile:

image


#7

ok…
va falloir que je modifie le code dans mon NodeMCU alors.
pour qu’il envoie des requetes vers Gladys.
je vais faire qques essais,

merci bcp


#8

Sympa la box de courbes, ça va me servir pour mes capteurs Flower Care :yum: :+1:


#9

Sympa effectivement ! J’attend ton tutoriel avec impatience que je puisse revoir ma box Netatmo !


#10

Il sera dispo sûrement dans le courant du week-end ^^


#11

C’est nôté :stuck_out_tongue:


#12

Bonjour clopance;

Ayant quelques sonde de température avec un ESP8266 sur wemos; je souhaiterais savoir si tu avais réussi à récupérer tout ça dans gladys avec la version 3.8.0.

Merci d’avance de ton retour;
Cordialement.


#13

Bonjour,
justement je l’ai resorti cet aprem,
mais toujours pas.
j’ai mis un code dans le NODEMCU qui se connecte au wifi, et doit envoyer temperauture + humidité à Gladys.
un DHT11 branché sur le NODEMCU.

en suivant cette page + ce que je trouvais sur le forum.
j’attends tjs le tuto de MathieuA aussi

mon code :
/*
Gladys
Web client sending temperature and humidity from DHT11 to Gladys
*/

#include <SPI.h>
#include <ESP8266WiFi.h>
#include "WString.h"
#include <DHT.h>

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);


// Sleep time between requests in seconds
// ( here 20 * 60 = 1200 seconds = 20 minutes )
#define SLEEP_TIME 1200


// Host of your Raspberry Pi hosting Gladys
String host = "Host: 192.168.1.32";
IPAddress server(192,168,1,61);  // numeric IP

// Set the static IP address to use
const char* ssid = "Your_SSID";
const char* password = "Your_SSID_Password"; 

// Your request
//String requestTemperature = "POST /devicestate?devicetype=ID_DE_VOTRE_DEVICETYPE_TEMPERATURE&value=%VALUE&token=VOTRE_TOKEN HTTP/1.1";
//String requestHumidity = "POST /devicestate/?devicetype=ID_DE_VOTRE_DEVICETYPE_HUMIDITE&value=%VALUE&token=VOTRE_TOKEN HTTP/1.1";
String requestTemperature = "POST /devicestate?devicetype=3&value=%VALUE&token=VOTRE_TOKEN HTTP/1.1";
String requestHumidity = "POST /devicestate/?devicetype=4&value=%VALUE&token=VOTRE_TOKEN HTTP/1.1";

// Initialize the WiFi client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);

  // start the Wifi connection:
    WiFi.begin(ssid, password);
  
  // Check WiFi connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
}

void loop() {
  
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();
  
    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h)) {
      Serial.println("Failed to read from DHT");
    } else {

 
  
    Serial.println("connecting...");
     // if you get a connection, report back via serial:
    if (client.connect(server, 1337)) {
      Serial.println("connected");
      // Make a HTTP request:
      
      String temperature = String(t, 0);
      String humidity = String(h, 0);
      
      // replacing URL with the value
      requestTemperature.replace("%VALUE", temperature);
      requestHumidity.replace("%VALUE", humidity);
      
      Serial.println(requestTemperature);
      Serial.println(requestHumidity);
      
      client.println(requestTemperature);
      client.println(host);
      client.println("Connection: close");
      client.println();
      
      client.println(requestHumidity);
      client.println(host);
      client.println("Connection: close");
      client.println();
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    } else {
      // if you didn't get a connection to the server:
      Serial.println("connection failed");
    }
  
    delay(SLEEP_TIME*1000);
    
   }
  

 
}

#14

Un tuto ? Lequel ? J’ai du oublié :scream:
D’ailleurs tu as de la chance que je scrute le forum car tu m’as pas vraiment tagué ahah

Edit: @clopance fait attention il y avait quelques infos sensible dans ton code Arduino ^^


#15

oups merci j’ai été trop vite :cold_sweat:


#16

Pas de soucis ^^
Excuse moi d’insister mais du coup tu parlais de quel tuto ? :slight_smile:


#17

dans l’historique de ce post, toi tu ne spécifiais pas que tu sortirai un tuto, c’est @spenceur qui l’attendais.

si jamais je réussissais à récupérer cette température, j’en ferai peut-être un tuto, bien carré, avec un DHT22,
données visibles sur une box, avec tes courbes… ce serait chouette :wink:


#18

Aaaaaahhh tu parle du tuto pour crée une box ! Il est déjà fait celui-ci !

Je serais ravi de t’aider si besoin :smile:


#19

Bonjour,

j’ai un dht 22 que je souhaite connecter a un nocemcu esp8266 pour afficher la temperature et l’humidité dans Gladys.
J’utilise deja un mcu pour contrôler des relais (donc envoyer des commandes) mais par contre je n’arrive pas a le programmer pour recevoir des donnée exploitables par Gladys. J’ai tenté le code de @clopance mais je suis complètement bloqué… et mes recherches sur le forums n’ont pas données grand chose…
@MathieuA le pro de l’arduino si tu peut m’éclaircir sur le sujet… ?

Merci!


#20

Salut @alexis

Je passe par là vite fait pour te répondre :slight_smile:

Reprend les étapes cités plus haut, à savoir

  1. Tu crée un device qui correspond à ton capteur avec comme service HTTP (il est factice c’est juste pour lui en donner un)

  2. Dans ce device tu crée un sensor avec comme min -30, comme max 50 (par exemple) et comme unité °C

  3. Tu récupère l’ID du deviceType que tu le colle dans la requête que ton NodeMCU va effectuer (toutes les heures ou toutes les minutes)

Et ensuite injecte ce code dans ton ESP

#include <ESP8266WiFi.h>
#include <DHT.h>

const char* ssid = ""; // Your SSID 
const char* password = ""; // Tour wifi password

#define DHTPIN 2 // Pin of DHT sensor
#define DHTTYPE DHT11   // Type of your DHT sensor, by default DHT11
DHT dht(DHTPIN, DHTTYPE);

String requestTemperature = "GET /devicestate/create?token=YOUR_TOKEN&devicetype=YOUR_TEMPERATRUE_DEVICETYPE_ID&value=%VALUE";
String requestHumidity = "GET /devicestate/create?token=YOUR_TOKEN&devicetype=YOUR_HUMIDITY_DEVICETYPE_ID&value=%VALUE";

// Create an instance of the server
// Specify the port to listen on as an argument
WiFiServer server(4200);

void setup() {
  Serial.begin(115200);
  delay(10);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  temperature();
  humidity();
  delay(10000);
}

void temperature(){ 
  
    float t = dht.readTemperature();
  // Check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t)) {
    Serial.println("Failed to read from DHT");
  } 
  else {
    Serial.println("connecting...");
    // If you get a connection, report back via serial:
    if (client.connect(server, 80)) {
      Serial.println("connected");
      // Make a HTTP request:

      String temperature = String(t, 0);

      // Replacing URL with the value
      requestTemperature.replace("%VALUE", temperature);

      Serial.println(requestTemperature);

      client.println(requestTemperature);
      client.println(host);
      client.println("Connection: close");
      client.println();

      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    } 
    
    else {
      // If you didn't get a connection to the server:
      Serial.println("connection failed");
    }
    delay(1000);
  }
}

void humidity () {
  
    float h = dht.readHumidity();
      if (isnan(h)) {
    Serial.println("Failed to read from DHT");
  } 
  
  else {
    Serial.println("connecting...");
    // If you get a connection, report back via serial:
    if (client.connect(server, 80)) {
      Serial.println("connected");
      // Make a HTTP request:

      String humidity = String(h, 0);

      // Replacing URL with the value
      requestHumidity.replace("%VALUE", humidity);

      Serial.println(requestHumidity);

      client.println(requestHumidity);
      client.println(host);
      client.println("Connection: close");
      client.println();
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
    } 
    
    else {
      // If you didn't get a connection to the server:
      Serial.println("connection failed");
    }

    delay(1000);

  }
}

En prenant soin de bien remplir les paramètres avec les tiens =>

const char* ssid = ""; // Your SSID 
const char* password = ""; // Tour wifi password

#define DHTPIN 2 // Pin of DHT sensor
#define DHTTYPE DHT11   // Type of your DHT sensor, by default DHT11

L’ssid de ta box réseau, ta clé wifi, le pin sur lequel est branché ton capteur ainsi que le type de DHT que tu utilise.

String requestTemperature = "GET /devicestate/create?token=YOUR_TOKEN&devicetype=YOUR_TEMPERATRUE_DEVICETYPE_ID&value=%VALUE";
String requestHumidity = "GET /devicestate/create?token=YOUR_TOKEN&devicetype=YOUR_HUMIDITY_DEVICETYPE_ID&value=%VALUE";

Ici aussi n’oublie pas de remplacer par tes valeurs à toi, à savoir le YOUR_TOKEN par le tiens et les les YOUR_TEMPERATRUE_DEVICETYPE_ID et YOUR_HUMIDITY_DEVICETYPE_ID.

Ce code est très simple donc tu ne devrais pas avoir de mal à le comprendre (surtout que tu en as fait des plus compliqué ^^) mais au cas ou n’hésite pas ! Il n’est pas très optimisé non plus mais tant que tu n’as rien d’autre sur ton ESP et qu’il n’est pas sur batterie ça fonctionnera très bien ! :slightly_smiling_face: