Hello,
C’est l’IPX V5 qui parse le json, il faut donc utiliser un objet de type « parser json » avec le résultat du push.
Précisons que depuis la mise à niveau des passerelles Envoys S metered en version 7.x, cette méthode ne marche plus. Elle requiert une authentification par jeton de type bearer que l’IPX ne sait pas gérer.
1 « J'aime »
Okayy donc en V4 c’est mort ?
Ou existe-il une solution pour récupérer les infos de prod et conso ?
Merci pour ta réponse en tout cas.
Cordialement
Alexis
Il existe toujours des solutions, mais il faudra développer un code externe à faire tourner sur une machine de type NAS ou Raspberry.
2 « J'aime »
Bonsoir
C est vrai en version 7 la envoy a changé sa méthode d authentification
Moi je récupère les infos de l envoy via node red que j envoi en Mqtt sur la V5
Rafraîchissement environ toutes les 5 secondes
Cordialement
1 « J'aime »
Perso, j’ai fais un petit script bash que j’appel avec un webhook et qui réécrit les infos dans le body response du push via l’api.
Re bonjour
J’ai essayé le code suivant hébegré sur mon NAS Synology, mais quand je l’exécute (Sur le NAS) en résultat j’ai : « Pas de données »; pourtant en décommentant les 2 lignes j’ai le résultat dans le navigateur.
<?php
$IP_IPX800="192.168.1.250:9870";
$API_key="apikey";
$url = "http://192.168.1.150/api/v1/production";
$json = file_get_contents($url);
// A décommenter pour résultat dans le navigateur
//echo $json;
//exit();
$json_devices = json_decode($json,true);
$En_WattsNow = floatval($json_devices["wattsNow"]);
$URL_Push="http://" . $IP_IPX800 . "/api/xdevices.json?key=" . $API_key . "&SetVA12=" . $En_WattsNow;
//-- Affichage de l'URL générée--------
echo $URL_Push . "<br>";
//----Envoi des données à l'API--------
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL_Push);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
?>
Je connais très peu le PHP. Pour ma par j’avais réalisé un script bash…
Je me suis basé sur le script Netatmo de @fgtoul.
Mais je ne suis pas dèv.
Je sais juste « interpréter du code » (entre guillemets)
et j’essaye d’adapter.
Bonjour,
Je ne suis pas dev non plus mais je bidouille un peu de php.
Si le echo $json ;
Renvoie le résultat, c’est que l’API retourne bien la valeur.
Pouvez vous poster la réponse pour vérifier ?
Essayez de rajouter un echo sur le En_WattsNow pour voir si le décodage et la récupération du floatval marche bien?
EDIT : pouvez vous aussi poster le résultat de la construction du $URL_Push svp?
Bonne journée.
Jon
Merci Mistoukwak
Voici le résultat avec décommentage de echo $json; et exit();
{ « wattHoursToday »: 4867, « wattHoursSevenDays »: 37475, « wattHoursLifetime »: 2400138, « wattsNow »: 783 }
Donc l’API revoie des valeurs…
Par contre en mettant l’Echo juste après le floatval (Très bonne astuce) ça donne l’indication suivante :
Avertissement : Clé de tableau indéfinie « WattsNow » dans /volume1/web/Enphase/enphase2push(4).php sur la ligne 11 { « wattHoursToday »: 4867, « wattHoursSevenDays »: 37475, « wattHoursLifetime »: 2400138, « wattsNow »: 783 }
OK.
C’est donc là qu’on doit chercher !
Je n’ai pas le temps tout de suite mais je jette un coup d’oeil un peu plus tard !
Çà ne doit pas être bien compliqué.
Jon
L’IPX V4, n’a pas la capacité de lire le résultat non parsé. Il va donc que vous ajoutiez à votre script des fonctions de type « regex » afin d’isoler le résultat souhaité, puis de le renvoyer sur votre entrée analogique virtuelle avec l’API de l’IPX
Quand je lance le PHP dans un navigateur, j’ai un résultat :
170
Par exemple, le résultat est tel quel sans guillemets rien, juste le chiffre 170 (Mes panneaux sont à l’ombre à cette heure ci)
Il n’y a pas moyen de récupérer ce nombre ?
Sans parler de parser, car il n’y a rien à parser là, j’ai juste une valeur…
l’echon $URL_Push donne ça :

Et l’echo $En_WattsNow donne ça :

PS : Entre le 2 l’ensoleillement a varié
Ce que je ne comprends pas c’est que j’ai une variable contenant une valeur et que je ne peux pas l’envoyer vers VA12
Bonjour,
Ben ca a l’air d’avancer !
On a l’API qui répond.
La bonne valeur dans la variable.
On n’arrive juste pas à la mettre dans l’IPX.
Est ce que quand vous mettez dans le navigateur :
http://192.168.1.250:9870/api/xdevices.json?key=apikey&SetVA12=173
Cela fait bien changer la variable dans l’IPX ?
Jon
Yo merci de vous intéresser à mon petit casse tête perso.
Pour répondre à Mistoukwak : non justement dans STATUS.xml 0
(Je suppose que VA12 correspond à analogV11) reste désespérément à 0.
Je pense que c’est la fin de mon code qui ne fonctionne pas, le curl …
Alexis
Bonjour,
Le code n’y est pour rien si quand vous mettez l’adresse
Dans le navigateur la variable ne change pas.
Etes vous sur de votre paramètre apikey ?
Ci-dessous extrait de la doc V4 :
Paramétrage réseau
Le menu de paramétrage réseau donne accès à la plupart des informations et des réglages réseaux de votre IPX800V4.

La page API permet de déterminer :
- si l’API est protégées par une « clef »,
- la clef en question (par défaut « apikey »), elle ne doit pas excéder 31 caractères,
- le port utilisé pour l’API M2M (par défaut 9870),
- si le M2M est activé,
- si les en-tête sont conservées lors des réponses M2M.

Il faut bien que la clé soit activée et qu’elle corresponde.
Tant que la commande ci-dessus ne fonctionnera pas dans un navigateur, elle ne fonctionnera pas avec le curl du code.
Essayer aussi d’enlever le :9870 après l’adresse de l’IPX.
Je n’ai pas souvenir l’avoir déjà mentionné dans une requête API, il est dédié au M2M il me semble.
http://192.168.1.250/api/xdevices.json?key=apikey&SetVA12=173
Et la ça devrait marcher.
Bon courage.
Jon
1 « J'aime »
J’ai suivi les conseils de Mistoukwak, donc j’ai enlevé la référence au port 9870 dans la requète et activé le M2M - ça fonctionne pour Enphase et ma requête Netatmo fonctionne toujours.
Je remets les captures ci dessous (Si cela peut aider d’autres utilisateurs avec Enphase)
Paramètres de l’IPX :
Code PHP sur le NAS :
<?php
$IP_IPX800="192.168.1.250";
//$IP_IPX800="192.168.1.250:9870";
$API_key="apikey";
$url = "http://192.168.1.150/api/v1/production";
$json = file_get_contents($url);
//echo $json;
//exit();
$json_devices = json_decode($json,true);
$En_WattsNow = ($json_devices["wattsNow"]);
//echo $En_WattsNow;
//exit();
$URL_Push="http://" . $IP_IPX800 . "/api/xdevices.json?key=" . $API_key . "&SetVA12=" . $En_WattsNow;
//-- Affichage de l'URL générée--------
echo $URL_Push . "<br>";
//exit();
//----Envoi des données à l'API--------
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL_Push);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
?>
Résultat dans un widget :

Merci à tous
3 « J'aime »
Merci pour le partage et ceux qui suivront nos messages !
@fgtoul Peux tu modifier le titre du message pour ajouter V4/V5 et intégrer la solution à mon Tuto ?
Merci