Enphase - Envoy - Script - Json Node-Red

Bonsoir @olive,

Mille merci pour cette superbe solution fonctionnelle!. J’aimerais également récupérer plusieurs valeurs du tableau créé dans d’autres variables. J’ai écrémé la doc Jeedom sans trouver de fonction adhoc. Saurais tu comment procéder ?

Bonne soirée

Bonjour,

La c’est du PHP pour la majorité des fonctions il te faut donc regarder la documentation PHP :wink:
les 2 spécifiques Jeedom sont ->setTags et ->getTags (reference dans l’API Jeedom)

Ben c’est assez "simple" après relecture du code du scenario
aprés la ligne :

$json=json_decode(trim($request_http->exec()), true);

$json est un tableau de variables a 2 dimensions
dont la première valeur est le numero de la ligne rencontrée (ça part de 0 pour la 1ere)
et la 2ième la donnée ayant pour index une des valeurs suivante:

serialNumber, LastReportDate, devType, lastReportWatts, lastReportWatts ou maxReportWatts

donc si tu veut obtenir une valeur tu fait par exemple:

$mavaleur = $json[2]['lastReportWatts'];

pour avoir la puissance du 3ième panneau (oui 2 car le 1er panneaux c’est 0)

Ne te reste plus qu’a re-sortir à la fin du bloc code ta valeur dans un tag a fin de pouvoir l’exploiter dans la suite du scenario.

$tags['#mavaleur#'] = $mavaleur;
$scenario->setTags($tags);

Bon Lundi

Bonjour @olive,

Merci pour le retour. Je cherche en fait à savoir si c’est possible et comment le faire en dehors du code du scenario et donc dans le virtuel qui accueille la variable « tableau ». Code PHP également nécessaire dans ce cas dans le virtuel ?

Bon lundi également !
Seb

Les virtuels ne sont pas prévus pour faire du PHP … à la limite dans plugin-Script qui lui peut faire du PHP mais qui sera beaucoup moins souple car tu va devoir répéter ton php pour chaque commande/info désiré …

Les commandes que je t’ai indiquées dans le scenario peuvent renseigner un virtuel composée de plusieurs commande/infos il te suffit de multiplier le nombre de variables/tag utilisés …

Ok, entendu. Super coaching dans tous les cas, merci !

Petite info pour ceux qui ont suivi ce fil, la variable « tableau » dans le virtuel ne doit pas être historisée sinon, le bloc code dans le scénario sera en erreur.

1 « J'aime »

Bonjour à tous,
Je suis en triphasé chez moi.
Savez vous s’il est possible de récupérer directement les puissances associées à chaque phase pour la conso?
Merci d’avance
Cordialement,
Silkarion


Je m’auto-réponds…
En relisant les posts, j’ai constaté que ces infos sont sous le json ‹ http:// ›.$ip.’/stream/meter’. J’ai utilisé l’APK indiquée et bingo, je récupère bien les données via un Edge.
Maintenant ça se corse.
n’étant pas du tout connaisseur du php, j’ai « copié » les exemples du dessus et tente de me connecter avec le code suivant :

$request_http = new com_http(‹ http:// ›.$ip.’/stream/meter’,"$loginInstaller","$passwdInstaller");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);
mais là…
j’ai un beau :

[2022-05-14 22:10:10][SCENARIO] Echec de la requête HTTP : http://192.168.1.xxx/stream/meter cURL error : Operation timed out after 2001 milliseconds with 827 bytes received

pourtant les login et mot de passe fonctionnent bien via un navigateur.
Une idée?

Merci d’avance,
Silkarion

Bonjour à tous,
Comme le disait les Beatles, « Help I need somebody… »
J’ai réellement besoin de pouvoir suivre ces données.
Merci d’avance!
Silkarion

Salut

Ouvre ton propre sujet alors. Mais sous node-red il est assez facile de travailler un JSON. Perso, j’exhorte les données en mqtt vers jeedom.

Antoine

Bonjour,
As tu récupéré l’info car je suis fortement intéressé.
Silkarion

Ha ben après des crises de nerf et des aides bien utiles de la communauté, je récupère maintenant les mesures des tores et des panneaux…
:sweat_smile::grin::partying_face:


bonsoir @Silkarion
actualise tout les combien de temps
cdt

Bonsoir,
Les données sont actualisées chaques secondes.
Dans le filtre nodered, on peut adapter le filtre pour limiter les flux de données.
Bonne soirée
Silkarion

bonjour
un petit tuto serais le top
cdt

2 « J'aime »

bonjour @Silkarion
pourrais tu me dire comment tu as fait pour recuperer les infos en live de tes panneaux
cdt

Je ferais un tuto pour expliquer la chose quand j’aurai un moment

Edit pour @seraphinou : [Tuto] Enphase Metered + Node-RED + jMQTT

1 « J'aime »

Bonjour à tous,
À titre d’info, suite à des pbs de stabilité avec mqtt (bufferisation des données non voulue tout à coup?!?), j’ai cherché à avoir les infos d’une autre manière…
En exploitant les infos sous ‹ http:// ›.$ip.’/ivp/meters/readings’ on récupère les mêmes infos exploitables très simplement (idem à production.json):grin:
Je scanne les infos chaque minute. Je risque juste de louper les pics de conso inférieurs à 1 minute. Pas gênant pour mon utilisation…

Mon code

$tags = $scenario->getTags();
$scenario->setLog('----0');

$ip = '192.168.1.xxx';

///////////////////////////////////
$scenario->setLog('meters/readings');

$request_http = new com_http('http://'.$ip.'/ivp/meters/readings');//,"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);

$tags['#ProdInstTotale#'] = $json[0]['activePower'];
$tags['#ProdInstPhA#'] = $json[0]['channels'][0]['activePower'];
$tags['#ProdInstPhB#'] = $json[0]['channels'][1]['activePower'];
$tags['#ProdInstPhC#'] = $json[0]['channels'][2]['activePower'];,

$scenario->setLog('ProdInstTotale :');
$scenario->setLog($tags['#ProdInstTotale#']);
$scenario->setLog('ProdInstPhA :');
$scenario->setLog($tags['#ProdInstPhA#']);
$scenario->setLog('ProdInstPhB :');
$scenario->setLog($tags['#ProdInstPhB#']);
$scenario->setLog('ProdInstPhC :');
$scenario->setLog($tags['#ProdInstPhC#']);

$tags['#ConsoInstTotale#'] = $json[1]['activePower'];
$tags['#ConsoInstPhA#'] = $json[1]['channels'][0]['activePower'];
$tags['#ConsoInstPhB#'] = $json[1]['channels'][1]['activePower'];
$tags['#ConsoInstPhC#'] = $json[1]['channels'][2]['activePower'];
$scenario->setLog('ConsoInstTotale :');
$scenario->setLog($tags['#ConsoInstTotale#']);
$scenario->setLog('ConsoInstPhA :');
$scenario->setLog($tags['#ConsoInstPhA#']);
$scenario->setLog('ConsoInstPhB :');
$scenario->setLog($tags['#ConsoInstPhB#']);
$scenario->setLog('ConsoInstPhC :');
$scenario->setLog($tags['#ConsoInstPhC#']);


$tags['#ConsoRéelleInstTotale#'] = $json[0]['activePower'] + $json[1]['activePower'];
$tags['#ConsoRéelleInstPhA#'] = $json[0]['channels'][0]['activePower'] + $json[1]['channels'][0]['activePower'];
$tags['#ConsoRéelleInstPhB#'] = $json[0]['channels'][1]['activePower'] + $json[1]['channels'][1]['activePower'];
$tags['#ConsoRéelleInstPhC#'] = $json[0]['channels'][2]['activePower'] + $json[1]['channels'][2]['activePower'];
$scenario->setLog('ConsoRéelleInstTotale :');
$scenario->setLog($tags['#ConsoRéelleInstTotale#']);
$scenario->setLog('ConsoRéelleInstPhA :');
$scenario->setLog($tags['#ConsoRéelleInstPhA#']);
$scenario->setLog('ConsoRéelleInstPhB :');
$scenario->setLog($tags['#ConsoRéelleInstPhB#']);
$scenario->setLog('ConsoRéelleInstPhC :');
$scenario->setLog($tags['#ConsoRéelleInstPhC#']);

$scenario->setTags($tags);
1 « J'aime »

bonjour @Silkarion

merci pour ton code, tu as fait dans jeedom un script de type .json ?
cdt

…Même principe qu’au post #400😀

1 « J'aime »

ok dans un scenario bloc code
voila ce que j 'ai mis j 'ai enlever login et mdp

$ip = 192.168.1.15;

///////////////////////////////////
$scenario->setLog('meters/readings');

$request_http = http://192.168.1.15/ivp/meters/readings ;

j 'ai ce message d 'erreur

2022-08-25 18:50:02][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2022-08-25 18:50:02][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-08-25 18:50:02][SCENARIO] Exécution d'un bloc code
[2022-08-25 18:50:02][SCENARIO] syntax error, unexpected '.1' (T_DNUMBER)
[2022-08-25 18:50:02][SCENARIO] Fin correcte du scénario

peut tu me dire d 'ou viens mon erreur stp
cdt