Jeedom : Récupérer les données d’un onduleur SolarEdge

Il y a quelques temps, un membre du forum de Rosty les Bons Tuyaux, Nakor a demandé si une personne pouvait lui faire un script pour récupérer sur Jeedom les informations de son onduleur photovoltaïque SolarEdge. Et bien c’est chose faite 🙂

Vous allez pouvoir récupérer les informations remontées sur le serveur en ligne. Attention car le nombre de requêtes par jour est limité à 300 ! Il est donc important de récupérer les informations en fonction du lever et coucher du soleil, récupérables sur Jeedom par différentes façons. Ici, le tutoriel se base sur le plugin Météo.

L’onduleur à la base est un SE 5000 pour votre information mais devrait fonctionner avec le reste des onduleurs puisque l’API est commune.

Pour en savoir plus sur ce genre d’onduleur que je ne possède pas, le site du constructeur explique très bien 🙂

Prérequis :

Avant de commencer, il faut récupérer sur votre compte SolarEdge, votre identifiant utilisateur ainsi que votre identifiant de site. Si vous accédez au monitoring en ligne, vous avez déjà fait une partie de l’étape. Vous devrez également avoir le numéro de série de votre onduleur. Pour le numéro de série, il faut prendre uniquement la partie après le 1er tiret et enlever le 1er chiffre soit dans l’exemple ci-dessous : 7F0073DC-CE.

Pour générer votre identifiant de compte sur le site :  Dans la partie Entreprise, section API, Accepter le contrat, Générer votre clef API, Copier la clef et sauvegarder.

Pour générer votre identifiant de site : Dans la partie site, section API, Accepter le contrat, Générer votre clef API, Copier la clef et sauvegarder.

On aura donc ces 3 valeurs : API Utilisateur, API Site et votre numéro de série.

Sur Jeedom, il vous faudra le plugin Script et Virtuel. Le plugin Weather est optionnel.

Création du virtuel

Avec le script, on récupère les valeurs des 5 dernières minutes sur pas mal d’informations mais seulement 4 informations vont vraiment être utiles :

  • La date au format « YYYY-MM-JJ HH:MM:SS »
  • Puissance Actuelle
  • Production totale d’énergie
  • La température

Sur Jeedom, il faut créer un virtuel avec 4 commandes informations :
– 1ère : Date – Type Info/Autre
– 2ème : Puissance Actuelle – Type Info/Numérique
– 3ème : Total d’Energie Produite – Type Info/Numérique
– 4ème : Température – Type Info/Numérique

Avec le type Info/Numérique, on va pouvoir historiser les données et vous pourrez contrôler tout ça dans Jeedom.

On active l’équipement et on récupère les 4 id des commandes créées :

On aura donc l’id 3403 pour la Date, 3389 pour la Puissance Actuelle, 3390 pour le Total d’Energie Produite et enfin, 3424 pour la Température.

Création du script

Via le plugin script, on créé un nouvel équipement qu’on active et enregistre.
On créé une commande script – Type Action/Defaut, puis Nouveau. Nommez-la comme vous désirez tant que c’est une extension .py (exemple : solar.py).

On colle le script ci-dessous :

#!/usr/bin/python
 #settings

# AUTEUR : Syll
 # SITE : http://www.domoteek.fr
 # VERSION : 1.0
 # DATE : 2017-02-27
 # INSPIRE DU SCRIPT SOUS DOMOTICZ : https://github.com/scns/SolarEdge-Domoticz/blob/master/solar.py

# DECLARATION DES VARIABLES
 id = "ID_COMPTE"
 serial = "NUMERO_DE_SERIE"
 apikey = "CLEF_API_SOLAREDGE"
 ip_jeedom = "IP_LOCALE_JEEDOM"
 apikey_jeedom = "API_JEEDOM"

# ID DES COMMANDES SOUS JEEDOM
 idactivePower = "Id_commande_Jeedom"
 idtotalEnergy = "Id_commande_Jeedom"
 iddate = "Id_commande_Jeedom"
 idtemp = "Id_commande_Jeedom"

# IMPORTATION DES LIBRAIRIES
 import urllib
 import sys
 from datetime import datetime, timedelta
 from xml.dom import minidom

# RECUPERATION DES VARIABLES TEMPS
 now = datetime.now()
 minusfive = now - timedelta(minutes=now.minute % 5 + 5,
 seconds=now.second,
 microseconds=now.microsecond)
 timenow = now - timedelta(seconds=now.second,
 microseconds=now.microsecond)

# URL DES VALEURS A RECUPERER
 file = "https://monitoringapi.solaredge.com/equipment/"+id+"/"+serial+"/data.xml?startTime="+str(minusfive)+"&endTime="+str(timenow)+"&api_key="+apikey

# RECUPERATION DU FICHIER FORMAT XML
 urllib.urlretrieve (file, "/tmp/solar.xml")

# ON PARSE LES DONNEES XML
 doc = minidom.parse('/tmp/solar.xml')

# SI 0 ALORS PAS DE VALEURS SINON ON MET LES VALEURS DANS LES VARIABLES
 count_xml = doc.getElementsByTagName("count")[0]
 countr = count_xml.firstChild.data
 if countr == "0" :
 activePower = "0"
 totalEnergy ="0"
 temp = "0"
 date = "Erreur"

else:
 activePower_xml = doc.getElementsByTagName("activePower")[0]
 activePower = activePower_xml.firstChild.data
 totalEnergy_xml = doc.getElementsByTagName("totalEnergy")[0]
 totalEnergy = totalEnergy_xml.firstChild.data
 date_xml = doc.getElementsByTagName("date")[0]
 date = date_xml.firstChild.data
 temp_xml = doc.getElementsByTagName("temperature")[0]
 temp = temp_xml.firstChild.data

# ON DEFINI LES URLS POUR CHAQUE VARIABLE
 url1 = "http://"+ip_jeedom+"/core/api/jeeApi.php?apikey="+apikey_jeedom+"&type=virtual&id="+idactivePower+"&value="+activePower
 url2 = "http://"+ip_jeedom+"/core/api/jeeApi.php?apikey="+apikey_jeedom+"&type=virtual&id="+idtotalEnergy+"&value="+totalEnergy
 url3 = "http://"+ip_jeedom+"/core/api/jeeApi.php?apikey="+apikey_jeedom+"&type=virtual&id="+iddate+"&value="+date
 url4 = "http://"+ip_jeedom+"/core/api/jeeApi.php?apikey="+apikey_jeedom+"&type=virtual&id="+idtemp+"&value="+temp

# ON POST LES VARIABLES
 urllib.urlretrieve (url1)
 urllib.urlretrieve (url2)
 urllib.urlretrieve (url3)
 urllib.urlretrieve (url4)

# FIN DU SCRIPT

Attention, il n’y a pas d’espace dans les dernières lignes urlx = « http://…

Maintenant c’est à vous de travailler un peu. Dans le script, vous devez modifier les parties « DECLARATION DES VARIABLES » et « ID DES COMMANDES SOUS JEEDOM ». 

On enregistre et on sauvegarde l’équipement. Testez la commande et vérifiez les valeurs. Dans le dashboard, votre équipement devrait apparaître sans problème avec un peu de mise en page :

Mise à jour des données

Pour récupérer les informations régulièrement, il faudrait récupérer sous Jeedom les valeurs de lever et coucher du soleil. Je récupère ces informations avec le plugin Weather. Si vous avez un autre moyen pour récupérer ces informations plus précisément chez vous, il faudra l’adapter 🙂

On va donc créer 2 scénarii, le 1er pour récupérer les données et le 2nd pour activer/désactiver le 1er car la limite étant de 300 requêtes par jour par site, il est important de la faire sinon vour aurez des donnés erronées sur Jeedom (valeurs vides).

1er scénario :

Il faut créer un scénario avec une programmation toutes les 5 minutes : */5 * * * *

Ajouter une commande ACTION et choisir votre script.

Activer et enregistrer le scénario.

2nd scénario :

Créer un scénario qui se lance la nuit vers 1H00 du matin par exemple et avant que le soleil ne se lève… Il faut que vous ayez récupérer les données du plugin Météo à l’heure que vous indiquez. A 1H00, ça laisse le temps au plugin de récupérer les valeurs.

Ajouter un champs A et mettre votre commande pour récupérer l’heure du lever du soleil. Dans FAIRE, activer le 1er scénario.

Ajouter un 2ème champs A et mettre votre commande pour récupérer l’heure du coucher du soleil. Dans FAIRE, désactiver le 1er scénario.

Activer et enregistrer le scénario.

 

Conclusion

Et voilà, plus besoin de vous connecter sur le site de monitoring pour voir si tout fonctionne bien. Si vous désirez recevoir d’autres valeurs, voici ce que l’on peut récupérer et il faudra adapter le script en fonction :

 

N’hésitez pas 🙂

Une pensée sur “Jeedom : Récupérer les données d’un onduleur SolarEdge

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *