Emphase mesure des tores

Bonjour à tous,
Je désire récupérer les mesures des tores du module de gestion Emphase.
Après longue lecture du post Enphase - Envoy - Script - Json Node-Red j’ai réussi certaines choses :grinning: …mais pas d’autres :cry:. I need you the Jeedom Community !

1/ Les infos format JSON sont sous
'http://'.$ip.'/stream/meter'
2/ J’ai généré le code ‹ installer › via l’APK du post pré-cité.
3/ Je réussi à récupérer les infos via un navigateur.
Première victoire :slight_smile:
Maintenant, je désire récupérer les données via Jeedom et ça se corse un peu pour moi sachant que je ne suis pas un expert (loin de là) en codage php.
J’ai donc copié/adapté du code permettant de récupérer d’autres infos d’autres JSON mais je bloque…

Mon code :

$scenario->setLog('config des données de connexion');
$ip = '192.168.1.xxx';
$login='installer';$passwd='xxxxxx';
$request_http = new com_http('http://'.$ip.'/stream/meter',"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$json=json_decode(trim($request_http->exec()), true);
$tags['#Pha-P#'] = $json['data']['production']['ph-a']['p'];
$scenario->setLog($tags['#Pha-P#']);
$scenario->setLog('Get data - End');
$scenario->setTags($tags);

l’équivalent fonctionne pour d’autres JSON.
Remarque : les ’ s’affichent en < ou > dans le post ??

Traces :

[2022-05-17 08:17:44][SCENARIO] Exécution d'un bloc code 
[2022-05-17 08:17:44][SCENARIO] config des données de connexion
[2022-05-17 08:17:51][SCENARIO] Echec de la requête HTTP : http://192.168.1.xxx/stream/meter cURL error : Operation timed out after 2000 milliseconds with 848 bytes received

Je suis encore loin de pouvoir décoder le json :rofl:
Help!

Silkarion

Bonjour,

C’est bien pour cela que je répète partout d’utiliser l’outils Texte préformaté comme ceci

saisissez ou collez du code ici

J’ai corrigé votre post

1 « J'aime »

Merci, c’est enfin lisible.

Antoine

Merci.
Je saurai pour la prochaine fois :slight_smile:

Bonjour,
Personne pour relever le challenge😉
Je commence à ne plus avoir beaucoup de cheveux🤣
Silkarion

Salut,

Je n’ai jamais trop essayé ce type de requête mais bon pour faire avancer un peu le sujet :

Tu peux mettre ta vraie IP et pas xxx puisque c’est une IP locale. Et puis on sait jamais, que tu es laissé xxx au lieue de la vraie IP de l’Envoy :wink::grin:.

Sinon ça ressemble bien à un pb de connexion.
As-tu essayé avec le code du sujet que tu évoques mais qui utilise l’URL avec api et dont le login n’est pas installer (et le passe basé sur le numéro de série) ?

J’ai un peu avancé…
mais pas assez
Le code :


$scenario->setLog('config des données de connexion');
$ip = '192.168.1.182';

$scenario->setLog('Init de la connexion');
$request_http = new com_http('http://'.$ip.'/stream/meter',"'installer'","'xxxPWDxxx'");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);

$scenario->setLog('Lancement de la connexion');
$response = $request_http->exec();

$scenario->setLog('Retour de la connexion');
$scenario->setLog($response);

$scenario->setLog('Fin connexion');

$scenario->setLog('Get data - start');
$json=json_decode(trim($response)), true);

$tags['#Pha-P#'] = $json['data']['production']['ph-a']['p'];
$scenario->setLog($tags['#Pha-P#']);
$scenario->setLog('Get data - End');
$scenario->setTags($tags);

Le debug :
ça semble se connecter mais pas de retour…

[2022-05-18 19:12:59][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-05-18 19:12:59][SCENARIO] Exécution d'un bloc code
[2022-05-18 19:12:59][SCENARIO] config des données de connexion
[2022-05-18 19:12:59][SCENARIO] Init de la connexion
[2022-05-18 19:12:59][SCENARIO] Lancement de la connexion
[2022-05-18 19:13:00][SCENARIO] Retour de la connexion
[2022-05-18 19:13:00][SCENARIO] 
[2022-05-18 19:13:00][SCENARIO] Fin connexion
[2022-05-18 19:13:00][SCENARIO] Get data - start
[2022-05-18 19:13:00][SCENARIO] 
[2022-05-18 19:13:00][SCENARIO] Get data - End

Les datas via navigateur :

data: {"production":{"ph-a":{"p":444.715,"q":96.773,"s":468.823,"v":230.907,"i":2.029,"pf":0.94,"f":50.0},"ph-b":{"p":444.268,"q":115.008,"s":475.937,"v":230.437,"i":2.065,"pf":0.93,"f":50.0},"ph-c":{"p":440.67,"q":114.577,"s":457.644,"v":231.653,"i":1.977,"pf":0.96,"f":50.0}},"net-consumption":{"ph-a":{"p":140.739,"q":-152.301,"s":331.633,"v":231.119,"i":1.41,"pf":0.37,"f":50.0},"ph-b":{"p":11.066,"q":-446.028,"s":455.986,"v":230.705,"i":1.976,"pf":0.02,"f":50.0},"ph-c":{"p":-133.628,"q":770.547,"s":824.608,"v":231.692,"i":3.558,"pf":-0.17,"f":50.0}},"total-consumption":{"ph-a":{"p":585.454,"q":-249.075,"s":794.413,"v":231.013,"i":3.439,"pf":0.74,"f":50.0},"ph-b":{"p":455.334,"q":-561.037,"s":931.698,"v":230.571,"i":4.041,"pf":0.49,"f":50.0},"ph-c":{"p":307.042,"q":655.97,"s":-366.333,"v":231.673,"i":-1.581,"pf":1.0,"f":50.0}}}

en boucle toutes les secondes

Silkarion

Mouep … tu devrais avoir un truc qui s’affiche avec ta variable $response pourtant.

Tu peux essayer ce code pour voir ce que ça donne chez toi :

$login='envoy';$passwd='.....';$ip = '192.168.1.182';
$request_http = new com_http('http://'.$ip.'/api/v1/production/inverters',"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$response = $request_http->exec();
$scenario->setLog($response);
$json=json_decode(trim($response), true);

$x = 0;
foreach ($json as &$value) {
  $scenario->setLog('lastReportWatts : '.$json[$x]['lastReportWatts']);
  $x++;
}

Remplace le mot de passe par les 6 derniers chiffres de ton serial Envoy

Tu devrais obtenir le json dans les logs ainsi que les dernières valeurs en W.

Edit : tu as une parenthèse en trop ici mais bon … $json=json_decode(trim($response)), true);$json=json_decode(trim($response), true);

Ça ça fonctionne bien. J’ai toutes les datas des panneaux…
J’ai ensuite sur le même code remplacé l’url, le login et le pwd.

$login='installer';$passwd='xxxxxxxx';$ip = '192.168.1.182';
$request_http = new com_http('http://'.$ip.'/stream/meter',"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$response = $request_http->exec();
$scenario->setLog($response);
$json=json_decode(trim($response), true);

Et la :

[2022-05-18 23:44:59][SCENARIO] Exécution d'un bloc code 
[2022-05-18 23:45:07][SCENARIO] Echec de la requête HTTP : http://192.168.1.182/stream/meter cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2022-05-18 23:45:07][SCENARIO] Fin correcte du scénario

Je reprends la même adresse, le même pwd dans le navigateur et c’est ok.
La différence avec le précédent json est que là c’est un flux de données… la même data s’affiche toutes les secondes. Cela apporte t-il une différence à la méthode de login …et de récupération de la data?

Bon, on va déjà remettre d’aplombs la chaine avant de la passer à json_decode … mais il faudra surement trouver ce qui ne va pas avec cette request.

Tu peux quand même essayer (on ne sait jamais) :

$login='installer';$passwd='xxxxxxxx';$ip = '192.168.1.182';
$request_http = new com_http('http://'.$ip.'/stream/meter',"$login","$passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$response = $request_http->exec();
$response = str_replace('data:','"data":',$response);
$response = '{'.$response.'}';
$scenario->setLog($response);
$json=json_decode(trim($response), true);
$scenario->setLog('ph-a / p = '.$json['data']['production']['ph-a']['p']);

EDIT : Bon visiblement c’est pas gagné avec un Stream, on y arrivera pas comme ça : Requete HTTP com_http curl & daemon plugin - #3 par nebz

EDIT2 : Ou bien faut attaquer la chose avec Node-Red (que je n’utilise pas) et envoyer en mqtt

EDIT3 : Bon ben gagné, j’ai récupéré le password installer, monté un serveur Node-RED, fait le flow (là j’ai eu bcp de mal je n’avais pas vu qu’il avait mis le code à la fin de son post alors je tentais de faire à la main).
Et je récupère bien dans MQTT Explorer les informations. Il ne resterait plus qu’à récupérer dans Jmqtt sur un equipement Jeedom.

image

Enfin voila, c’est faisable :slight_smile:

Goooddd!!
Grand merci pour ton aide.
Je vais tenter tout ça car pour l’instant node red, mqtt tout ça ne me dit rien🤣. Mais bon…tout s’apprends avec de la volonté😉
Silkarion

Oui ! Bon courage, ça va quand même te demander un peu de temps :grin:.

Si tu peux créer une VM je pourrais, si tu ne t’en sors pas, faire une tuto de récap.

A+

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.