Enphase - Envoy - Script - Json Node-Red

Il te manque les ’ sur la variable ip et le request_http.

j 'ai mis les ’
et j 'ai ca maintenant

[2022-08-25 19:13:48][SCENARIO] Start : Scenario lance manuellement.
[2022-08-25 19:13:48][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-08-25 19:13:48][SCENARIO] Exécution d'un bloc code
[2022-08-25 19:13:48][SCENARIO] syntax error, unexpected ',', expecting end of file
[2022-08-25 19:13:48][SCENARIO] Fin correcte du scénario

$ip = '192.168.1.15';

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

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

Il y a une virgule en trop sur la ligne 16 de ce code :

$tags['#ProdInstPhC#'] = $json[0]['channels'][2]['activePower'];
1 « J'aime »

modif fait
mais j 'ai ca maintenant

2022-08-25 20:49:03][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2022-08-25 20:49:03][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-08-25 20:49:03][SCENARIO] Exécution d'un bloc code
[2022-08-25 20:49:03][SCENARIO] ----0
[2022-08-25 20:49:03][SCENARIO] meters/readings
[2022-08-25 20:49:03][SCENARIO] Call to a member function setCURLOPT_HTTPAUTH() on string
[2022-08-25 20:49:03][SCENARIO] Fin correcte du scénario

Met donc l’ensemble de ton bloc code :slight_smile:

Faut juste faire un copier/coller et changer l’IP … et virer la virgule de la ligne 16 … donc :

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

$ip = '192.168.1.15';

///////////////////////////////////
$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 »

j 'ai cherche plus complique , merci a toi
maintenant faut juste que je voies les infos qui remontent car la je vois que ca

Recherche $scenario->setTags sur Community et tu trouveras une flopée d’exemples pour comprendre comment ça marche.

Ensuite, event pour pousser les tags dans des commandes.

1 « J'aime »

Bonjour a tous ;
Je suis ce topic car je récupère mes infos enphase via Script timer a 10s, mais une info me manque. Comment faite vous pour avoir le % d’indépendance énergétique du jour ?
par commande script ou par calcul ?

merci a vous

Bonjour,

Cette donnée n’est pas fourni par l’Enphase il faut donc la calculer si elle t’intéresse.

Bonjour ;
En posant la question je me suis rendu compte de ma bêtise et que effectivement c’était du calcul :upside_down_face:

Il me faut le cumul import réseau jour et le cumul conso jour :joy:

Merci du retour et bonne journée

1 « J'aime »

Bonjour @olive ,
J’ai suivi ce que vous avez mis dans le script car je viens de faire installer des panneaux solaire et les données que vous arrivez à récupérer me conviendrait mais je n’y arrive pas malgré de nombreux, nombreux… essais. :smiling_face_with_tear:


image
Quelqu’un aurait-il une idée?
Merci.

Bonjour,

Regarde à nouveau le premier post, ce n’est pas comme ça qu’il faut renseigner le chemin (http://…)

Pas non plus d’utilisateur et mot de passe

Ceci dit, quelle est la version du firmware de ton Enphase parce que comme tu y accéder en https il y a de forte chance pour que ce soit une V7, non ?

Bonjour
Depuis ce matin, je n’arrive plus à récupérer les données du fichier JSON de ma connexion enphase envoy
J’ai le message suivant :

301 Moved Permanently

Depuis 1 an, cela fonctionnait parfaitement, mais depuis cette nuit, cela ne fonctionne plus.
Avez vous une idée ? merci

1 « J'aime »

Oui, ta passerelle a du passer en V7
Vérifie sur enlighteen et regarde les sujets sur Community.

Plugin Enphase Envoyé, Enphase Secure et le tuto que j’ai fait sur nodered.

J’ai enfin réussi a réadapter le code pour palier a l’authent

Si ca peut aider, j’ai gardé le meme code après qui parse le json, j’ai uniquement modifié la méthode de connexion par

$token = 'Generer le token via le lien sur la page de la passerelle'; 

$ip = '192.168.x.x'; // ip de votre passelle

// Créer le contexte de flux avec l'option SSL
$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ]
]);

// Effectuer la requête en utilisant file_get_contents()
$url = "https://$ip/production.json"; // ou autre url qui vous interesse
$options = [
    'http' => [
        'header' => 'Authorization: Bearer ' . $token,
    ],
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ]
];
$result = file_get_contents($url, false, stream_context_create($options));

$json = json_decode(trim($result), true);

J’ai galeré car il me semble (comprehension limité) que le code de jeedom ne prend pas en compte toutes les options standards type

$request_http->setCURLOPT_HTTPHEADER(array(
    'Authorization: Bearer ' . $token
));

Ca ce serait (approximativement) si vous utilisiez curl_exec à la place de file_get_contents
Avec curl_exec, ca serait:

    $url = "https://$ip/production.json"; // ou autre url qui vous interesse
    $header = array("Authorization: Bearer $token");
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url, CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_RETURNTRANSFER => true));
    $result = curl_exec($curl);
    $curl_error = curl_error($curl);
    curl_close($curl);
    if($result !== false) {
      // Votre traitement idem le résultat de file_get_contents
    }
    else  {
      echo "Unable to fetch $url. curl_error: $curl_error";
    }

Ce n’est pas Jeedom qui limite. Vous êtes en PHP sans Jeedom.

Je n’ai pas été assez clair, j’ai bien utilisé le meme genre de code que vous proposez en curl mais ca ne marchait pas, c’est pour ca que je suis passé de curl_exec à file_get_contents et ça marche.

Je ne sais pas expliquer pourquoi.

L’avant dernière ligne sert à diagnostiquer pourquoi ça ne fonctionne pas.
L’erreur dans curl_exec est:

Unable to fetch https://192.168.1.160/production.json. curl_error: SSL: certificate subject name 'envoy-xxxxxxx' does not match target host name '192.168.1.160'

Après une petite recherche sur internet de ce message d’erreur, il manque CURLOPT_SSL_VERIFYHOST => false, dans les options de curl. Je corrige au dessus.

Il y a aussi des cas où file_get_contents ne fonctionne pas.
ou est très lent: File_get_contents qui prend du temps

2 « J'aime »

Bonjour
Je viens de découvrir ce sujet très intéressant …
Merci encore à Olive pour le partage de ces informations.
J’ai appliqué ce script à mon installation de 18 panneaux, mais l’affichage est mélangé entre mes panneaux de la maison et ceux de la dépendance.
Y aurait-il un moyen de faire un tri sur un critère donné (N° Série, puissance …) pour avoir un affichage plus cohérent ?
Cela dit, je découvre plein d’informations au sujet de la passerelle Envoy…