Récupérer les donnes de productions solaires

Bonjour,
Je souhaiterais profiter du programme réalisé par @bornich mais mes compétences limités en informatique ne me le permettent pas…

Pouvez-vous m’aider sur ces différents points :

  • Où doit-on intégrer le code python ? dans un bloc PHP juste au dessus du scénario ?
  • Faut-il installer un plugin gérant le python ? je ne trouve pas de plug-in sur le market jeedom.

Merci d’avance de votre aide.

bonsoir,

ce que j’ai fait est valable pour accéder a une ECU-C APSystem a laquelle on a accès sans identifiant ni mdp. si tu as un autre system, je ne suis pas sûr d’arriver a te faire transposer…
je veux bien essayer de te guider mais je ne suis pas un as non plus. Par contre, je peux te transmettre toutes mes codes, virtuels, etc.
pour commencer, je dirais qu’il te faut déjà python3 et pandas
pandas doit s’installer avec la commande suivante :

sudo apt-get install python3-pandas

je ne me rappelle plus comment tester s’il est bien là mais tu trouveras sur le net sans soucis

si tu es bien APS, que tu as python3 et pandas, redis moi et on continue le truc … en fin de semaine si possible car le temps est précieux la semaine …

Hello @bornich ,

Oui tout comme toi, j’ai un ECU-C APSYSTEMS. J’ai donc installé Python3 et pandas comme évoqué sur mon RPI.
Merci par avance de me guider pour la suite, quand tu le souhaites…
Bonne soirée

zut, j’ai loupé ce msg

idéalement, mentionne moi vendredi matin que je te transfère des choses vendredi aprem stp, j’ai peur de zapper :wink:

il faudra se co en local sur l’ecu et non par l’EMA

reprenons …

le but est d’arriver a ca :
image

qui correspond a ca : quand il ne fait pas nuit …


et a ca :
image
qui correspond a ca :

on est bien d’accord ?
il faut donc aller lire sur l’ecu et transformer ce qu’on a lu en virtuel grace a un scénario principalement en bloc code

le scénario qui va lire l’ecu toutes les 5 min par exemple:
pour l’instantané solaire :
créer un scénario tel que
SI
#time# > 0015 && #time# < 2345 (pour éviter de lire des données fausse pendant la mise a jour journaliere de l’ecu)
ALORS : créer un bloc code et y copier le code suivant en indiquant le bon ip a l’endroit indiqué

$script = 'monpython.py';        //Nom du fichier python
$chemin = '/var/www/html/python'; // Dossier à utiliser

if (1){ //metre à 1 la 1er fois, une fois que le fichier existe et n'est plus modifier mettre a 0
// Script python
$python = <<<'EOD'
#! /usr/bin/env python3
import pandas as pd
pd.set_option('display.max_rows', 6)
pd.set_option('display.max_columns', 6)
pd.set_option('display.width', 120)
html_tables = pd.read_html("http://METTRE ICI L'IP DE TON ECU/index.php/realtimedata")
df = html_tables[0]
df.T # transpose to align
print(df.iat[0, 0],",",df.iat[1, 0],",",df.iat[2, 0],",",df.iat[3, 0],",",df.iat[4, 0],",",df.iat[5, 0],",",df.iat[0, 1],",",df.iat[1, 1],",",df.iat[2, 1],",",df.iat[3, 1],",",df.iat[4, 1],",",df.iat[5, 1],",",df.iat[0, 5],",",df.iat[2, 5],",",df.iat[4, 5],",",df.iat[0, 6],",",df.iat[2, 6],",",df.iat[4, 6],",*")

EOD;
mkdir($chemin); // creation du dossier
file_put_contents($chemin.'/'.$script, $python); // Ecriture du fichier
}
$reponse = shell_exec('python3 '.$chemin.'/'.$script);  // execution du script 
$scenario->setLog($reponse); // recuperation des paramètres de retour du script
$tableau = explode(",", $reponse);
$tags['#ondul1px1#'] = $tableau[0];
$tags['#ondul1px2#'] = $tableau[1];
$tags['#ondul2px1#'] = $tableau[2];
$tags['#ondul2px2#'] = $tableau[3];
$tags['#ondul3px1#'] = $tableau[4];
$tags['#ondul3px2#'] = $tableau[5];
$tags['#puissondul1px1#'] = $tableau[6];
$tags['#puissondul1px2#'] = $tableau[7];
$tags['#puissondul2px1#'] = $tableau[8];
$tags['#puissondul2px2#'] = $tableau[9];
$tags['#puissondul3px1#'] = $tableau[10];
$tags['#puissondul3px2#'] = $tableau[11];
$tags['#tempondul1#'] = $tableau[12];
$tags['#tempondul2#'] = $tableau[13];
$tags['#tempondul3#'] = $tableau[14];
$tags['#commondul1#'] = $tableau[15];
$tags['#commondul2#'] = $tableau[16];
$tags['#commondul3#'] = $tableau[17];

//$tags = $scenario->getTags();
//$tags['#reponse#'] = $reponse;
$scenario->setTags($tags);

ce fabuleux scipt python va renvoyer les données sous forme de tags que j’ai traité en créant un bloc action juste sous le bloc code comme suit : (y a pas mal de texte a taper !! lol)

un second scénario structuré de la même manière avec les données suivantes :

$script1 = 'monpython1.py';        //Nom du fichier python
$chemin = '/var/www/html/python'; // Dossier à utiliser

if (1){ //metre à 1 la 1er fois, une fois que le fichier existe et n'est plus modifier mettre a 0
// Script python
$python1 = <<<'EOD'
#! /usr/bin/env python3
import pandas as pd
pd.set_option('display.max_rows', 11)
pd.set_option('display.max_columns', 2)
pd.set_option('display.width', 120)
html_tables = pd.read_html("http://METTRE L'IP DE TON ECU ICI/index.php/home")
df = html_tables[0]
df.T # transpose to align
print(df.iat[0, 1],",",df.iat[1, 1],",",df.iat[2, 1],",",df.iat[3, 1],",",df.iat[4, 1],",",df.iat[5, 1],",",df.iat[6, 1],",",df.iat[7, 1],",",df.iat[8, 1],",",df.iat[9, 1],",",df.iat[10, 1],",*")


EOD;
mkdir($chemin); // creation du dossier
file_put_contents($chemin.'/'.$script1, $python1); // Ecriture du fichier
}
$reponse1 = shell_exec('python3 '.$chemin.'/'.$script1);  // execution du script 
$scenario->setLog($reponse1); // recuperation des paramètres de retour du script
$tableau1 = explode(",", $reponse1);
$tags1['#ecu_id#'] = $tableau1[0];
$tags1['#lifetime_gene#'] = $tableau1[1];
$tags1['#last_sys_pwr#'] = $tableau1[2];
$tags1['#current_day#'] = $tableau1[3];
$tags1['#last_co#'] = $tableau1[4];
$tags1['#nb_ondul#'] = $tableau1[5];
$tags1['#nb_ondul_online#'] = $tableau1[6];
$tags1['#current_version#'] = $tableau1[7];
$tags1['#timezone#'] = $tableau1[8];
$tags1['#eth0_mac#'] = $tableau1[9];
$tags1['#wlan0_mac#'] = $tableau1[10];
//$tags['#puissondul3px2#'] = $tableau[11];
//$tags['#tempondul1#'] = $tableau[12];
//$tags['#tempondul2#'] = $tableau[13];
//$tags['#tempondul3#'] = $tableau[14];
//$tags['#commondul1#'] = $tableau[15];
//$tags['#commondul2#'] = $tableau[16];
//$tags['#commondul3#'] = $tableau[17];

//$tags = $scenario->getTags();
//$tags['#reponse#'] = $reponse;
$scenario->setTags($tags1);

et la gestion des tags :

avec une mise a zero que je conseille la nuit

enfin les virtuel où on ne fait qu’afficher les données comme par exemple :

en espérant que tu ai tout compris malgré ma pédagogie … nulle

je tiens, encore a signaler au puristes que je me suis débrouillé avec ce que je connais et ce que j’ai appris grâce a @olive.Il y a certainement plus simple ou plus propre mais ca marche

Salut @bornich ,
Merci pour ton retour… J’avoue que je ne comprends rien au code…

Je rencontre un message d’erreur dans la création du virtuel ! Voici ce qui est noté :
« Une commande portant ce nom (ondul1px2) existe déjà pour cet équipement »

D’où vient cette erreur ? Merci d’avance

Salut

Change le nom de la commande coupable. Sauvegarde puis remet le nom que tu veux. J’ai eu des comportements étranges de ce type que j’ai résolu ainsi.

Antoine

1 « J'aime »

pas grave de ne pas comprendre le code pour le moment, on verra si ce que tu récupère n’est pas conforme a tes attentes pour le modifier plus tard.

par contre pour ton erreur, je ne vois pas d’où ca peut venir. Je pense qu’il faut esssayer dans un premier temps de redémarrer et d’exécuter le scénario pour remettre des choses en place a moins que tu ai souvenir d’avoir appelé quelque chose par ce nom avant qu’on mette ca en place (vu le nom de la variable, il y a peu de chance …)

sans lire le code, tu vois que les tags renvoyés par le code sont stockés ensuite sous forme de variables. fait toi un affichage simple des variables (une par une) dans un virtuel pour commencer et voir si tu récupère bien des choses