Forum eedomus
http://forum.eedomus.fr/

Besoin d'aide pour réalisation script - Photovoltaïque
http://forum.eedomus.fr/viewtopic.php?f=50&t=9105
Page 1 sur 1
Auteur:  bizardnime [ 30 Nov 2019 10:41 ]
Sujet du message:  Besoin d'aide pour réalisation script - Photovoltaïque

Bonjour
J'ai une installation photovoltaïque avec un onduleur solaredge. Je voudrais récupérer les valeurs de productions, les valeurs de consommation de la maison et de réinjection sur le réseau. Il est possible d'avoir ses valeurs grâce à API (Max 300 requêtes par jour).

PDF explication API solaredge :
https://www.solaredge.com/sites/default ... ng_api.pdf

En page 21 - Site Power Detailed, il y a les explications pour récupérer ses valeurs (Production-AC, Consumption, Self Consumption, Feed In, Purchased).
Je pensais utiliser le capteur HTTP pour chaque demande, mais cela risque de faire beaucoup ( même si je désactive pendant la nuit) et je ne sais pas comment introduire la variable date et temps avec eedomus.

J'ai trouvé sur ce site des créations de script :
https://github.com/topics/solaredge-api

Merci pour votre l'aide
Auteur:  opa95 [ 30 Nov 2019 12:27 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Bonjour
Je n'ai pas trop le temps en ce moment et n'ai pas non plus une grande expérience pour les liaisons avec les sites externes (en dehors des miens).
Un capteur HTTP (mode texte) peut faire directement la requête globale : J'ai fait un test en interrogeant la Zibase :
Requête : [VAR1]/sensors.xml avec VAR1 = ip_Zibase (192.168.xxx.yyy)
La réponse me donne le contenu du fichier sensors.xml et entre autres :
<evs>
<ev type="7" pro="OS" id="439220737" gmt="1575112086" v1="135" v2="60" lowbatt="0"/>
<ev type="7" pro="OS" id="439220482" gmt="1575112090" v1="191" v2="55" lowbatt="0"/>
Et pour XPATH : concat(//ev[@id=439220737]/@v1,';',//ev[@id=439220482]/@v1)
on pourrait mettre du texte "T1:" "T2:"
me donne :
Résultat XPath :
135;191
Affichage du widget : 135;190 depuis 4 min
On retrouve ces valeurs 135;191 dans l'historique, donc un script doit pouvoir les séparer.
On pourrait faire une requête toute les 2 minutes pendant 10h
Auteur:  opa95 [ 30 Nov 2019 15:48 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

(suite du message)
Pour récupérer les diverses valeurs stockées par le premier capteur HTTP (code API ex : 123456789), il suffit de créer des capteur HTTP qui utilisent un script PHP très simple et te permettent de récupérer autant de capteurs que tu as de données à suivre (ça fonctionne très bien).
Capteur de type numérique
Requête : http://localhost/script/?exec=explode_o ... &periphId=[VAR1]
VAR1 : code API 123456789
XPATH : \\valeur1 (ou valeur2, ou...) [ dans mon cas : (\\T1)*0.1 (Zibase renvoie les valeurs en 0.1°C)].
Le code PHP est assez court (une dizaine de lignes).
Auteur:  bizardnime [ 30 Nov 2019 17:01 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Merci pour l'aider


Comment je pourrais introduire la date et l'heure dans mon capteur texte?
Car ma demande doit prendre en compte un recherche toutes les 15 min. Cela implique une variation de date et d'heure automatique.
Auteur:  opa95 [ 30 Nov 2019 18:11 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Je ne pense pas que l'on puisse éviter de créer un script PHP.
Soit on gère les flux à envoyer sur le net avec les commandes de type Socket_... et on récupère la donnée (c'est lourd, mais c'est faisable)
Soit on crée un capteur virtuel (code API 2222) déclenché toutes les 15 minutes le jour, qui crée le start_time et le end_time nécessaire comme valeur de capteur et on récupère la valeur en mettant dans VAR2 la valeur [LAST_VALUE_PERPH_ID=2222] ou directement dans le lien de la requête.
Le capteur virtuel a besoin d'un script simple, puisqu'il suffit de récupérer l'heure courante pour fabriquer une chaine dans le format souhaité.
Auteur:  bizardnime [ 02 Déc 2019 22:37 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Bonjour,

J'ai fait un peu de recherche pour la rédaction de mon script. Je suis arrivé à créer URL automatique.

Code : Tout sélectionner
<?php

// Determination Date et Heure
$datefin = date('Y-m-d%20H:i:s', time() + (60 * 60));

// composition URL
$url= "https://monitoringapi.solaredge.com/site/xxxxx/powerDetails?meters=FeedIn&startTime=$datefin&endTime=$datefin&api_key=xxxxxxxxxxxxxxxxxxxxxxx";
echo "$url"
?>


Cela me donne la nouvelle adresse url automatiquement. voici la réponse si je la copie sur firefox

Code : Tout sélectionner
Aucune information de style ne semble associée à ce fichier XML. L’arbre du document est affiché ci-dessous.
<powerDetails>
<timeUnit>QUARTER_OF_AN_HOUR</timeUnit>
<unit>W</unit>
<meters>
<meterTelemetries>
<type>FeedIn</type>
<values>
<meterTelemetry>
<date class="sql-timestamp">2019-12-02 22:15:00</date>
<value>0.0</value>
</meterTelemetry>
</values>
</meterTelemetries>
</meters>
</powerDetails>


Maintenant, je dois trouver comment faire pour extraire le résultat : xpath //powerDetails/meters/meterTelemetries/values/meterTelemetry/value

Si quelqu'un a une idée pour finir me script
Auteur:  opa95 [ 02 Déc 2019 23:02 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Tu mets dans l'URL l'appel au script et dans la ligne XPATH //value devrait suffire, il me semble.
Auteur:  bizardnime [ 02 Déc 2019 23:28 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

voila la réponse

## ERROR: XML invalid [{"powerDetails":{"timeUnit":"QUARTER_OF_AN_HOUR","unit":"W","meters":[{"type":"FeedIn","values":[{"date":"2019-12-02 23:15:00","value":0.0}]}]}}].

je dois récupérer value :0.0 mais je n'arrive pas à trouver le code xpath
Auteur:  opa95 [ 03 Déc 2019 00:11 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

bizardnime a écrit:Bonjour,
Code : Tout sélectionner
<powerDetails>
<timeUnit>QUARTER_OF_AN_HOUR</timeUnit>
<unit>W</unit>
<meters>
<meterTelemetries>
<type>FeedIn</type>
<values>
<meterTelemetry>
<date class="sql-timestamp">2019-12-02 22:15:00</date>
<value>0.0</value>
</meterTelemetry>
</values>
</meterTelemetries>
</meters>
</powerDetails>


Ça c'est bien du code XML
Pas le résultat avec des {}.
On pourrait faire un script pour le décoder.
Auteur:  opa95 [ 03 Déc 2019 00:16 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Désolé J ai cliqué trop tôt, le résultat que tu affiches est du json
Auteur:  opa95 [ 03 Déc 2019 00:32 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Je suppose que tu dois préciser dans ta requête que tu veux du XML et pas du Json
Regarde dans L'API du site solar en page 6
Auteur:  merguez07 [ 03 Déc 2019 12:56 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Xml , json, l'EEdomus décode tout de base (il y a juste une case à cocher)

Si tu veux un script contactes moi en MP
Auteur:  bizardnime [ 06 Déc 2019 17:13 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Bonjour,

Désolée pour ma réponse tardive mais ma semaine était bien chargeée

Voici le script que j'ai réussi à faire

Code : Tout sélectionner
<?php

// Variable Date, Site et Key
$datefin = date('Y-m-d%20H:i:s');
$site = 'XXXXXXXXXXXXXX';
$vkey = 'XXXXXXXXXXXXXX';

// composition URL

$url= "https://monitoringapi.solaredge.com/site/$site/powerDetails.xml?meters=FeedIn&startTime=$datefin&endTime=$datefin&api_key=$vkey";


// Appel URL
$http_result = httpQuery($url);

// Recherche valeur

$xpath_expression = '/powerDetails/meters/meterTelemetries/values/meterTelemetry/value';

$xpath_result = xpath($http_result,$xpath_expression);

//Affichage résultat URL;
echo "$http_result";


?>


Il faut remplacer les XXXXXXXXXXXX au niveau du $site = 'XXXXXXXXXXXXXX' par le numéro du site de production et $vkey = 'XXXXXXXXXXXXXX' par la key api obtenu sur le serveur solaredge.

Cela fonctionne et me donne la quantité d'énergie injecter sur le réseau.

Merci pour votre aide
Auteur:  bizardnime [ 06 Déc 2019 17:24 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

J'ai reçu un mail de solaredge.

Il serait possible d'avoir les valeurs de production, consommation et injection sur le réseau directement par onduleur.

Cela permettrait d'avoir les valeurs en direct et pas toutes les 15 minutes avec une communication entre eedomus et mon onduleur solaredge.

Il semblerait que mon onduleur utilise le protocole suspect modbus TCP.

Voir ce lien : https://www.solaredge.com/sites/default ... l-note.pdf

Quelqu'un connais ce protocole et m'expliquer comment obtenir les valeurs de production, exportation et importation d’énergie?

Merci
Auteur:  Franck [ 04 Avr 2020 18:25 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

Bonjour,
Avez vous trouver une solution pour récupérer les info de SolarEdge Avec l’api ?
Je ne suis pas spécialiste mais la principe ne pourrait pas être le même que le pluging enedis de merguez ?
Auteur:  bizardnime [ 11 Avr 2020 10:36 ]
Sujet du message:  Re: Besoin d'aide pour réalisation script - Photovoltaïque

bonjour,

oui, j'ai réussi à récupérer les informations informations API de solaredge avec le script suivant

Code : Tout sélectionner
<?php

// test de l'utilisation du cache ou non
$CACHE_DURATION = 2 ; // minutes
$last_xml_success = loadVariable( 'last_xml_success' );
    if ((time() - $last_xml_success) / 60 < $CACHE_DURATION)
    {
sdk_header( 'text/xml' );
$cached_xml = loadVariable( 'cached_xml' );
echo $cached_xml;
    die ();
    }

// script php   
    // Variable Date, Site et Key

    $site = getArg('site');
    $vkey = getArg ('Key');

    // composition URL

    $url= "https://monitoringapi.solaredge.com/site/$site/currentPowerFlow.xml?api_key=$vkey";

    // Appel URL
    $http_result = httpQuery($url);

    // Recherche valeur

    $xpath_PV = '(//PV/currentPower)*1000';
    $xpath_LOAD = "(//LOAD/currentPower)*1000";
    $xpath_GRID = '(//GRID/currentPower)*1000';

    $xpath_connection = '//connections';


    $xpath_result_PV = xpath($http_result,$xpath_PV);
    $xpath_result_LOAD = xpath($http_result,$xpath_LOAD);
    $xpath_result_GRID = xpath($http_result,$xpath_GRID);
    $xpath_result_connections = xpath($http_result,$xpath_connection);

if ($xpath_result_connections == LOADGridPVLoad)
   { $PURCHASED = 0;
    $FEEDIN = $xpath_result_GRID;
    }
else
     if ($xpath_result_connections == PVLoadLOADGrid)
        {$PURCHASED = 0;
        $FEEDIN = $xpath_result_GRID;
        }
    else   
   
        { $PURCHASED = $xpath_result_GRID;
         $FEEDIN = 0;
        }

    //Affichage résultat URL;

    $xml = "<racine>". "\n";
    $xml .= "<PV>$xpath_result_PV</PV>"."\n";
    $xml .= "<LOAD>$xpath_result_LOAD</LOAD>"."\n";
    $xml .= "<GRID>$xpath_result_GRID</GRID>"."\n";
    $xml .= "<PURCHASED>$PURCHASED</PURCHASED>"."\n";
    $xml .= "<FEEDIN>$FEEDIN</FEEDIN>"."\n";
    $xml .= "<CONNECTIONS>$xpath_result_connections</CONNECTIONS>"."\n";
    $xml .= "</racine>"."\n";

// création du XML dans la variable $xml
$cached_xml = '<?xml version="1.0" encoding="utf8" ?>' ;
$cached_xml .= '<root>' ;
$cached_xml .= '<cached>0</cached>' ;
$cached_xml .= $xml;
$cached_xml .= '</root>' ;
echo $cached_xml;
    if ($xml != '' ) // non vide
    {
$cached_xml = str_replace( '<cached>0</cached>' , '<cached>1</cached>' , $cached_xml);
saveVariable( 'cached_xml' , $cached_xml);
saveVariable( 'last_xml_success' , time());
    }
?>


Merci pour l'aide
Page 1 sur 1 Le fuseau horaire est UTC+1 heure