[AIDE] Parser JSON

Bonjour à tous,

J’ai un opensprinkler pour lequel j’aimerais connaitre le status de chacune des valves.
Dans script/Json j’ai bien un retour mais pour toutes les valves :
http://opensprinkler/js?pw=XXXXXXXX donne {« sn »:[0,0,0,0,0,0,0,0],« nstations »:8}

Voici en image quand je « parse? » les sn :

J’aimerais cependant l’état des valves de manière unitaire.
Valve1 => 1° caractère
Valve2 => 2° caractère etc…

Commet faire svp

Merci pour votre aide :slight_smile:

Pour avoir la requête qu’il faut faire, il faut nous montrer la structure du json

En fait, il n’y a malheureusement rien de plus que ce que j’ai montré plus haut :

Il faut « décoder » le message Json. Tu peux faire ca avec un bloc code dans un scénario:
Je m’en suis créé un il y a peu de temps, je ne peux pas tester le tien mais ca ressemblerait a ca:

// Step 1: Recuperation du contenu du fichier (JSON complet)
$api = http://opensprinkler/js?pw=XXXXXXXX;
$json = file_get_contents($api);
// Step 2: Decodage du JSON et recuperation des infos souhaitees
$jsonData = json_decode($json,true);
foreach ($jsonData['sn'] as $valve) {
  $scenario->setlog($valve);
}

Normalement ca devrait retourner tes 8 valeurs unitairement dans le log de ton scenario. Ensuite a toi de l’adapter pour ton besoin.

Thanks @Arnox , je viens de tester mais dans les logs j’ai une erreur de syntaxe :

[2020-04-13 16:43:06][SCENARIO] Start : Scenario lance manuellement.
[2020-04-13 16:43:06][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-13 16:43:06][SCENARIO] Exécution d'un bloc code
[2020-04-13 16:43:06][SCENARIO] syntax error, unexpected ':'
[2020-04-13 16:43:06][SCENARIO] Fin correcte du scénario

Merci @Arnox !
Il fallait mettre en guillemet

$api = "http://opensprinkler/js?pw=XXXXXXXX";

Du coup j’ai bien les valves de manière unitaires dans les logs

[2020-04-13 16:52:48][SCENARIO] Start : Scenario lance manuellement.
[2020-04-13 16:52:48][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-13 16:52:48][SCENARIO] Exécution d'un bloc code
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] 0
[2020-04-13 16:52:51][SCENARIO] Fin correcte du scénario

Par contre comment je peux les récupérer dans des virtuels svp ?

Desole pour les guillemets, j’ai copier/coller/remplacer un peu vite…
Remplace le setlog par un setdata et tu recuperas tes infos dans des variables…
$scenario->setData($key, $value); : Sauvegarde une donnée (variable)

@Arnox

PAr contre comment je lui dis de mettre ca dans 8 variable différentes ?
par ce que avec ce code ca ne me change que la variable « valve »

// Step 1: Recuperation du contenu du fichier (JSON complet)
$api = "http://opensprinkler/js?pw= XXXXXXXX";
$json = file_get_contents($api);
// Step 2: Decodage du JSON et recuperation des infos souhaitees
$jsonData = json_decode($json,true);
foreach ($jsonData['sn'] as $valve) {
// $scenario->setlog($valve);
 $scenario->setData('valve', $valve);
}

Y a une commande pour faire valve+1 ?

Essaie ca…

// Step 1: Recuperation du contenu du fichier (JSON complet)
$api = "http://opensprinkler/js?pw= XXXXXXXX";
$json = file_get_contents($api);
// Step 2: Decodage du JSON et recuperation des infos souhaitees
$jsonData = json_decode($json,true);
$index=1;
foreach ($jsonData['sn'] as $valve) {
// $scenario->setlog($valve);
 $scenario->setData('valve'.$index, $valve);
$index++;
}

Pour la récup dans un virtuel, c’est avec variable(valve1) :
image

Désolé pour ma 1ère réponse, j’avais lu un peu trop en diagonale.

Merci à vous 2, ca marche nickel !
En prime, j’ai ajouté une variable arrosage_en_cours en cas de valve ouvert :

$api = "http://opensprinkler/js?pw=XXXXXXXXXXXXXXXXXXX";
$json = file_get_contents($api);
// Step 2: Decodage du JSON et recuperation des infos souhaitees
$jsonData = json_decode($json,true);
$index=1;
$scenario->setData('arrosage_en_cours',0);
foreach ($jsonData['sn'] as $valve) {
  $scenario->setData('valve'.$index, $valve);
  //$scenario->setlog("valve$index $valve");
  $index++;
   if ($valve==1) {
    $scenario->setlog("valve$index arrosage_en_cours: oui");
    $scenario->setData('arrosage_en_cours',1);
  } 
}

MERCI !

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.