@BOGAERT
Voici ce que j’ai fait pour remonter les infos de mon ECU-B et mes onduleurs YC600 et DS3
Avec Jeexplorer, j’ai créé le dossier: /var/www/html/plugins/script/data/apsystems_ecur/
J’ai coller dans ce dossier ce fichier APSystemsECUR.py.txt (13,7 Ko) (enlever le .txt pour avoir la bonne extension)
- Création d’un script nommé
ECU solaire JSON
:
#!/usr/bin/env python3
from APSystemsECUR import APSystemsECUR
import time
import asyncio
import json
from pprint import pprint
ecu_ip = "192.168.xxx.xxx"
sleep = 60
loop = asyncio.get_event_loop()
ecu = APSystemsECUR(ecu_ip)
try:
data = loop.run_until_complete(ecu.async_query_ecu())
with open("/var/www/html/plugins/script/data/apsystems_ecur/current.json", 'w') as f:
f.write(json.dumps(data))
except Exception as err:
print(f"[ERROR] {err}")
.
- Création d’un scénario nommé
ECU-B JSON
avec 4 actions (1 commande - 1 code - 1 commande - 1 code)
Le scénario est avec une répétition toutes les minutes.
// Variables à paramétrer :
// Fichier json à parser
$srcFile="/var/www/html/plugins/script/data/apsystems_ecur/current.json";
// fichier python à exécuter
$pythonFile="/var/www/html/plugins/script/data/apsystems_ecur/GetData.py";
//Nom du composant coté jdom. Ce composant doit porter des infos nommées Power, LastMaj, Jour, Total
$APSystemJeedomName="[Infos maison][APSystem]";
/*Préfix du nom des composants inverter. Autant de composant que d'inverter doivent être créés sous Jeedom.
Chacun d'eux doit contenir les informations :
"uid"
"online"
"unknown"
"frequency"
"temperature"
"signal"
"model"
"channel_qty"
"powerX" avec X allant de 0 au nombre de panneaux sur l'inverter - 1
"voltageX" avec X allant de 0 au nombre de panneaux sur l'inverter - 1
*/
$APSystemJeedomEcuPrefixName="[Infos maison][APSystemEcu";
//Récupération des données du json créé
$json = file_get_contents($srcFile);
$arr = json_decode($json, true);
//$error=json_last_error();
//$scenario->setLog("Error ". $error);
// récupération des colonnes à traiter (time et power)
$time = $arr["timestamp"];
$power = $arr["current_power"];
$today = $arr["today_energy"];
$lifetime = $arr["lifetime_energy"];
cmd::byString("#" . $APSystemJeedomName . "[Power]#")->event($power);
cmd::byString("#" . $APSystemJeedomName . "[LastMaj]#")->event($time);
cmd::byString("#" . $APSystemJeedomName . "[Jour]#")->event($today);
cmd::byString("#" . $APSystemJeedomName . "[Total]#")->event($lifetime);
// récupération du dernier élément
$inverters = $arr["inverters"];
$i=0;
// Pour chaque inverter
foreach ($inverters as $currinverter) {
// Pour toutes les données de l'inverter courant
foreach ($currinverter as $key => $val) {
// Cas de power et voltage qui sont des tableaux
if ($key == "power" || $key == "voltage") {
$j = 0;
foreach ($val as $powervoltage) {
//Traitement des tableaux de puissance / voltage pour chaque panneau, on affecte les valeurs à power0, power1 ... ou voltage0, voltage1 ...
cmd::byString("#" . $APSystemJeedomEcuPrefixName . $i ."][" . $key . $j . "]#")->event($val[$j]);
$j = $j + 1;
}
} else {
cmd::byString("#" . $APSystemJeedomEcuPrefixName . $i ."][" . $key . "]#")->event($val);
}
}
$i = $i + 1;
}
// Fichier json à parser
$srcFile="/var/www/html/plugins/script/data/apsystems_ecur/current.json";
shell_exec ("rm $srcFile");
.
J’ai programmé le scénario pour qu’il ne tourne que durant les heures de production (heures de levé/couché de soleil), pas besoin de plus.
.
.
.
- Création de 3 virtuels -
APSystem
-APSystemEcu0
etAPSystemEcu1
Virtuel APSytem
Virtuel APSystemEcu0
Virtuel APSystemEcu1 (Dupliquer le précédent en changeant que le nécessaire)
.
.
Si j’ai rien oublié, cela devrait fonctionner…