[RESOLU] Communication API REST ESP8266

Bonjour,

Après un moment d’égarement sur Domoticz, je retente l’aventure Gladys.

Pour commencer, je tente l’installation d’une petite station météo à base d’ESP8266 en communication avec Gladys.
J’ai suivi le tuto présent dans le blog et adapté à l’architecture de l’ESP8266.

Mes requêtes semblent correctement formées.
La connexion à Gladys sur le port 80 semble correcte également.

13:36:24.564 -> POST /devicestate?devicetype=1&value=23&token=blablablablablabla HTTP/1.1
13:36:24.663 -> POST /devicestate/?devicetype=2&value=52&token=blablablablablabla HTTP/1.1

Je ne reçois toutefois rien dans Gladys.

Mes questions sont les suivantes :

  • Y a-t-il une erreur visible dans ma requête?
  • Où trouver la documentation de l’API? Le lien sur le site me renvoye vers une erreur 404…

Dans Gladys, je trouve bizarre de ne pas pouvoir activer mon token, c’est normal?

Merci d’avance

Salut il faut bien activer le token et l’utiliser pour ce genre de chose :slight_smile:

Voici ce que j’ai dans les paramètres de sécurité.
image

Je ne sais pas “déplacer” le curseur…quelque chose m’échappe

Supprime le et créer en un autre, ça devrait le faire.

J’avance…

Le token est bien activé.
Dans les logs, j’ai ceci qui se répéte sans cesse

0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Access with token to user Guillaume
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.

Je présume que l’accès se fait bien via le token…mais je n’ai toujours pas de valeurs dans mes périphériques

Les devices sont présents sont Gladys ? (Voir dans menu -> périphériques).

Oui oui, ils sont bien déclarés

Je remarque également une différence entre les 2 requêtes POST

“POST /devicestate?devicetype” ou “POST /devicestate/?devicetype” ?

Ils n’ont pas de nom ni d’identifier, peut être est-ce une piste

C’est exactement ce que je viens de modifier…sans résultat malheureusement.

Bref, je cherche toujours

EDIT : J’ai même recréé mes périphériques, mon token… sans succès

Je présume que je ne suis pas le premier à faire cette manipulation, quelqu’un peut-il vérifier la syntaxe de ma requête?

Merci d’avance

J’ai avancé…la température est bien actualisée dans Gladys :grinning:

En cherchant sur le forum, je suis arrivé sur ce topic
J’ai remplacé mes requêtes POST en requêtes GET.

Par contre, je ne parviens pas à récupérer l’humidité, la requête est pourtant identique

Voici ce que le moniteur de l’IDE Arduino m’indique.

13:35:07.065 -> Adresse IP :
13:35:07.065 -> 192.168.1.150
13:35:07.098 -> connecting…
13:35:07.098 -> connected
13:35:07.098 -> GET /devicestate/create?token=MON_TOKEN&devicetype=1&value=27.0
13:35:07.197 -> GET /devicestate/create?token=MON_TOKEN&devicetype=7&value=53.9
13:35:07.297 ->
13:35:07.297 -> disconnecting.
13:35:07.330 -> 20506
13:35:07.330 -> Humidite : 53.90 %
13:35:07.363 -> Temperature : 27.00 °C
13:35:07.396 -> Temperature ressentie : 27.66 °C

Voici mes périphériques dans Gladys

Et voici ce que les logs indiquent

0|gladys | Access with token to user Guillaume
0|gladys | Event : create : new Event with code : devicetype-new-value
0|gladys | Scenario : Trigger : New event : devicetype-new-value
0|gladys | Scenario : Trigger : Found 0 launchers with code devicetype-new-value.

Quelqu’un à une idée?
@MathieuA

Je suis proche du but

Edit :
A toute fin utilie, la partie de mon script Arduino envoyant les données

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, 1);
    String humidite = String(h, 1);
  
    // replacing URL with the value
    requestTemperature.replace("%VALUE", temperature);
    requestHumidity.replace("%VALUE", humidite);
  
    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:
    int debug=client.connect(server, 80);
    Serial.println("connection failed");
    Serial.print("Debug=");
    Serial.println(debug);
  }
}

Enlève vite ton ip et le token…

C’est une IP privée…pas grand risque.
J’ai supprimé mon token :grinning:

Bonsoir,

J’arrive à quelque chose en écrivant le code comme suit

// Connexion avec le serveur
Serial.println(“connecting…”);
if (client.connect(server, 80))
{
Serial.println(“connected”);
//Construction de la requête HTTP
String requestTemperature = “GET /devicestate/create?token=e564e…&devicetype=1&value=%VALUE”;
String Temperature = String(temperature, 1);
requestTemperature.replace("%VALUE", Temperature);

    Serial.println(requestTemperature);
          
    client.println(requestTemperature);
    client.println(host);
    client.println("Connection: close");
    client.println();
    
    client.stop();
  }
  if (client.connect(server, 80)) 
  {
    Serial.println("connected");
    //Construction de la requête HTTP
    String requestHumidite = "GET /devicestate/create?token=e564e...&devicetype=7&value=%VALUE";
    String Humidite = String(humidite, 0);
    requestHumidite.replace("%VALUE", Humidite);
    
    Serial.println(requestHumidite);
          
    client.println(requestHumidite);
    client.println(host);
    client.println("Connection: close");
    client.println();
    
    client.stop();
  }

Quelqu’un a une explication?

Merci

Bonjour @GuillaumeB

De mon cote, j’utilise ce code

  HTTPClient http;
  String getData, link, payload;
 
  getData = "?token=" + String(gladys_token) + "&devicetype=" + String(deviceTypeId) + "&value=" + String(!realState);
  if(strlen(gladys_port) == 0) {
    strcpy(gladys_port, "80");
  }
  link = "http://" + String(gladys_server) + ":" + String(gladys_port) + "/devicestate/create" + getData;
  http.begin(link);
  int httpCode = http.GET();
  if(httpCode >0) {
    payload = http.getString();
  }
  if(debugMode){
    Serial.println("Link: " + link);
    Serial.println("http code: " + httpCode);
    Serial.println("response: " + payload + "\n");
  }

  http.end();

On dirait bien que t’as une typo sur le type du devicetype 7. Je crois lire mulilvel au lieu de multilevel.

Effectivement, je vais corriger ça. Merci

@luke : Merci pour le bout de code, je vais le comparer au mien :wink: