Utilisation du parser

Bonjour @Jweb

Merci pour le retour, ok c’est clair. :frowning_face:
Peut être que @GCE aurait cela dans le viseur pour un prochain update?
A suivre …
Cdlt

Bonjour.
Je ne me souviens plus si cela a déjà été demandé mais serait-il possible d’accepter plus de possibilités en entrée d’un clef à sortie IO, du genre On, ON, Off, OFF, … (j’imagine mais je n’ai pas testé qu’il y a déjà 0,1, true, TRUE, True, false, FALSE et False).
Merci.

Bonjour Thierry_59,
une évolution a en effet été demandée à ce sujet :slight_smile:
bonne journée

1 « J'aime »

Bonsoir @micou211187 , je rencontre le même problème, pouvez vous documenter votre actualisation avec le clignotant?

Cordialement
Pat

Bonjour à tous,
Je rencontre le même problème avec le parser et la limitation à 512 caractères.
Impossible de récupérer les valeurs des X-THL sur la V4mini depuis la V5.
Est ce que l’un d’entre vous a solutionné le problème ?
Une solution de contournement ?
Merci.
Jon

Edit : en relisant le post un peu plus en détail, @fgtoul, tu dis que le problème a été remonté à GCE. As-tu eu un retour ? Merci :slight_smile:

Bonjour
Il n’y a pas eu d’évolution à ma connaissance

Bonjour,

Merci pour ton retour rapide.
Je fais une demande à Helpdesk de mon côté.
Ca m’ennuie d’être obligé de repasser par un script externe pour faire communiquer la V5 avec la V4 (complexité, fiabilité principalement).
Je vous tiens au courant.

Sinon les autres, vous avez géré le problème comment ?

Merci.
Jon

Bonsoir,
Même problématique, du coup j’ai laissé mon X-THL sur la v5 qui push dans une analogique virtuelle dès que la température change. Mais je n’en suis pas satisfait car l’emplacement actuel du X-THL n’est pas idéal pour la v4 qui gère la piscine… du coup, j’attendais un update coté v4 idéalement (push en PUT)… mais il se pourrait que je passe par un jeedom si j’ai le temps de déplacer mon X-THL à coté du local piscine dans les jours qui viennent. En utilisant cette solution [Récupérer une information issue de Jeedom dans une IPX800-V5]

Bonjour à tous,

J’ai eu un retour super rapide de GCE, merci.
La limitation à 512 caractères n’est pas modifiable pour des raisons d’allocation mémoire de la V5.

Il faut donc forcément passer par une autre méthode que le parse.

Je vois 2 solutions :

  • des pushs depuis la V4 sur l’API de la V5 avec une commande SET dans des analogiques virtuelles.
    EDIT : impossible car API FullRest sur la V5
    Pas de développement possible sur la V4 pour la méthode PUT confirmé par GCE.

Il ne reste donc que la solution :

  • un script extrernalisé (Jeedom ou PHP sur NAS)
    → récupération du status.XML de la V4 puis commande curl sur l’API de la V5 avec une commande SET dans des analogiques virtuelles
    → Inconvénient : on a recours à une solution externe probablement moins fiable et moins pérenne…
    Note : c’est un peu le mode de fonctionnement du script Netatmo créé par @fgtoul qui récupère les infos sur l’API netatmo et qui fait des SET dans la V4.

Alternative : au lieu d’utiliser l’API avec des SET, le script pourrait peut être renvoyer un json à la V5 en ne gardant que les 7 X-THL (moins de 512 caractères) et du coup on continuerai d’utiliser le parse de la V5.
J’utilise un script tout fait pour pilotage de mon ampli ONKYO qui utilise la fonction Json_encode pour transformer un tableau array en objet json. Ca ferait une base.

Qu’en pensez vous ?
Quelqu’un sur le forum peut aider sur du PHP ?

Merci.
Jon

Bonjour,

J’ai écrit un petit script php hier soir hébergé sur le NAS qui fait :

  • Requête json API V4 : Get=all
  • jsondecode en array du résultat
  • suppression de toutes les entrées avant et après les 8x3 datas des 8 X-THL du array
  • jsonencode pour repasser en format json
  • echo du json

Un push sur la V5 qui appelle le script php qui lui renvoie un json des 24 datas et qui donc ne dépasse pas les 512 caractères
3 Objets Parse du résultats : un pour les XTHLi-TEMP, un pour les X-THLi-HUM, un pour les X-THLi-LUM

C’est pas encore très propre mais mes essais fonctionnent.

Donc pour ceux qui disposent d’un hébergeur web, c’est une solution plutôt facile à mettre en place.

Je publierai le script quand il sera un peu plus propre et commenté.

++
Jon

3 « J'aime »

Bonjour,

Voici le script testé et validé.

<?php
		// Script à héberger sur serveur web (NAS ou autre)
        // Permet de récupérer les valeurs de température, humidité, luminosité des 8 1ers X-THL d'une V4 depuis une V5
        // Créer un push depuis la V5 qui appelle ce script à l'adresse du serveur qui l'heberge (note : un clignotant déterminera la fréquence du psuh pour actualisation)
        // Utiliser ensuite un objet Parse pointant sur le push pour récupérer les valeurs
        // Mistoukwak le 24/12/2022 pour la communauté
                
        // Utilisation de file_get_contents pour récupérer un json depuis l'API de la V4
        // Avec la commande get=all, on récupère l'ensemble des variables de l'IPX
        $response = file_get_contents("http://192.168.X.X/api/xdevices.json?key=ZZZZZ&Get=all");
        // Création d'un tableau par conversion du json en utilisant la fonction json_decode
		$array = json_decode($response, true);
        //Les valeurs des 8 X-THL sont en position 451 à 474 
        //Suppression des 450 1ères entrées du tableau
        //Puis suppression des entrées 24 à 300 pour ne garder que les 24 valeurs des X-THL
        array_splice($array,0,450);
        array_splice($array,24,300);
        // Création d'un nouvel objet json sur la base du tableau avec la fonction json_encode
        $result=json_encode($array);
        // Renvoi du json en réponse à la requête par push de la V5
        echo $result;
  
?>

ATTENTION : bien penser à mettre votre adresse IP et votre apikey dans le code avant utilisation.

A dispo si vous avez des questions.

Note : En changeant simplement les numéros d’index dans les 2 fonctions array_slice, on peut récupérer n’importe quelle valeur de la V4 depuis la V5 !

Jon

6 « J'aime »

merci pour le partage
J’essaierai sur NAS synology dans la semaine
Bonne fêtes à tous

1 « J'aime »

Bonjour,

Un grand merci à @Mistoukwak pour le partage de son script. Ce script m’a permis de mieux comprendre les échanges possibles entre le NAS et les IpxV4 et IpxV5 et de découvrir l’usage de json_decode et de json_encode. A mon tour et sur les mêmes bases, j’ai créé un script acceptant des consignes où la requête est définie dans l’url du push V5 : adresse ip et apiKey de la V4, nature de la commande (R, C, D, VA, VI, VO, PW, XTHL…) et les index des valeurs attendues dans la limite de 8.

Exemple de requête des compteurs (C) 2, 4, 6, 8,10,12, 14 et 16 : /Domo/scriptGetV4.php?ip="192.168.x.x"&key=xxx&cmdGet=C&idx1=2&idx2=4&idx3=6&idx4=8&idx5=10&idx6=12&idx7=14&idx8=16

La réponse est : {"product":"IPX800_V4","status":"Success","C2":14792380,"C4":0,"C6":0,"C8":0,"C10":0,"C12":0,"C14":335715,"C16":0}

Pour la première XTHL : /Domo/scriptGetV4.php?ip=192.168.x.x&key=xxx&cmdGet=XTHL&idx1=1&idx2=2&idx3=3

{"product":"IPX800_V4","status":"Success","THL1-TEMP":10.24,"THL1-HUM":82.68,"THL1-LUM":0}

Voici le script « scriptGetV4.php » à placer dans le NAS :


<?php
// Sur la base du script élaboré par Mistoukwak
// url à renseigner dans le push ipxV5:
// /Domo/scriptGetV4.php?ip="192.168.x.x"&key=xxx&cmdGet=C&idx1=2&idx2=4&idx3=6&idx4=8&idx5=10&idx6=12&idx7=14&idx8=16
// l'url attendue doit contenir l'adresse ip et l'apikey d'accès à l'ipxv4, la commande (R, C, D, VA, VI, VO, XTHL...) et les index des valeurs demandées 
// le nombre de valeurs demandées est limité à 8, correspondant à la limite du nombre de clés du parser Json de l'ipxV5
// dans le cas de THL, 3idx par THL : 1=THL1-TEMP, 2=THL1-HUM , 3=THL1-LUM, 4=THL2-TEMP, 2=THL2-HUM...
// la requete vers la v4 porte sur la commande contenue dans l'url
// après décodage, selection de l'entête et des valeurs demandées par array_slice
// encodage et envoi de la réponse vers ipxV5 :
// {"product":"IPX800_V4","status":"Success","C2":14792380,"C4":0,"C6":0,"C8":0,"C10":0,"C12":0,"C14":335715,"C16":0}
$response = file_get_contents("http://".$_GET["ip"]."/api/xdevices.json?key=".$_GET["key"]."&Get=".$_GET["cmdGet"] );
$array = json_decode($response, true);
$resultArray = array_slice($array,0,2);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx1"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx2"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx3"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx4"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx5"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx6"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx7"],1);
$resultArray = $resultArray+array_slice($array,1+$_GET["idx8"],1);
$result=json_encode($resultArray);
echo $result;
?>

Bonne journée.

2 « J'aime »

Bonjour @Mistoukwak

j’attire votre attention sur un point :
le script est dépendant de la « Memory Map » actuelle de l’IPX800 V5 ou de l’API

        array_splice($array,0,450);
        array_splice($array,24,300);

En cas de modification de celle-ci, le script retournera une valeur autre que celle qui est attendue.
Vous risquez de ne pas vous en rendre compte de suite car les modifs du mapping ne sont pas commentées dans les upgrades du firmware.

Il vaudrait peut-être mieux travailler sur des éléments nommés du tableau
bonne journée et merci pour ces partages.

1 « J'aime »

Bonjour fgtoul,

La « Memory Map » actuelle de de l’ipx800V5 ou celle de l’ipx800 V4 ? :face_with_monocle:
Bonne journée.

1 « J'aime »

c’est bien la V4 , erreur de frappe :slight_smile:
un changement dans la map ou dans la commande Get=All (comme ce fut le cas en V4.04.02) et c’est la cata éventuelle :slight_smile:
l’avantage de travailler sur le fichier status.xml (j’ai déjà mis des scripts sur le forum ou le wiki) plutôt que sur une requête Get=All , c’est d’accéder aux objets par leur nom, donc pas de risque de décalage quelconque.