AP System API down?

Si le script est bien un executable au niveau des droits
et si c’est du python3 il ne faut pas mettre une extention py en minuscule si non il est executé en python2

@rennais35000 Comme l’a dit Olive, oui il faut bien que ton fichier test.py soit nommé test.PY.
Sinon c’est du python2 qui est executé.

Ouf on y voit peut etre le bout du tunnel!

Petite astuce si le fichier viens d’ailleurs pour re-mettre les droits
dans script éditer le fichier avec le crayon puis sauvegarder.

C’est ce que j’ai fais hier soir. Le fichier test ou Mesures était déjà avec PY depuis le début car j’avais bien vu ton avertissement @ovomaltin mais malgré ça j’ai eu les pb que vous avez suivi.
Hier soir suite à ton idée j’ai tout supprimé et téléchargé à nouveau dans le rep data avec jeexplorer, ça a fonctionné en ssh mais j’avais toujours l’erreur quand je sauvegardais dans le plugin script. Comme c’était la même erreur que si je lançais en python (2) en ssh j’ai cherché sur le forum et j’ai trouvé que @olive était déjà tombé sur ce pb, j’ai donc testé la solution en shell que t’avais soufflé jpty j’ai pu sauvegarder sans erreur, ensuite j’ai aussi lu dans un autre post que tu avais signalé cette astuce d’éditer dans script et de sauvegarder pour que les bons droits soient applqués. J’ai dons fait ça et c’est OKKKK.
j’ai surement eu un enchainement de « parasites ». Ce qui m’étonne c’est que les premiers fichiers, je les vais copié et collé dans l’éditeur de script pour justement qu’ils aient les bons droits et qu’ils se placent dans le bon répertoire, ça n’avait sans pas suffit à cause du copié collé qui doit ajouter des caractère cachés qui foutent le bazar. Je m’en rappellerais à l’avenir.
Une question au passage, on lance test.PY dans le plugin script pour qu’il soit exécuté en python 3. Si j’ai bien compris, lui il lance APSystemsECUR.py qu’on laisse en py et qui est donc exécuté en python 2 ? C’est d’une logique …
Bon maintenant je vais essayer de faire marcher ça dans jeedom.
Je vais faire ta solution ovomaltin et je ferais aussi celle de @Bandenabos s’il m’explique un peu plus ce qu’il fait de son json, il faut que je le questionne la-dessus.
Au passage je suis intéressé par tes stats, si tu peux envoyer éventuellement un template de ton scénario.
Merci pour vos interventions et votre aide.

non c’est une librarie c’est ton test.PY qui l’utilise et lui est en python3 !

il faut juste que ta librairie soit dans la même version de python

Ok je comprends, merci olive.
Pour que je sache faire la différence, on repère comment que c’est une librairie quand on édite un fichier python ?

Capture d’écran 2021-04-29 à 11.26.24

1 « J'aime »

ça fonctionne alors :+1:

il y a peut de différence la librarie est souvent appeler par un import depuis un autre fichier
elle comporte habituellement des functions …

Allé hop, la partie remontée des infos sur les inverters / panneaux, c’est fait :

le python n’a pas changé (ouf).

Par contre la partie script dans sa globalité (avec les bonnes balises pour le code si j’ai bien compris). J’ai ajouté en tête les différentes variables nécessaires :

//https://github.com/ksheumaker/homeassistant-apsystems_ecur

// Variables à paramétrer : 
// Fichier json à parser
$srcFile="/mnt/Syno/Jeedom/production/current.json";
// fichier python à exécuter
$pythonFile="/home/dromobile/apsystems_ecur/getData.py";
//Nom du composant coté jdom. Ce composant doit porter des infos nommées Power, LastMaj, Jour, Total
$APSystemJeedomName="[APS][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="[APS][APSystemEcu";




// création du fichier de données
shell_exec ("rm $srcFile");
shell_exec ("python3 " . $pythonFile);

//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;
}

Reste maintenant à faire un joli désign et des remontées d’alerte si un ano est constatée …

1 « J'aime »

Content de savoir que ca marche!
Le scenario fait un refresh de l’equipement de script toutes les 5 minutes et execute le code suivant

$cmdMesure = cmd::byString("#[Equipements IT][APSystemDirect][jsonMesures]#");
$mesuresFormatted = str_replace("'", "\"", $cmdMesure->execCmd());
$mesuresFormatted = str_replace("True", "\"True\"", $mesuresFormatted);
$mesuresFormatted = str_replace("False", "\"False\"", $mesuresFormatted);
$mesures = json_decode($mesuresFormatted);
$scenario->setLog($mesures->{'timestamp'});

$cmdPower = cmd::byString('#[Equipements IT][APSystemDirect Valeurs][power]#');
$cmdEnergy = cmd::byString('#[Equipements IT][APSystemDirect Valeurs][energy]#');

// constant
$d1=new DateTime("2012-07-08 10:00:00.000000");
$d2=new DateTime("2012-07-08 11:00:00.000000");
$diffOneHour = $d2->getTimestamp() - $d1->getTimestamp(); 

if ($scenario->getData(latestAPUpdateDateTime) <> $mesures->{'timestamp'}) {
    if ($cmdPower->execCmd() > 0) {
      // Calculate energy produced since last measure
      $time0 = DateTime::createFromFormat("Y-m-d H:i:s", $scenario->getData(latestAPUpdateDateTime));
      $time1 = DateTime::createFromFormat("Y-m-d H:i:s", $mesures->{'timestamp'});
      $timeDiff = $time1->getTimestamp() - $time0->getTimestamp();
      $productionInWh = round($cmdPower->execCmd() * ($timeDiff / $diffOneHour), 3);
      $scenario->setLog('Prod in Wh' . $productionInWh);
      $cmdEnergy->event($productionInWh);
    }
	$scenario->setData(latestAPUpdateDateTime, $mesures->{'timestamp'});
  	$cmdPower->event($mesures->{'current_power'});
	$scenario->setLog($mesures->{'today_energy'});
	$scenario->setLog($mesures->{'current_power'});
} else { 
  $scenario->setLog('deja a jour');
}

Apres j’ai un virtuel qui historise les prods (puissance et instantEnergy) et qui fait les stats suivantes:


en utilisant les fonctions de statistique de jeedom directement.

OvO

2 « J'aime »

Faut que je mette ce qu’il faut niveau stats et controles (panneau qui donnne bien, onduleurs bien présents …). Je vais regarder ton implem …

Pour les « composants » utilisés dans jeedom j’ai un Virtuel utilisé pour le commun (prod totale …) et un virtuel par onduleur.

Et bien sur des déclencheurs pour chauffe eau / zoé / pompe piscine …

Je vais pouvoir optimier la consommation de ma production !

Surtout laisser un minimum à Mr EDF !

@Bandenabos J’ai que 4 panneaux (1,2kW en crete) donc la prod est bouffée par la piscine quasi en integralité :wink:

OvO

Aujourd’hui c’est la cata le soleil …

:slight_smile: On a tous la même idée :+1:
Pour les besoins, comme vous. Piscine, I3, chauffe eau, c’est un peu tout ça que j’essaie d’effacer.
12 panneaux qui donne 3,5 kW au bon soleil de Bretagne, un peu moins aujourd’hui mais 2 kW presque toute la matinée.
1 an d’installation et le fournisseur vient de me rembourser 611 euros. Je suis content.

8 panneaux depuis peu, j’en avait 4 jusqu’en février.

Oui la piscine ça bouffe déjà 1cv soit 750 w et ça tourne 10h par jour. Justement la première tranche de pv c’était à la base pour couvrir cette conso, l’été et en journée.
Après 8 mois avec ces 4 panneaux j’étais satisfait de la production donc commandé 4 autres. Et ceux ci sont plus performants que les anciens … a voir sur un an ce que ça donne mais justement faut optimiser pour gérer tout ce beau monde …
Les rêgles sont un peu complexes, avec la mise en route de la pompe de piscine oui mais si ça produit les 2.5Kw nécessaires au chauffe eau (et que la température de l’eau est basse) ben faut couper la pompe et déclencher le chauffe eau.
Faut anticiper le temps du lendemain pour estimer si on met en route le chauffe eau …
Et la zoé ben c’est un peu pareil, ça bouffe ses 2Kw de charge donc faut bien tout calculer pour optimiser.

Olive, je viendrais certainement vers toi pour les courbes car je vois que tu arrive à afficher plusieurs courbes sur un même graph avec des couleurs différentes, c’est cool !

Rennais3500, tu revends ta production ou c’était juste un trop perçu de la part de notre cher fournisseur d’électricité ?

Salut, un trop perçu par rapport à ma facture de l’an dernier. A priori c’est ce que j’aurais économisé cette année avec les panneaux et le changement de nos habitudes. Lave linge, lave vaisselle systématiquement quand il y a production. Chauffe eau dés que c’est possible ainsi que la piscine et depuis peu la nouvelle voiture de mme.
Je leur donne le surplus, mais j’envisage si ce n’est pas trop compliqué de peut-être doubler mon installation et de revendre le surplus du coup. Il me reste de la place pour aller jusqu’à 28 panneaux.

Aujourd’hui surprise, mon Ecu-R n’est plus connecté à internet et impossible de le reconfigurer avec l’iphone. Le wifi émis par l’ecu ne tient pas le temps de la configuration. Je me rappelle avoir galérer la première fois mais là c’est bizzare.

Olive va devoir nous faire un cours collectif avec ses beaux graphiques :smiley:

chauffe eau, piscine, chauffage … les gars
pensez panneaux thermique plutôt que voltaïque le rendement est 4 à 5 fois plus intéressant.

pour les belles courbes → influxdb et grafana.

Olive, quand tu parles de panneaux thermiques, c’est juste pour le chauffe eau ?
J"ai regardé de ce coté là mais l’installation est très couteuse et le retour sur investissement pas bon du tout surtout vu ma configuration de maison avec très peu de place pour le ballon.
C’est pour cela que j’ai opté pour les panneaux.
De mon coté le passa à plus de 3Kw oblige de refaire le tableau électrique qui a + de 30 ans et qui a besoin d’un bon lifting ! A suivre.
La revente pourquoi pas mais ça apporte son lot de contraintes il semblerait et déjà bien consommer sa production pour ne pas supprimer mais déjà alléger considérablement le cout électrique sur la maison c’est mon but. A suivre.
Pour l’instant EDF n’avait pas encore pris en compte la baisse de consommation chez moi, ça a tout juste commencé avec une baisse de 50€ par mois, mais malgré un linky communiquant je me rends compte qu’ils ne tienne pas compte des retours mensuels mais de l’annuel.
Je recevais des indications de baisse de consommation qui correspondaient à ce que je produisais (quand je n’avais que 4 panneaux) mais d’un autre coté mon mensuel ne baissait pas …
A suivre là aussi !

Bonjour,
N’oubliez pas les offres d’achats groupés organisé chaque année par Que Choisir ou Famille de France etc …
Il y a plus de 10% à gagner à chaque fois. Là je suis tranquille sur une offre à tarif bloqué pour 2 ans.
Produire pour auto-consommer au maximum et acheté le moins cher possible ce qu’on doit prendre du réseau.
J’avais regardé pour les panneaux thermique pour le chauffe eau, mais le toit bien orienté est sur une dépendance à 25 mètres de la maison principale.
Bon Dimanche au soleil :sunrise:

Bonjour,
Bon je suis toujours en test et je dois merder quelquepart dans ma compréhension.
Tu dis qu’il faut créer autant de composants que l’on a d’inverter.
3 inverters, j’ai donc créé 3 virtuels nommés ainsi :
APSystemEcu0
APSystemEcu1
APSystemEcu2
et ils sont dans l’Objet [APS]
comme le virtuel global et j’ai bien renseigné dans le scénario.

$APSystemJeedomName=« [APS][Production totale APS] »;
et
$APSystemJeedomEcuPrefixName=« [APS][APSystemEcu] »;

Dans l’objet APS j’ai bien le virtuel [Production totale APS] qui se met à jour mais pas les 3 inverters.
Et je ne vois pas mon erreur qui doit être sous mes yeux :tipping_hand_man: donc appel à l’oeil neuf :slight_smile:
Au cas où j’ai vérifié mon json qui contient bien toutes les valeurs.
Cldt
Heddy