Problème pour récupérer info script json

bonjour,
je suis sur Raspberry pi 4 SSS en V4
et je n’arrive pas à récupérer les info sur un script. Peut-être une erreur de syntaxe je pense pas et je ne vois l’erreur.

<?php

// analyse des arguments
if (isset($argv)) {
    foreach ($argv as $arg) {
        $argList = explode('=', $arg);
        if (isset($argList[0]) && isset($argList[1])) {
            $_GET[$argList[0]] = $argList[1];
        }
    }
}

//Récuperation des variables
if(!isset($_GET['token'])){
	echo "Erreur : Merci de renseigner votre token."; 
} 
else{
	$token = $_GET['token'];
}

if(!isset($_GET['action'])){
	echo "Erreur : Merci de renseigner l'action.";
} 
else{
	$action = $_GET['action'];
}

if(!isset($_GET['day'])){
	echo "Erreur : Merci de renseigner la date.";
} 
else{
	$day = date("yy-m-d");	
}

if(!isset($_GET['type'])){
	echo "Erreur : Merci de renseigner le type.";
} 
else{
	$type = $_GET['type'];
}

if( $action == "getStockStatus"){
$json = file_get_contents("https://xxxxxxxxxx/api.php?token=$token&type=$type&action=$action&day=$day");

$data = json_decode($json,true);
	//initialisation des variables à partir des données récupérées        
	$remains = $data->remains;
	$percent = $data->percent;
	
	//Affichage dse données
  	echo '<p>Consommation</p>';
  	echo '<p>Silo</p>';
	echo 'Restants :	 '.$remains.'Kgs</br>';
	echo 'Pourcentages : '.$percent.'%</br>';
}
else{
	echo "Erreur dans les paramètres.";
}
?>
Résultat de la commande : PHP Notice: Trying to get property 'remains' of non-object in /var/www/html/plugins/script/data/Stocks_oko.php on line 47 PHP Notice: Trying to get property 'percent' of non-object in /var/www/html/plugins/script/data/Stocks_oko.php on line 48
Consommation

Silo

Restants : Kgs
Pourcentages : %
  • a tu tester ta requette dans un navigateur ?
https://xxxxxxxxxx/api.php?token=$token&type=$type&action=$action&day=$day
  • quel tête a le contenu du json ?

  • ligne 45
    ne faut t’il pas faire un trim pour eviter les données parasites

$data = json_decode((trim($json),true));
  • ligne 47 et 48
    $remains = $data->remains;
    avec $x indice du tableau 0 pour le 1er
$remains = $data[$x]['remains'];
ou si il n'y en a qu'un
$remains = $data['remains'];
....

il y en à peut-être d’autre …

{"remains":70,"percent":52}

Consommation

Silo

Restants : Kgs
Pourcentages : %`
```
en mettant ceci
```
$data = json_decode((trim($json),true));

Tu a oublier le dernier point
remplacer tes lignes 47 et 48
$remains = $data->remains;
par
$remains = $data['remains'];

et idem pour percent

$data est un array pas une classe …

et est-ce que je dois laisser cette ligne ainsi

$data = json_decode((trim($json,true)));

trim te débarasse si il y en à des espaces des lignes suivantes et retours chariot
à toi de voir si ton json en contiens ou pas

https://www.php.net/manual/fr/function.trim.php

EDITE :

j’ai mal placé une ) ce serait plutôt
$data = json_decode((trim($json),true));

EDITE2 :
Un conseil oublie plugin-script pour du php
il est beaucoup plus simple d’utiliser un bloc code de scenario
plus facile a de-bug aussi.

des tag en entrée te permette d’instancier tes variables et paramètres
des tag en sortie te permette de manipuler avec des event dans des virtuels

1 « J'aime »

excuse moi je test

1 « J'aime »

il y a une technique ou une méthode pour transposé ce script sur un bloc code php

c’est du php les 2 voilà un exemple à toi d’adapter

$login='envoy';$passwd='011770';$ip = '192.168.0.248';
$tags = $scenario->getTags();
$request_http = new com_http('http://'.$ip.'/api/v1/production/inverters',"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);

$tableau = "<table><tr><td>Paneau</td><td>N° de Série</td><td>Moment</td><td>Type</td><td>Puissance</td><td>Maxi</td></tr>";
$x=0;
$total=0;
foreach ($json as &$value) {
  $y = $x + 1;
  $tableau .= '<tr>';
  $tableau .= '<td>'.$y.'</td>';
  $tableau .= '<td>'.$json[$x]['serialNumber'].'</td>';
  $tableau .= '<td>'.date('H:i:s d-m-Y',$json[$x]['lastReportDate']).'</td>';
  $tableau .= '<td>'.$json[$x]['devType'].'</td>';  
  $tableau .= '<td>'.$json[$x]['lastReportWatts'].' W</td>';
  $total += (int)$json[$x]['lastReportWatts'];
  $tableau .= '<td>'.$json[$x]['maxReportWatts'].' W</td>';
  $tableau .= "</tr>";
  $x+=1;
}

$tableau .= "</table>";
$tableau = str_replace("<td>","<td style ='border: 1px solid red;height: 30px;padding-right: 2px;padding-left: 2px;'>",$tableau);
$scenario->setLog($total);
$scenario->setLog($tableau);

//unset($value);
$tableau = 'Total '.$total.' Watts'.$tableau;
$tags['#tableau#'] = $tableau;
$scenario->setTags($tags);

la sortie est un tag

la 1ere ligne pourait être des tag en entrée aussi

@olive
Oui j’avais vu cette exemple, j’essaie de comprendre et d’adapter
Etant nocive je tatonnne…

commence par adapter le début
fait un bloc code avec ça dedans remplace ta ligne http



$request_http = new com_http('http://tonurl');
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);

$scenario->setLog($json);

et regarde le log de ton scenario une fois executer manuellement !

voici le log de sortie du bloc

------------------------------------
[2021-03-05 18:49:33][SCENARIO] -- Start : Scenario lance manuellement.
[2021-03-05 18:49:33][SCENARIO] - Exécution du sous-élément de type [action] : code
[2021-03-05 18:49:33][SCENARIO] Exécution d'un bloc code 
[2021-03-05 18:49:33][SCENARIO]  - ----------------------------------------
[2021-03-05 18:49:33][SCENARIO]  - - Framework sc v0.993e
[2021-03-05 18:49:33][SCENARIO]  - - Vos scenarios en PHP
[2021-03-05 18:49:33][SCENARIO]  - - by dJuL
[2021-03-05 18:49:33][SCENARIO]  - ----------------------------------------
[2021-03-05 18:49:33][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2021-03-05 18:49:33][SCENARIO]  - - - 
[2021-03-05 18:49:33][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG NATIF ACTIF (php >= v7) */
[2021-03-05 18:49:33][SCENARIO]  - - - 
[2021-03-05 18:49:33][SCENARIO] Array
[2021-03-05 18:49:33][SCENARIO]  - - - 
[2021-03-05 18:49:33][SCENARIO]  - /* - Fin du Bloc code n°1 - */
[2021-03-05 18:49:33][SCENARIO]  - - - 
[2021-03-05 18:49:33][SCENARIO] Durée d'exécution (depuis le 1er bloc code) : 29.41 millisecondes
[2021-03-05 18:49:33][SCENARIO] Fin correcte du scénario

Donc il n’y a rien comme données ?

on peut voir ce que tu a mis dans le bloc code ça correspond pas du tout a ce que j’ai indiqué ?

$request_http = new com_http('https://192.168.1.25/api.php?token=f37f393238a9&type=rendu&action=getStockStatus&day=2021-03-05');
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);

$scenario->setLog($json);

quand tu tape

https://192.168.1.25/api.php?token=f37f393238a9&type=rendu&action=getStockStatus&day=2021-03-05

ça répond quoi ?

{"remains":70,"percent":52}

C’est ça que je trouve bizarre !!

C’est peut-être à cause du Framework de Djul ??

ok

maintenant ajoute

$scenario->setLog("remains = ".$json['remains']);
$scenario->setLog("percent = ".$json['percent']);

------------------------------------
[2021-03-05 19:12:40][SCENARIO] -- Start : Scenario lance manuellement.
[2021-03-05 19:12:40][SCENARIO] - Exécution du sous-élément de type [action] : code
[2021-03-05 19:12:40][SCENARIO] Exécution d'un bloc code 
[2021-03-05 19:12:41][SCENARIO] Array
[2021-03-05 19:12:41][SCENARIO] remains = 70
[2021-03-05 19:12:41][SCENARIO] percent = 52
[2021-03-05 19:12:41][SCENARIO] Fin correcte du scénario

Super il sort quelque chose

Maintenant faut que je déclare les variables ? et les sorties ?