récupérer fichier Json sous esp8266 et l’exploiter

Vos échanges, bricolages, idées et questions concernant l'ESP8266, les NodeMCU,Weemos, et consort
marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

Bonjour,

je vous explique mon projet, j'ai un esp8266 (wemos D1 mini) qui est connecté sur le wifi de mon voisin, pour l'hygrométrie du sol et et un relais pour alimenter une pompe tout ça est en solaire et hors réseau et mon voisin n'a pas de DNS,
je souhaiterai récupérer la valeur d'un interrupteur de domoticz (fichier json) et si l'interrupteur est sur on lancer la pompe
j'arrive à envoyer les valeurs de l'hygrométrie par commande http/json à mon domoticz, mais je bloque un peu sur la partie récupérer et exploiter un fichier json,

je teste déjà sur la page de la librairie ArduinoJson et j'adapte la version qui fonctionne sur arduino et en ethernet, je vous transmet où j'en suis et si vous pouvez m'aider ou du moins me débloquer un peu.
merci

Mon code

Code : Tout sélectionner

   #include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>



unsigned long delayTime;


const char* ssid     = "Livebox-92";
const char* password = "00000000000000000";
const char* host = "arduinojson.org";
const char* url = "/example.json";

const int  port2 = 9982;
const uint16_t port = 80;
const int   watchdog = 30000; // Fréquence d'envoi des données à Domoticz - Frequency of sending data to Domoticz
unsigned long previousMillis = millis(); 

ESP8266WebServer server ( 80 );
HTTPClient http;


void setup() {
  
  Serial.begin(115200);

 
  
  Serial.setDebugOutput(true);  
  Serial.println("Connecting Wifi...");

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  
  
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.print(WiFi.localIP()); 
  
 WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }
  
  
    Serial.println("passage ok");
  


  // Check HTTP status

  
        http.begin(host,port,url);
      int httpCode = http.GET();
      if (httpCode) {
        if (httpCode == 200) {
          String client = http.getString();
          Serial.println(client);
        }
      }
  
    // Send HTTP request
  client.println(F("GET /example.json HTTP/1.0"));
  client.println(F("Host: arduinojson.org"));
  client.println(F("Connection: close"));
  if (client.println() == 0) {
    Serial.println(F("Failed to send request"));
    return;
  }

  
    // Skip HTTP headers
  char endOfHeaders[] = "\r\n\r\n";
  if (!client.find(endOfHeaders)) {
    Serial.println(F("Invalid response"));
    return;
  }
  


  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
  DynamicJsonDocument doc(capacity);

  // Parse JSON object
  DeserializationError error = deserializeJson(doc, client);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }

  // Extract values
  JsonObject root = doc.as<JsonObject>();
  Serial.println(F("Response:"));
  Serial.println(root["sensor"].as<char*>());
  Serial.println(root["time"].as<char*>());
  Serial.println(root["data"][0].as<char*>());
  Serial.println(root["data"][1].as<char*>());

  // Disconnect
  client.stop();
  
  
}

int value = 0;

void loop() {
 
}

mon retour

Code : Tout sélectionner

Connecting Wifi...
scandone
f 0, scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 11
cnt 

connected with Livebox-92, channel 6
dhcp client start...
.ip:192.168.1.44,mask:255.255.255.0,gw:192.168.1.1
.
WiFi connected
IP address: 
192.168.1.44passage ok
{
  "sensor": "gps",
  "time": 1351824120,
  "data": [
    48.756080,
    2.302038
  ]
}
Failed to send request
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

Bonsoir,

j'ai un peu avancé, j'arrive à récupérer les valeurs du site d'exemple

Code : Tout sélectionner

#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>



unsigned long delayTime;


const char* ssid     = "Livebox-E";
const char* password = "4C80";
const char* host = "arduinojson.org";
const char* url = "/example.json";

const int  port2 = 9982;
const uint16_t port = 80;
const int   watchdog = 30000; // Fréquence d'envoi des données à Domoticz - Frequency of sending data to Domoticz
unsigned long previousMillis = millis(); 

ESP8266WebServer server ( 80 );
HTTPClient http;


void setup() {
  
  Serial.begin(115200);

 
  
  Serial.setDebugOutput(true);  
  Serial.println("Connecting Wifi...");

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  
  
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.print(WiFi.localIP()); 
  
 WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }
  
  
    Serial.println("passage ok");
  


  // Check HTTP status

  
        http.begin(host,port,url);
      int httpCode = http.GET();
      if (httpCode) {
        if (httpCode == 200) {
          String client = http.getString();
          
        }
      }
  
    // Send HTTP request
  client.println(F("GET /example.json HTTP/1.0"));
  client.println(F("Host: arduinojson.org"));
  client.println(F("Connection: close"));
  if (client.println() == 0) {
    Serial.println(F("Failed to send request"));
    return;
  }

      Serial.println("passage ok");
    // Skip HTTP headers
  char endOfHeaders[] = "\r\n\r\n";
  if (!client.find(endOfHeaders)) {
    Serial.println(F("Invalid response"));
    return;
  }
  
    Serial.println("passage ok");

  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
  DynamicJsonDocument doc(capacity);

  // Parse JSON object
  DeserializationError error = deserializeJson(doc, client);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }

  // Extract values
  JsonObject root = doc.as<JsonObject>();
  Serial.println(F("Response:"));
  Serial.println(root["sensor"].as<char*>());
  Serial.println(root["time"].as<long>());
  JsonArray data = root["data"];
  Serial.println(root["data"][0].as<float>());
  Serial.println(root["data"][1].as<float>());


const char* sensor = root["sensor"];
long time = root["time"];
JsonArray date = root["data"];
float lon = date[0];
float lat = date[1];

Serial.println(sensor);
Serial.println(time);
Serial.println(lat);
Serial.println(lon);

  // Disconnect
  client.stop();
  
  
}

int value = 0;

void loop() {
 
}

Code : Tout sélectionner

Connecting Wifi...
scandone
f 0, scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 7
cnt 

connected with Livebox-EFC0, channel 1
dhcp client start...
.ip:192.168.1.36,mask:255.255.255.0,gw:192.168.1.1
.
WiFi connected
IP address: 
192.168.1.36passage ok
passage ok
passage ok
Response:
gps
1351824120
48.76
2.30
gps
1351824120
2.30
48.76
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

voici mon code pour ma connection à domoticz en json, mais impossible à récupérer quoi que ce soit, je me doute que j'ai pas le bon the capacity et aussi la gestion des résultats de la page json.

Code : Tout sélectionner

#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>



unsigned long delayTime;


const char* ssid     = "Livebox-E";
const char* password = "4C0";
const char* host = "marsflow2.myasustor.com";
const char* url = "/json.htm?type=devices&rid=999";

const int  port2 = 9982;
const uint16_t port = 9982;
const int   watchdog = 30000; // Fréquence d'envoi des données à Domoticz - Frequency of sending data to Domoticz
unsigned long previousMillis = millis(); 

ESP8266WebServer server ( 80 );
HTTPClient http;


void setup() {
  
  Serial.begin(115200);

 
  
  Serial.setDebugOutput(true);  
  Serial.println("Connecting Wifi...");

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  
  
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.print(WiFi.localIP()); 
  
 WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }
  
  
    Serial.println("passage ok");
  


  // Check HTTP status

  
        http.begin(host,port,url);
      int httpCode = http.GET();
      if (httpCode) {
        if (httpCode == 200) {
          String client = http.getString();
          
        }
      }
  
    // Send HTTP request
  client.println(F("GET /json.htm?type=devices&rid=999 HTTP/1.0"));
  client.println(F("Host: marsflow2.myasustor.com"));
  client.println(F("Connection: close"));
  if (client.println() == 0) {
    Serial.println(F("Failed to send request"));
    return;
  }

      Serial.println("passage ok");
    // Skip HTTP headers
  char endOfHeaders[] = "\r\n\r\n";
  if (!client.find(endOfHeaders)) {
    Serial.println(F("Invalid response"));
    return;
  }
  
    Serial.println("passage ok");

  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = 2*JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(16) + JSON_OBJECT_SIZE(33) + 1657;
  DynamicJsonDocument doc(capacity);


  // Extract values
  JsonObject root = doc.as<JsonObject>();
  Serial.println(F("Response:"));
  Serial.println(root["Sunset"].as<char*>());
  Serial.println(root["idx"].as<char*>());
  Serial.println(root["Voltage"].as<char*>());
  
JsonArray resulte = root["result"];
long  Data = resulte[8];
const char* Sunset = root["Sunset"];
long idx = root["idx"];


Serial.println(Data);
Serial.println(Sunset);






  // Disconnect
  client.stop();
  
  
}

int value = 0;

void loop() {
 
}

Code : Tout sélectionner

Connecting Wifi...
scandone
f 0, scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 7
cnt 
..
connected with Livebox-EFC0, channel 1
dhcp client start...
.ip:192.168.1.36,mask:255.255.255.0,gw:192.168.1.1
.
WiFi connected
IP address: 
192.168.1.36passage ok
passage ok
passage ok
Response:



0

Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

Neutrino
Messages : 1564
Enregistré le : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)
Contact :

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par Neutrino »

Bonjour,

Mes compétences en C++ sont limitées.
Par contre, en relisant ta problématique, je pencherais pour MQTT.
Soit via un serveur dans le cloud style cloudmqtt.com, soit directement via un serveur mqtt chez toi.
Ensuite, un firmware style Tasmota, Espurna ou dans une moindre mesure EspEasy doit pouvoir faire le Job.

Alors oui, je te l'accorde, c'est moins drôle que du fait maison :mrgreen:
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

Neutrino a écrit : 26 janv. 2019, 16:20 Bonjour,

Mes compétences en C++ sont limitées.
Par contre, en relisant ta problématique, je pencherais pour MQTT.
Soit via un serveur dans le cloud style cloudmqtt.com, soit directement via un serveur mqtt chez toi.
Ensuite, un firmware style Tasmota, Espurna ou dans une moindre mesure EspEasy doit pouvoir faire le Job.

Alors oui, je te l'accorde, c'est moins drôle que du fait maison :mrgreen:
beaucoup moins drôle c'est sure, je vais étudier cette possibilité, mais je me suis presque débloqué,
j'ai testé pour le moment avec un interrupteur local, tout marche maintenant je le fais à distant et là je pense que je n'arrive pas à rentrer (utilisateur et mot de passe,

Code : Tout sélectionner

#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>



unsigned long delayTime;


const char* ssid     = "Livebox-E0";
const char* password = "4C40";
const char* host = "util:mdp@marsflow2.myasustor.com";
const char* host2 = "marsf.myasustor.com";
const char* url = "/json.htm?type=devices&rid=841";

const int  port2 = 9982;
const uint16_t port = 9982;
const int   watchdog = 30000; // Fréquence d'envoi des données à Domoticz - Frequency of sending data to Domoticz
unsigned long previousMillis = millis();


ESP8266WebServer server ( 80 );
HTTPClient http;


void setup() {
  Serial.setDebugOutput(true);
  Serial.begin(115200);



  Serial.setDebugOutput(true);
  Serial.println("Connecting Wifi...");

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }



  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.print(WiFi.localIP());










}

int value = 0;

void loop() {
  WiFiClient client;
  if (!client.connect(host2, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }


  Serial.println("passage ok");


  // Check HTTP status


  http.begin(host, port, url);
  int httpCode = http.GET();
  if (httpCode) {
    if (httpCode == 200) {
      String client = http.getString();

    }
  }

  // Send HTTP request
  client.println(F("GET /json.htm?type=devices&rid=841 HTTP/1.0"));
  client.println(F("Host: util:mdp@mars.myasustor.com"));
  client.println(F("Connection: close"));
  if (client.println() == 0) {
    Serial.println(F("Failed to send request"));
    return;
  }

  Serial.println("passage ok");
  // Skip HTTP headers
  char endOfHeaders[] = "\r\n\r\n";
  if (!client.find(endOfHeaders)) {
    Serial.println(F("Invalid response"));
    return;
  }

  Serial.println("passage ok");

  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = 2*JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(16) + JSON_OBJECT_SIZE(50) + 1270;
  DynamicJsonDocument doc(capacity);

  Serial.println(capacity);

  // Parse JSON object
  DeserializationError error = deserializeJson(doc, client);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }

  // Extract values
  JsonObject root = doc.as<JsonObject>();
  Serial.println(F("Response:"));

  long ActTime = root["ActTime"];
  JsonObject result0 = root["result"][0];
  const char* result0_Data = result0["Data"];
  const char* result0_Name = result0["Name"];
  int result0_Level = result0["Level"];

  Serial.println(ActTime);
  Serial.println(result0_Name);
  Serial.println(result0_Data);
  Serial.println(result0_Level);
  // Disconnect
  client.stop();


  if (result0_Level == 20) {
    Serial.println("niveau 20");

  }
  if (result0_Level == 10) {
    Serial.println("niveau 10");

  }


  delay(10000);

}
ça me marque

Code : Tout sélectionner

deserializeJson() failed: InvalidInput

j'ai mit en base64 en suivant les indications json, je vous tiens au courant
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

Bonsoir,

donc j'ai réussi à faire mon script fonctionnel, je le mets pour les intéressés :D (à adapter)
celui là permet de récupérer des valeurs d'une batterie (A0), récupérer les valeurs d'une sonde BME680 et les envoyer à domoticz et puis récupérer les valeurs d'un interrupteur virtuel par le biais de json pour démarrer un relais.

Code : Tout sélectionner

#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>





#include "Zanshin_BME680.h" // Include the BME680 Sensor library


unsigned long delayTime;


const char* ssid     = "ssid";
const char* password = "mot de passe";
const char* host = "util:mdp@marsflow2.myasustor.com";


const char* host2 = "marsflow2.myasustor.com";
const char* url = "/json.htm?username=utilisateur base64==&password= mot de passe base64==&type=devices&rid=841";

const int  port2 = 9982;
const uint16_t port = 9982;
const int   watchdog = 30000; // Fréquence d'envoi des données à Domoticz - Frequency of sending data to Domoticz
unsigned long previousMillis = millis();
const int relais = 2;
int sensorValue = analogRead(A0);
ESP8266WebServer server ( 80 );
HTTPClient http;
int led = D4;
BME680_Class BME680; ///< Create an instance of the BME680

float altitude(const float seaLevel=1013.25) 
{
  static float Altitude;
  int32_t temp, hum, press, gas;
  BME680.getSensorData(temp,hum,press,gas); // Get the most recent values from the device
  Altitude = 44330.0*(1.0-pow(((float)press/100.0)/seaLevel,0.1903)); // Convert into altitude in meters
  return(Altitude);
} // of method altitude()

void setup() {
  pinMode(led, OUTPUT);
  Serial.setDebugOutput(true);
  Serial.begin(115200);
  
#ifdef  __AVR_ATmega32U4__  // If this is a 32U4 processor, then wait 3 seconds to initialize USB
    delay(3000);
  #endif
    Serial.println(F("Starting I2CDemo example program for BME680"));
  Serial.print(F("- Initializing BME680 sensor\n"));
  while (!BME680.begin(I2C_STANDARD_MODE)) // Start BME680 using I2C protocol
  {
    Serial.println(F("-  Unable to find BME680. Waiting 3 seconds."));
    delay(3000);
  } // of loop until device is located
  Serial.println(F("- Setting 16x oversampling for all sensors"));
  BME680.setOversampling(TemperatureSensor,Oversample16); // Use enumerated type values
  BME680.setOversampling(HumiditySensor,   Oversample16);
  BME680.setOversampling(PressureSensor,   Oversample16);
  Serial.println(F("- Setting IIR filter to a value of 4 samples"));
  BME680.setIIRFilter(IIR4);
  Serial.println(F("- Setting gas measurement to 320\xC2\xB0\C for 150ms"));
  BME680.setGas(320,150); // 320�c for 150 milliseconds
  Serial.println();


/*!
    @brief    Arduino method for the main program loop
    @details  This is the main program for the Arduino IDE, it is an infinite loop and keeps on repeating. 
    @return   void
*/

  
  Serial.setDebugOutput(true);
  Serial.println("Connecting Wifi...");

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }



  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  










}

int value = 0;

void loop() {

unsigned long currentMillis = millis();



if ( currentMillis - previousMillis > watchdog ) {
    previousMillis = currentMillis;
  
  WiFiClient client;
  if (!client.connect(host2, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

   if(WiFi.status() != WL_CONNECTED) {
      Serial.println("WiFi not connected !");
    } else {  
      Serial.println("send and recept data to Domoticz");

  Serial.println("passage ok");


  // Check HTTP status


  http.begin(host, port, url);
  int httpCode = http.GET();
  if (httpCode) {
    if (httpCode == 200) {
      String client = http.getString();
     Serial.println("200 OK");
    }
  }

  // Send HTTP request
  client.println(F("GET /json.htm?username=utilisateur base64==&password=mot de passe base64==&type=devices&rid=841 HTTP/1.0"));
  client.println(F("Host: marsflow2.myasustor.com"));
  client.println(F("Connection: close"));
  if (client.println() == 0) {
    Serial.println(F("Failed to send request"));
    return;
  }

  Serial.println("passage ok");
  // Skip HTTP headers
  char endOfHeaders[] = "\r\n\r\n";
  if (!client.find(endOfHeaders)) {
    Serial.println(F("Invalid response"));
    return;
  }

  Serial.println("passage ok");

  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = 2*JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(16) + JSON_OBJECT_SIZE(50) + 1270;
  DynamicJsonDocument doc(capacity);

  Serial.println(capacity);

  // Parse JSON object
  DeserializationError error = deserializeJson(doc, client);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }

  // Extract values
  JsonObject root = doc.as<JsonObject>();
  Serial.println(F("Response:"));

  long ActTime = root["ActTime"];
  JsonObject result0 = root["result"][0];
  const char* result0_Data = result0["Data"];
  const char* result0_Name = result0["Name"];
  int result0_Level = result0["Level"];

  Serial.println(ActTime);
  Serial.println(result0_Name);
  Serial.println(result0_Data);
  Serial.println(result0_Level);
  // Disconnect
  client.stop();





  if (result0_Level == 20) {
    Serial.println("niveau 20");
      digitalWrite(led, HIGH);   // Allume la Led
              
  }d
  if (result0_Level == 10) {
    Serial.println("niveau 10");
          // Attendre 1 seconde
  digitalWrite(led, LOW);  // Eteind la Led
              // Pause de 2 secondes
  }
  static uint8_t loopCounter = 0;+-
.*3  static int32_t temperature, humidity, pressure, gas;     // Variable to store readings
°¨%,
  B02ME680.getSensorData(temperature,humidity,pressure,gas); // Get most recent readings
  Serial.print(temperature/100.0,2);                       // Temperature in deci-degrees
#ifdef ESP32
  Serial.print(F(" ")); // Esp32 compiler doesn't liked escaped string
#else
  Serial.print(F("\xC2\xB0\C "));                          // Representation of the � symbol
#endif
  Serial.print(humidity/1000.0,2);                         // Humidity in milli-percent
  Serial.print(F("%Hum "));
  Serial.print(pressure/100.0,2);                          // Pressure in Pascals
  Serial.print(F("hPa "));
  Serial.print(altitude(),2);
  Serial.print(F("m "));
  Serial.print(gas/100.0,2);
  Serial.println(F("mOhm"));
  




     float t = (temperature/100);
     float h = (humidity/1000);
     float pa = (pressure/100); //bme.readPressure() / 100.0F;
     float v = sensorValue * (31.54 / 1023.0);
      
      if ( isnan(t) || isnan(h) || isnan(v) ) {
        Serial.println("DHT KO");
      } else {
        int hum_stat;
        int bar_for = 0;
        if ( h > 70 ) {
          hum_stat = 3;
        } else if ( h < 30 ) {
          hum_stat = 2; 
        } else if ( h >= 30 & h <= 45 ) {
          hum_stat = 0;
        } else if ( h > 45 & h <= 70 ) {
          hum_stat = 1;
        }

        if ( pa > 1030 ) {
          bar_for = 1;  
        } else if ( pa > 1010 & pa <= 1030 ) {
          bar_for = 2;
        } else if ( pa > 990 & pa <= 1010 ) {
          bar_for = 3;
        } else if ( pa > 970 & pa < 990 ) {
          bar_for = 4;
        }
        //"=devices&rid=841";

        String url2 = "/json.htm?username= utilisateur base64 ==&password=mot de passe base64==&type=command&param=udevice&idx=1036&nvalue=0&svalue=";
        url2 += String(t); url2 += ";";
        url2 += String(h); url2 += ";";
        url2 += String(hum_stat); url2 += ";";
        url2 += String(pa); url2 += ";";
        url2 += String(bar_for);
        
        String url3 = "/json.htm?username=""""utilisateur en base64""""""==&password=MOT DE PASSE EN base64==&type=command&param=udevice&idx=999&nvalue=0&svalue=";
        url3 += String(v);
     
        sendToDomoticz(url2);
        sendToDomoticz2(url3);
      }
    }
  }
} 
  
  
  //envoie donnee a domoticz
void sendToDomoticz(String url2){
  Serial.print("connecting to ");
  Serial.println(host2);
  Serial.print("Requesting URL: ");
  Serial.println(url2);
  http.begin(host2,port,url2);
  int httpCode = http.GET();
    if (httpCode) {
      if (httpCode == 200) {
        String payload = http.getString();
        Serial.println("Domoticz response "); 
        Serial.println(payload);
      }
    }
    Serial.println("closing connection");
  http.end();
}
     //envoie donnee a domoticz
void sendToDomoticz2(String url3){
  Serial.print("connecting to ");
  Serial.println(host2);
  Serial.print("Requesting URL: ");
  Serial.println(url3);
  http.begin(host2,port,url3);
  int httpCode3 = http.GET();
  String payload = http.getString();
   Serial.println(payload);
    if (httpCode3) {
      if (httpCode3 == 200) {
        
        Serial.println("Domoticz response "); 
        Serial.println(payload);
      }
    }
       Serial.println("closing connection");
  http.end();
   
   
   
  


}
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

totof60
Messages : 355
Enregistré le : 29 avr. 2016, 09:31

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par totof60 »

Bonjour
je déterre ce sujet pour l'adapter à mes besoins.

Le sketch semble avoir des erreurs.
Est ce dernier que tu utilises , ou y a t'il eu des corrections ?

Merci d'avance
Domoticz V4.10717
sous raspbian-Stretch, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

totof60 a écrit : 15 mai 2020, 10:33 Bonjour
je déterre ce sujet pour l'adapter à mes besoins.

Le sketch semble avoir des erreurs.
Est ce dernier que tu utilises , ou y a t'il eu des corrections ?

Merci d'avance
Bonjour,

il fonctionne, par contre il faut l'adapter, je n'ai pas marqué comment il faut faire je vais voir ça ce soir.
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

bonsoir alors déjà pour décrypter le json distant tu as besoin de coller ton json actuel que tu souhaites récupérer sur ce site https://arduinojson.org/v5/assistant/
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

marsflow
Messages : 69
Enregistré le : 25 mai 2017, 20:42
Localisation : Landes

Re: récupérer fichier Json sous esp8266 et l’exploiter

Message par marsflow »

Code : Tout sélectionner

  // Allocate the JSON document
  // Use arduinojson.org/assistant to compute the capacity.
  const size_t capacity = 2*JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(16) + JSON_OBJECT_SIZE(50) + 1270; // modifier cette partie pour l'adapter à votre json >>> https://arduinojson.org/v5/assistant/
  DynamicJsonDocument doc(capacity);

  Serial.println(capacity);
Nas
Asustor AS-608T WD2x4TB WD SE
Western Digital Sharespace WD4x2TB Green edition

Ordinateur
Asus N750JV-T4222H
(Asus M2N32-Sli Wifi édition
Nvidia Geforce 510
Processeur AMD Athlon 64 X2 Dual core 3000+)

Téléphone
Samsung Galaxy Note 1, 2 et 3, 5

Répondre