Tuto - ipx800 V4 & V5 - enphase envoy - conso/prod en local

Bonjour,

Petit partage pour remonter les infos de conso et de production des installations photovoltaïque sous Enphase Envoy avec une IPX800 V5 :

  • Créer un « PUSH » pour la PRODUCTION en GET : URL de l’Envoy en local, port 80, Auth Mode : Basic, login : envoy, pass : les 6 derniers chiffres du numéro de série de votre envoy, URI : /api/v1/production

  • Créer un « PUSH » pour la PRODUCTION en GET : URL de l’Envoy en local, port 80, Auth Mode : Basic, login : envoy, pass : les 6 derniers chiffres du numéro de série de votre envoy, URI : /api/v1/consumption

Il ne vous reste plus qu’a créer de quoi parser le JSON retour qui donne :

{
  "wattHoursToday": 7992,
  "wattHoursSevenDays": 76779,
  "wattHoursLifetime": 76894,
  "wattsNow": 842
}

Voilà :slight_smile:

EDIT du 27/01/2023 :
une solution php pour IPX800 V4 a été partagée dans ce message :

8 « J'aime »

Allons plus loin : réalisons une règle de « routage solaire ».
SI « Plage horaire » et « Consommation est inférieur a production » ON « votre appareil ici (chauffe-eau, chauffage, pompe à chaleur,…).

  • plage horaires : pour éviter de lancer la règle a des moments où la production pourrait être égale à la consommation (tel que le matin ou le soir)

Qu’en dites vous ?

2 « J'aime »

Pour information, une vise à jour est en cours de déploiement sur les systèmes Envoy de Enphase (D7.4.7), celle-ci activera le « live status » dans l’application, mais supprimera la possibilité d’utiliser la fonction décrite plus haut. Pour ceux qui souhaite la conserver, désactivez les mises à jours automatique dans Toolkit.

1 « J'aime »

Bonjour Gevaudan, pourrais tu mettre le code html, car j’ai bloqué sur ta phrase : Parser le JSON …

Merci

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 :
image

Et l’echo $En_WattsNow donne ça :
image

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