Récupérer la dernière valeur d'un json array

Bonjour,

Je souhaite récupérer les infos d’une box ECU-C de la marque APSYSTEM. Plusieurs JSON sont à disposition et une des valeurs qui m’intéresse se trouve être la dernière d’un bloc qui ne cesse de grandir toute la journée et qui retombe à 1 valeur à chaque changement de jour.

Le json à minuit ressemble à ça :

{"power2":[{"time":1638140691000,"powerA":1982,"powerB":0,"powerC":0}],"today_energy":"0","subtitle":""}

Puis plus tard il ressemble à ça :

{"power2":[{"time":1638140691000,"powerA":1982,"powerB":0,"powerC":0},{"time":1638140991000,"powerA":2007,"powerB":0,"powerC":0},{"time":1638141291000,"powerA":1555,"powerB":0,"powerC":0},{"time":1638141591000,"powerA":1542,"powerB":0,"powerC":0}],"today_energy":"0","subtitle":""}

Et il grossi toute la journée.

Si je parse pour avoir la première valeur, j’utilise

power2>0>powerA

Mais comment parser pour avoir systématiquement la dernière valeur sachant que le fichier va passer sa journée à grossir ?

Un truc du genre :

power2>LASTVALUE>powerA ...

Merci pour votre aide.

Bonsoir
passe par un bloc code dans un scenario
utilise un json_decode
ton array va avoir un nombre d’éléments connu
ou balaie le jusqu’au dernier

1 « J'aime »

Ok, Scénario, json_decode. Je commence à fouiller pour comprendre ce que ça veut dire :slight_smile:

Merci !

J’ai un peu avancé ce matin. J’ai réussi à récupérer les infos qu’il me fallait mais pour le moment je ne sais pas quoi en faire. Je pensais créer des variables et mettre la valeur dedans puis laisser les virtuels se mettre à jour seuls par CRON, ou peut-être directement mettre les virtuels à jour depuis le scénario.

Reste à trouver comment faire (dans les deux cas par curiosité)…

$api = "http://192.168.0.90/index.php/meter/old_meter_power_graph";
$json = file_get_contents($api);

$scenario->setlog('-----RAW----------');
$scenario->setlog($json);
$scenario->setlog('');
// Step 2: Decodage du JSON et recuperation des infos souhaitees
$jsonData = json_decode($json,true);

$scenario->setlog('-------DECODE----------');
$scenario->setlog($jsonData);
$scenario->setlog('');

$upperSpike=0;
$lowerSpike=0;
$latestValue=0;

if(is_array($jsonData)){
	$scenario->setlog('---IMPORT SUCCESS----');
	foreach ($jsonData['power2'] as $jsonKey) {
      	$i=0;
  		if(is_array($jsonKey)){
          	foreach($jsonKey as $tempValue){
            	$i++;
              	if($i==2){
                  	//set Highest daily Value
                  	if($tempValue>$upperSpike){
                    	$upperSpike=$tempValue;
                    }
                  	//set lowest daily value
                  	if($tempValue<$lowerSpike or $lowerSpike==0){
                    	$lowerSpike=$tempValue;
                    }
                  	$latestValue=$tempValue;               		
                }
            }
  		}
  	}
  	$scenario->setlog('Daily UpperSpike : ' . $upperSpike);
  	$scenario->setlog('Daily LowerSpike : ' . $lowerSpike);
  	$scenario->setlog('Latest Value : ' . $latestValue);
}

Ce qui donne :

[2021-11-30 08:58:03][SCENARIO] Start : Scenario lance manuellement.
[2021-11-30 08:58:03][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-11-30 08:58:03][SCENARIO] Exécution d’un bloc code
[2021-11-30 08:58:04][SCENARIO] -----RAW----------
[2021-11-30 08:58:04][SCENARIO] {« power2 »:[{« time »:1638227094000,« powerA »:879,« powerB »:0,« powerC »:0},{« time »:1638227394000,« powerA »:1024,« powerB »:0,« powerC »:0},{« time »:1638227694000,« powerA »:3843,« powerB »:0,« powerC »:0},{« time »:1638227994000,« powerA »:3859,« powerB »:0,« powerC »:0},{« time »:1638228294000,« powerA »:3879,« powerB »:0,« powerC »:0},{« time »:1638228594000,« powerA »:4042,« powerB »:0,« powerC »:0},{« time »:1638228894000,« powerA »:4093,« powerB »:0,« powerC »:0},{« time »:1638229194000,« powerA »:4177,« powerB »:0,« powerC »:0},{« time »:1638229494000,« powerA »:4117,« powerB »:0,« powerC »:0},{« time »:1638229794000,« powerA »:4159,« powerB »:0,« powerC »:0},{« time »:1638230094000,« powerA »:4202,« powerB »:0,« powerC »:0},{« time »:1638230394000,« powerA »:4196,« powerB »:0,« powerC »:0},{« time »:1638230694000,« powerA »:4140,« powerB »:0,« powerC »:0},{« time »:1638230994000,« powerA »:866,« powerB »:0,« powerC »:0},{« time »:1638231294000,« powerA »:780,« powerB »:0,« powerC »:0},{« time »:1638231594000,« powerA »:712,« powerB »:0,« powerC »:0},{« time »:1638231894000,« powerA »:717,« powerB »:0,« powerC »:0},{« time »:1638232194000,« powerA »:712,« powerB »:0,« powerC »:0},{« time »:1638232494000,« powerA »:709,« powerB »:0,« powerC »:0},{« time »:1638232735000,« powerA »:714,« powerB »:0,« powerC »:0},{« time »:1638233045000,« powerA »:705,« powerB »:0,« powerC »:0},{« time »:1638233345000,« powerA »:823,« powerB »:0,« powerC »:0},{« time »:1638233645000,« powerA »:829,« powerB »:0,« powerC »:0},{« time »:1638233945000,« powerA »:717,« powerB »:0,« powerC »:0},{« time »:1638234245000,« powerA »:808,« powerB »:0,« powerC »:0},{« time »:1638234545000,« powerA »:3753,« powerB »:0,« powerC »:0},{« time »:1638234845000,« powerA »:3766,« powerB »:0,« powerC »:0},{« time »:1638235145000,« powerA »:3819,« powerB »:0,« powerC »:0},{« time »:1638235445000,« powerA »:3839,« powerB »:0,« powerC »:0},{« time »:1638235745000,« powerA »:3868,« powerB »:0,« powerC »:0},{« time »:1638236045000,« powerA »:3931,« powerB »:0,« powerC »:0},{« time »:1638236345000,« powerA »:3979,« powerB »:0,« powerC »:0},{« time »:1638236645000,« powerA »:4028,« powerB »:0,« powerC »:0},{« time »:1638236945000,« powerA »:4055,« powerB »:0,« powerC »:0},{« time »:1638237245000,« powerA »:792,« powerB »:0,« powerC »:0},{« time »:1638237545000,« powerA »:804,« powerB »:0,« powerC »:0},{« time »:1638237845000,« powerA »:799,« powerB »:0,« powerC »:0},{« time »:1638238145000,« powerA »:904,« powerB »:0,« powerC »:0},{« time »:1638238445000,« powerA »:789,« powerB »:0,« powerC »:0},{« time »:1638238745000,« powerA »:783,« powerB »:0,« powerC »:0},{« time »:1638239045000,« powerA »:852,« powerB »:0,« powerC »:0},{« time »:1638239345000,« powerA »:864,« powerB »:0,« powerC »:0},{« time »:1638239645000,« powerA »:939,« powerB »:0,« powerC »:0},{« time »:1638239945000,« powerA »:867,« powerB »:0,« powerC »:0},{« time »:1638240245000,« powerA »:4025,« powerB »:0,« powerC »:0},{« time »:1638240545000,« powerA »:2724,« powerB »:0,« powerC »:0},{« time »:1638240845000,« powerA »:3810,« powerB »:0,« powerC »:0},{« time »:1638241145000,« powerA »:3841,« powerB »:0,« powerC »:0},{« time »:1638241445000,« powerA »:3809,« powerB »:0,« powerC »:0},{« time »:1638241745000,« powerA »:3773,« powerB »:0,« powerC »:0},{« time »:1638242045000,« powerA »:3835,« powerB »:0,« powerC »:0},{« time »:1638242345000,« powerA »:3851,« powerB »:0,« powerC »:0},{« time »:1638242645000,« powerA »:3969,« powerB »:0,« powerC »:0},{« time »:1638242945000,« powerA »:4014,« powerB »:0,« powerC »:0},{« time »:1638243245000,« powerA »:3932,« powerB »:0,« powerC »:0},{« time »:1638243545000,« powerA »:3962,« powerB »:0,« powerC »:0},{« time »:1638243845000,« powerA »:3993,« powerB »:0,« powerC »:0},{« time »:1638244145000,« powerA »:4012,« powerB »:0,« powerC »:0},{« time »:1638244445000,« powerA »:2482,« powerB »:0,« powerC »:0},{« time »:1638244745000,« powerA »:806,« powerB »:0,« powerC »:0},{« time »:1638245045000,« powerA »:792,« powerB »:0,« powerC »:0},{« time »:1638245345000,« powerA »:863,« powerB »:0,« powerC »:0},{« time »:1638245645000,« powerA »:872,« powerB »:0,« powerC »:0},{« time »:1638245945000,« powerA »:4076,« powerB »:0,« powerC »:0},{« time »:1638246245000,« powerA »:4095,« powerB »:0,« powerC »:0},{« time »:1638246545000,« powerA »:4088,« powerB »:0,« powerC »:0},{« time »:1638246845000,« powerA »:4051,« powerB »:0,« powerC »:0},{« time »:1638247145000,« powerA »:4093,« powerB »:0,« powerC »:0},{« time »:1638247445000,« powerA »:4118,« powerB »:0,« powerC »:0},{« time »:1638247745000,« powerA »:4241,« powerB »:0,« powerC »:0},{« time »:1638248045000,« powerA »:4155,« powerB »:0,« powerC »:0},{« time »:1638248345000,« powerA »:4197,« powerB »:0,« powerC »:0},{« time »:1638248645000,« powerA »:4206,« powerB »:0,« powerC »:0},{« time »:1638248945000,« powerA »:4193,« powerB »:0,« powerC »:0},{« time »:1638249245000,« powerA »:4201,« powerB »:0,« powerC »:0},{« time »:1638249545000,« powerA »:4245,« powerB »:0,« powerC »:0},{« time »:1638249845000,« powerA »:3367,« powerB »:0,« powerC »:0},{« time »:1638250145000,« powerA »:4356,« powerB »:0,« powerC »:0},{« time »:1638250445000,« powerA »:4431,« powerB »:0,« powerC »:0},{« time »:1638250745000,« powerA »:4300,« powerB »:0,« powerC »:0},{« time »:1638251045000,« powerA »:4335,« powerB »:0,« powerC »:0},{« time »:1638251345000,« powerA »:4321,« powerB »:0,« powerC »:0},{« time »:1638251645000,« powerA »:4376,« powerB »:0,« powerC »:0},{« time »:1638251945000,« powerA »:4374,« powerB »:0,« powerC »:0},{« time »:1638252245000,« powerA »:4475,« powerB »:0,« powerC »:0},{« time »:1638252545000,« powerA »:4451,« powerB »:0,« powerC »:0},{« time »:1638252845000,« powerA »:925,« powerB »:0,« powerC »:0},{« time »:1638253145000,« powerA »:1065,« powerB »:0,« powerC »:0},{« time »:1638253445000,« powerA »:993,« powerB »:0,« powerC »:0},{« time »:1638253745000,« powerA »:1084,« powerB »:0,« powerC »:0},{« time »:1638254045000,« powerA »:1366,« powerB »:0,« powerC »:0},{« time »:1638254345000,« powerA »:969,« powerB »:0,« powerC »:0},{« time »:1638254645000,« powerA »:978,« powerB »:0,« powerC »:0},{« time »:1638254945000,« powerA »:1132,« powerB »:0,« powerC »:0},{« time »:1638255245000,« powerA »:1440,« powerB »:0,« powerC »:0},{« time »:1638255545000,« powerA »:1397,« powerB »:0,« powerC »:0},{« time »:1638255845000,« powerA »:1528,« powerB »:0,« powerC »:0},{« time »:1638256145000,« powerA »:1367,« powerB »:0,« powerC »:0},{« time »:1638256445000,« powerA »:4394,« powerB »:0,« powerC »:0},{« time »:1638256745000,« powerA »:4238,« powerB »:0,« powerC »:0},{« time »:1638257045000,« powerA »:4388,« powerB »:0,« powerC »:0},{« time »:1638257345000,« powerA »:4308,« powerB »:0,« powerC »:0},{« time »:1638257645000,« powerA »:2916,« powerB »:0,« powerC »:0},{« time »:1638257945000,« powerA »:4294,« powerB »:0,« powerC »:0},{« time »:1638258245000,« powerA »:4261,« powerB »:0,« powerC »:0},{« time »:1638258545000,« powerA »:4271,« powerB »:0,« powerC »:0},{« time »:1638258845000,« powerA »:4262,« powerB »:0,« powerC »:0}],« today_energy »:« 0 »,« subtitle »:«  »}
[2021-11-30 08:58:04][SCENARIO]
[2021-11-30 08:58:04][SCENARIO] -------DECODE----------
[2021-11-30 08:58:04][SCENARIO] Array
[2021-11-30 08:58:04][SCENARIO]
[2021-11-30 08:58:04][SCENARIO] —IMPORT SUCCESS----
[2021-11-30 08:58:04][SCENARIO] Daily UpperSpike : 4475
[2021-11-30 08:58:04][SCENARIO] Daily LowerSpike : 705
[2021-11-30 08:58:04][SCENARIO] Latest Value : 4262
[2021-11-30 08:58:04][SCENARIO] Fin correcte du scénario

Bonjour,

Ben tu a bien bosser :+1:

Oui mais avec des tag
L’idée c’est plutôt de mettre les variable php dans des tag

...
$tags = $scenario->getTags();
$tags['#UpperSpike#'] = $upperSpike;
....
$scenario->setTags($tags);

puis dans la suite du scenario faire des
event commande tag

c’est mieux de le faire hors bloc car si le nom de ta commande est modifié
cela n’impacte pas ton scenario

Ok, je creuse donc le sujet Tag. Je pars de 0 alors je vais apprendre les notions au fur et à mesure ^^

Merci Olive !

1 « J'aime »

bonsoir
Si tu veut pas tout refaire,
Cela s’ajoute très simplement en fin de ton scenario existant.