Plugin Apsystems

Bonsoir, je suis à la recherche de savoir si quelqu’un avait déjà travaillé pour développer un plugin sur les onduleurs Apsystems pour remonter les informations de la box ECU-C. J’ai déjà regarder la possibilité de remonter des informations par un script en html mais si il était possible de remonter plus de chose afin de pouvoir optimiser l’auto consommation avec jeedom. Par exemple la remonter conso et production.
Merci par avance de votre aide.

3 « J'aime »

bonjour,
pe voir avec les interlocuteurs de ce sujet

et approfondir les recherches …

1 « J'aime »

oui, ben toujours avec le script, personne ne semble développer de plugin et je n’en suis, hélas, pas capable … déjà le script, ça a été laborieux mais j’ai été bien aidé !!!

3 « J'aime »

Bonjour,
Pareil avec les ECU-R ça fonctionne très bien avec les scripts une fois qu’on a réussi.
https://community.jeedom.com/t/ap-system-api-down/58115
C’est sur qu’un plugin serait plus simple pour les nouveaux arrivants surtout que les installations solaire vont se multiplier avec les augmentations à répétition.

Bonjour, je me permet de solliciter votre aide. Car je dispose d’une installation en autoconso et je souhaite récupérer les données de l’ECU B via jeedom. J’ai bien regardé vos échanges dans le forum mais je bloque par manque de connaissance sur Python et json. Pour résumer ma situation. J’ai créé un script en ayant déposer dans le répertoire du Plugin les fichiers Mesures.PY (avec l’adress IP de l’ECU) et APSystemeECUR.PY


Après enregistrement du script j’obtiens ce message d’erreur :

mes questions : faut il un script pour lancer le fichier PSystemeECUR.PY ? et à quoi correspond ce message ?
merci d’avance pour cette première aide.

1 « J'aime »

Bonjour,
Si je lis bien, tu as ecu B alors que le script cherche des ecu R

Bonjour
Dans le dossier ou se trouve ton script
le fichier APSystemsECUR.py est absent

1 « J'aime »

J’ai lu que cela fonctionnait également avec l’ECU B.

Je l’avais enregistré les deux fichier dans le dossier du plugin script. J’ai testé à nouveau la procédure. Voilà ce que j’obtiens comme message d’erreur maintenant


Désolé de vous déranger. mais pouvez vous m’aider.
merci

Oui, ça fonctionne avec l’ECU-B, mais j’avais du adapter en fonction de tous les éléments du post.
Je prépare une autre réponse avec ce que j’ai fait pour t’aider…

Pour le moment, je ne suis qu’à cette étape, en ayant indiquer l’adresse IP dans le fichier Mesures. PY

bien merci d’avance pour ton retour. j’attends ta prochaine réponse.

2 « J'aime »

@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:

Je testerai cela demain. Merci par avance, j espère que cela va fonctionner également. Bonne fin de journée

1 « J'aime »

Bonjour, encore merci pour votre aide. J’ai suivi votre protocole très clair. mais j’ai des erreurs de synthaxe dans les scripts. J’ai solutionné celui de 14:32 en cherchant dans les échanges sur le forum. Avez vous une idée pour qu’il n’y ai plus de souci de synthaxe (version de python ?). merci d’avance

J’ai donné mon script et celui du Github, mais j’avais copié tous les fichiers.
Essayez de copier tous les fichiers du Github dans le dossier contenant le script

Bonjour,
Ce petit message pour te remercier et dire que j’ai réussi à récupérer les informations de l’ECU-B et de l’onduleur. Je n’ai pas eu besoin d’ajouter les autres fichiers du Github. J’ai eu besoin de comprendre la notion de module en python et corriger le code du script, et les noms de répertoire et cela a roulé ensuite en adaptant les scénarios avec les noms de mes objets virtuel sur jeedom.
Encore un grand merci

Tant mieux si tu as pu appliquer les corrections nécessaires et avoir du coup les infos de ton ECU-B.

Bonjour,
Tout fonctionnait bien depuis 5 jours. Mais depuis la dernière mise à jour du Core et des divers plugin, je n’arrive plus à remonter les informations de l’ECU-B. Avez vous fait ces mises à jour ? et avez vous le même problème ?
merci d’avance

Bonjour,

Oui j’ai fait la mise à jour en V4.2 et je n’ai pas eu de problème sur la remontée d’information.
Est-ce que les fichiers scripts et le fichier json généré sont tous dans le même dossier et dans le dossier du plugin script.
Avec les nouvelles sécurité, je crois qu’il faut que tout soit dans le même dossier.

Moi tout est dans:
/var/www/html/plugins/script/data/apsystems_ecur/

1 « J'aime »