Récup données JSON très lente?

Bonjour,

Comme dit dans le titre l’exploitation de données json est très lente, mais je ne suis pas certain que le coeur du problème soit bien là. Le contexte :

J’ai 2 jeedom. Le premier gère plusieurs capteurs de température onewire et 6 compteurs électriques. Peu de plugins installées.
Le second exploite ces infos via JeeLink.

Je récupère les données par un script Python qui lit les différents compteurs via interface USB pour en faire un JSON. Cela prends environ 30 secondes. Normal vu le débit des datas des compteurs.
Le JSON est exploité par un morceau de code dans un scenario :

$output = shell_exec(« /var/www/html/plugins/script/data/LitCompteur.PY »);
$dataJson=json_decode($output,true); /// environ 30s jusque là, OK

$scenario->setData(« LinkyHC », $dataJson[‹ Linky ›][‹ HCHC ›]);
$scenario->setData(« LinkyHP », $dataJson[‹ Linky ›][‹ HCHP ›]);
$scenario->setData(« LinkyHCJW », $dataJson[‹ Linky ›][‹ HCJW ›]);
… etc pour les différents tarifs et compteurs. Au total 7 * 6 données extraites.

Cette partie prend énormément de temps, de 3 à 5mn !!! Si je ne garde qu’une affectation sur les 42, elle prend 1 mn environ (non proportionnel).

Ces variables sont reprises par un virtuel lui-même repris par Jeelink pour l’envoie vers le 2ième jeedom.

Tout fonctionnait bien depuis des mois, le ralentissement semble avoir été progressif depuis que je suis passé au tarif tempo avec un JSON plus 4x plus grand. Mais rien de certain du lien ni de la progressivité (je regarde rarement comme tourne la machine)

Du côté du premier jeedom (celui des compteurs et capteurs) :

  • Si je désactive le virtuel, l’affectations 42 variables est exécuté en moins d’une seconde
  • Le traitement de la dizaine de capteurs de température quit suit un process semblable fonctionne très bien.
  • J’ai enlevé l’historisation sur toutes les données, j’avais imaginé ralentissement du fait du grossissement de la base. D’autant que je suis sur un RPi 4 avec seulement 1Go. J’ai passé le swap de 100 Mo à 1024. La machine est fluide en accès html.

Je ne suis pas informaticien et je galère à trouver des pistes, toute idée est la bienvenue ! Je joins quelques copies d’écran à toutes fins utiles …
Un grand merci par avance.




Bonjour,

As-tu essayé de conserver ton virtuel actif mais désactiver jeelink pour tenter de voir si le soucis de performance vient de Jeelink ou du virtuel ?

Question subsidiaire : Est-ce que tu es passé par des variables (qui sont ensuite utilisé sur les commandes virtuelles) parce qu’il y a un vrai intérêt ou par exemple parce que tu ne savais pas que tu pouvais directement modifier la valeur d’une commande virtuelle depuis le scénario ?
Ce n’est surement pas la source du problème mais tant qu’à faire …

Note : Utilises la balise de texte préformatée pour mettre du code ou des logs :
image

Merci @Bison pour ton analyse :wink:

Cela ne change rien de désactiver jeelink, je ne l’avais effectivement pas précisé. Mon test consiste à enlever l’équipement de la liste de ceux transmis (menu de config Jeedom Cibles / Affectation), je n’ai pas désactivé le plugin.

Pour ta question au sujet des variable, j’avoue ne pas avoir saisie la subtilité :thinking:
Exemple de ce que je fais :
$scenario->setData(« LinkyHC », $dataJson[‹ Linky ›][‹ HCHC ›]);
Puis Virtuel :


Et Jeelink :

Tu me suggères un chemin plus court ? J’avais trouvé ce procédé en me baladant sur le forum, et comme ça fonctionnait jusque là, je m’en sui satisfait. Je ne suis pas codeur, et quand ça me parait assez simple et qu’en plus ça marche, je suis content :wink:

Oui, le chemin plus court c’est de ne pas passer par une variable et de mettre directement à jour la commande.

cmd::byString('#ta_commande_cible#')->event($dataJson['Linky']['HCHC']);

Merci pour ton bout de code optimisé :wink:, je teste ça.

MAIS la grande nouvelle, c’est que j’ai trouvé mon bug :grinning:, que je trainais depuis des semaines !!!
J’avais bien épluché les logs mais je n’avais tout simplement pas prêté attention au nombre gigantesque de messages (en orange en haut à droite) du type :

Echec de la requête HTTP : /core/api/jeeApi.php?apikey=&plugin=jeelink&type=event&remote_cmd_id=111&remote_cmd_value=22725758&remote_apikey=wDIGfvnIYZYqi220uB2YFaCO3KYI4ZvLR5pbH8CkCsMPkC5aEWv6NeQiT5OBr1Ys cURL error :

A partir de là j’ai rapidement trouvé (merci le forum :grinning:) qu’il y avait des doublons dans le Listener.
Petit nettoyage et tout roule comme sur des roulettes.

La semaine se termine bien :+1:. Bon WE :wink:.

1 « J'aime »

@jpb34 Attention dans ton dernier message tu partages une apiKey.

Même si on à pas l’ip de ton jeedom c’est pas terrible de partager cette information. Dans le mesure du possible je te conseille de la renouveller.

2 « J'aime »

Merci @Aurel, effectivement ce n’est pas très « secure ». Je la change :wink:

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.