Extraire données fichier .json

Bonjour,

j’ai un fichier Json ou je voudrais extraire des données.

le probleme c’est que le fichier est mis a jour chaques fois que mon aquarium fait une mesure de mon eau avec un glisement des valeur sur 7 jours. donc je ne peut pas faire du style 0 > Value car cette valeure peut etre un dkh ou un po4 …
je souhaiterai extraire a chaques fois les dernieres valeur des parametres « dkh » « oli » « po4 » « ca ».

Merci pour votre aide

Fred

[{"Parameter": "dkh", "Value": "12.15", "Time": "2024-07-07T14:25:59+02:00"}, {"Parameter": "oli", "Value": "0.00", "Time": "2024-07-07T15:02:51+02:00"}, {"Parameter": "dkh", "Value": "5.98", "Time": "2024-07-07T17:48:01+02:00"}, {"Parameter": "dkh", "Value": "8.60", "Time": "2024-07-07T18:55:28+02:00"}, {"Parameter": "dkh", "Value": "8.82", "Time": "2024-07-07T20:44:52+02:00"}, {"Parameter": "oli", "Value": "36.00", "Time": "2024-07-08T10:03:47+02:00"}, {"Parameter": "dkh", "Value": "9.03", "Time": "2024-07-08T11:25:49+02:00"}, {"Parameter": "po4", "Value": "0.90", "Time": "2024-07-08T12:27:49+02:00"}, {"Parameter": "ca", "Value": "438.00", "Time": "2024-07-08T13:23:10+02:00"}]

Bonjour,

je ne suis pas un spécialiste du plugin-script mais j’ai de bonnes notions en programmation. Je pense que c’est largement faisable.
Peux-tu partager ce que tu as essayé pour le moment ? De cette manière je me colle dessus et adapte en fonction de ce dont tu as besoin.

A+
Michel

Salut

Dans ce type de cas plus complexe, je préfère me tourner vers node red.

Antoine

Un script et 4 commandes du plugin-virtual feront l’affaire, je pense. On ne va quand même pas lui faire installer node-red pour 4 variables. Enfin, pour moi, je ne le ferais pas non plus.

1 « J'aime »

Bonjour,
voici mon script

je ne connais pas du tout le « node-red »

merci

Le fichier json est situé sur un serveur ou est en local ?

il est mis automatiquement dans le repertoire local de jeedom « data » du plugin script

Alors tu peux faire un scénario, sans le plugin script. Déclenchement programmé selon la fréquence de rafraichissement que tu veux. Le scénario ne doit contenir qu’un bloc code dont le code est :

$json = file_get_contents('/var/www/html/plugins/script/data .... Chemin d accès au fichier json en local');

$valeurs = json_decode($json, true);

$dkh = $oli = $po4 = $ca = [null, null];

foreach ($valeurs as $val) {
  switch ($val['Parameter']) {
    case 'dkh':
      if ($val['Time'] > $dkh[0]) {
        $dkh[0] = $val['Time'];
        $dkh[1] = floatval($val['Value']);
      }
      break;
    case 'oli':
      if ($val['Time'] > $oli[0]) {
        $oli[0] = $val['Time'];
        $oli[1] = floatval($val['Value']);
      }
      break;
    case 'po4':
      if ($val['Time'] > $po4[0]) {
        $po4[0] = $val['Time'];
        $po4[1] = floatval($val['Value']);
      }
      break;
    case 'ca':
      if ($val['Time'] > $ca[0]) {
        $ca[0] = $val['Time'];
        $ca[1] = floatval($val['Value']);
      }
      break;
  }
}

cmd::byString('#[Le nom][de ta][commande dkh]#')->event(strval($dkh[1]));
cmd::byString('#[Le nom][de ta][commande oli]#')->event(strval($oli[1]));
cmd::byString('#[Le nom][de ta][commande po4]#')->event(strval($po4[1]));
cmd::byString('#[Le nom][de ta][commande ca]#')->event(strval($ca[1]));

Il faut préciser dans ce code :

  • le chemin d’accès au fichier json au début du script
  • les commandes info du virtuel correspondant aux différentes mesures

Avec le json que tu as fourni, ça a fonctionné pour moi.

3 « J'aime »

Waouh !!! super ca marche nickel :wink:

Merci encore je pensais pas qu’on pouvais le faire de cette façon

Top

1 « J'aime »

Tu peux indiquer que ma réponse est la solution, pour la postérité et pour ceux qui chercheront à faire la même chose un jour…

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