Plugin Apsystems

@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 et APSystemEcu1

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… :wink: