Envoi automatique de la production mensuelle


Vérifiez votre devis d'installation photovoltaïque
Gratuit et sans engagement : Cliquez ICI !


PrShadoko
Messages : 23
Enregistré le : 09 sept. 2010 23:10
BDPV : prshadoko
Departement/Region : 31
Localisation : Là où même les mémés aiment la castagne

Envoi automatique de la production mensuelle

Messagepar PrShadoko » 22 oct. 2010 18:29

Voilà, j'ai vu que certains avaient la possibilité (parce qu'ils ont des logiciels ad-hoc tels que ConsoSpy) d'envoyer automatiquement leurs données de production sur BDPV.

Il se trouve que je fais tourner zzzt! sur mon ordinateur à la maison et que j'ai donc la capture de ma production sur mon SolarMax 3000S. Je peux donc très bien écrire un petit script déclenché par cron le 1er de chaque mois qui fasse la mise à jour (soit par demande directe au SolarMax 3000S de la production du mois dernier, soit par consultation de la base de données de collecte).

Y a-t-il une procédure particulière au niveau de BDPV pour pouvoir transmettre automatiquement ses dernières stats ou dois-je émuler l'envoi par HTTP de mes stats comme quand je le fais à la mano ?
Ma fiche BPDV Image
  • 14 modules Sanyo 214 Wc
  • Onduleur Sputnik SolarMax 3000S

trebosc
Fondateur GPPEP
Fondateur GPPEP
Messages : 3818
Enregistré le : 23 juil. 2007 01:00
BDPV : trebosc
Departement/Region : 31
Professionnel PV : Non
Localisation : 31 - Midi-Pyrénées
Contact :

Re: Envoi automatique de la production mensuelle

Messagepar trebosc » 22 oct. 2010 21:06

Tout est expliqué dans le post suivant : viewtopic.php?f=31&t=17236

PrShadoko
Messages : 23
Enregistré le : 09 sept. 2010 23:10
BDPV : prshadoko
Departement/Region : 31
Localisation : Là où même les mémés aiment la castagne

Re: Envoi automatique de la production mensuelle

Messagepar PrShadoko » 22 oct. 2010 23:47

trebosc a écrit :Tout est expliqué dans le post suivant : viewtopic.php?f=31&t=17236
OK, j'ai compris le principe.

Par contre, je ne vois pas ce que je devrais mettre dans mon cas comme "Numéro de compteur EDF" (ADCO) vu que c'est l'onduleur que j'interroge.
Par ailleurs, ce dernier me donne la production du mois, il faut que je te la convertisse en un index (donc cumulé).

Est-il possible que je fasse des essais sur un compte bidon histoire de ne pas saloper ma fiche BDPV ? ;)

On peut continuer par MP pour la suite (les infos secrètes ;) ).
Ma fiche BPDV Image
  • 14 modules Sanyo 214 Wc
  • Onduleur Sputnik SolarMax 3000S

trebosc
Fondateur GPPEP
Fondateur GPPEP
Messages : 3818
Enregistré le : 23 juil. 2007 01:00
BDPV : trebosc
Departement/Region : 31
Professionnel PV : Non
Localisation : 31 - Midi-Pyrénées
Contact :

Re: Envoi automatique de la production mensuelle

Messagepar trebosc » 24 oct. 2010 13:43

PrShadoko a écrit :Par contre, je ne vois pas ce que je devrais mettre dans mon cas comme "Numéro de compteur EDF" (ADCO) vu que c'est l'onduleur que j'interroge.

00000000 par exemple


Par ailleurs, ce dernier me donne la production du mois, il faut que je te la convertisse en un index (donc cumulé).

Oui.

Est-il possible que je fasse des essais sur un compte bidon histoire de ne pas saloper ma fiche BDPV ? ;)

Ben non :(
Mais il y a des messages d"erreurs parlant et la production peut toujours être

On peut continuer par MP pour la suite (les infos secrètes ;) ).

Un mp avec votre email pour continuer sera bon.

PrShadoko
Messages : 23
Enregistré le : 09 sept. 2010 23:10
BDPV : prshadoko
Departement/Region : 31
Localisation : Là où même les mémés aiment la castagne

Re: Envoi automatique de la production mensuelle

Messagepar PrShadoko » 26 oct. 2010 14:24

Et voilà, ça roule.

Pour ceux qui utilisent zzzt! (à partir de la version 0.6) ou pour ceux qui veulent du code tout fait, voilà ce que j'ai utilisé.

J'ai tout d'abord un fichier bdpv_info.php qui contient les données secrètes. Vous n'aurez donc ici que les données publiées dans le document de trebosc.

Code : Tout sélectionner

<?php
$bdpv_info = array(
      "ADCO" => "040722194143",
      "DATE" => "030320092312",
      "INDEX" => "4391479",
      "api_demandeur" => "dep_invite"
);

$bdpv_secret = "3690_invite";
Il vous faut bien évidemment le modifier pour remplacer ces données par celles qui vous ont été fournies par le site BDPV et veiller à ce que ce fichier reste secret.

Ensuite, le fichier bdpv_cron.php est à appeler tous les premiers jours du mois par cron :

Code : Tout sélectionner

<?php

// This file is meant to be called regularly every first day of the month : it gets the last month
// production from the database and updates BDPV db.

require '../inverter/class_inverter.php';
require './bdpv_info.php';

$inverter=new inverter();
$db=new db($inverter);

// Compute the total production and the date of the last monthly production
$sql ="SELECT SUM(production),max(date) FROM `zzzt_monthly`";
$db->query($sql);
$row=$db->fetch();
$dbDate=explode("-", $row[1]);

// Don't update BDPV if new monthly stat hasn't been produced
$year=date("Y");
$month=date("m");

$ok = 0;
if ( $month != "01" )
{
  if ( ($month - $dbDate[1]) == 1 )
    $ok = 1;
}
else
{
  if ( (($year - $dbDate[0]) == 1) && ($dbDate[1] == "12") )
    $ok = 1;
}

if ( $ok )
{
  // Compute date according to ddMMyyyyhhmm format expected by BDPV
  $dateIndex="01".$month.$year."0000";

  // Overwrite index (taking care to convert kWh into Wh) and date fields
  $bdpv_info["INDEX"]=intval($row[0]*1000);
  $bdpv_info["DATE"]=$dateIndex;

  // Init BDPV URL and input message for MD5 computation
  $url="http://www.bdpv.fr/_service/z_teleinfo_gen.php?";
  $md5in = $bdpv_secret;

  // Compute BDPV URL and message for MD5 computation
  foreach ($bdpv_info as $arg => $value){
    $url.=$arg."=".$value."&";
    $md5in.=$arg.$value;
  }
  $md5out=md5($md5in);
  $url.="api_sig=".$md5out;

  // You may uncomment this to debug BDPV connection
  // echo ("URL = $url\n");
  // echo ("MD5in = $md5in\n");
  // echo ("MD5 = $md5out\n");

  // Connect to BDPV now
  $lines = file($url);
  // Output BDPV answer
  foreach ($lines as $line_num => $line)
  {
      echo "Line #{$line_num} : " . htmlspecialchars($line);
  }
 
}
?>
Si vous n'avez pas zzzt! sous la main, tout ce qu'il vous faut savoir c'est que la table zzzt_monthly contient une colonne "date" au format "YYYY-mm-dd" et une colonne production qui donne la production mensuelle (ce qui explique le SUM() pour convertir le tout en index cumulé) en kWh sous forme d'un nombre décimal avec un chiffre après la virgule (comme BDPV s'attend à des Wh, on multiplie le tout par 1000) et que la classe "../inverter/class_inverter.php" encapsule tout ce qui est connexion à la base de données (en plus d'autres choses qui n'ont aucun intérêt pour cette petite explication).

Tout ce qui est après les "if ( $ok )" peut être réutilisé pour une autre interface que zzzt!

Si vous commentez les 2 dernières lignes ci-dessous :

Code : Tout sélectionner

 // Overwrite index and date fields
  $bdpv_info["INDEX"]=intval($row[0]);
  $bdpv_info["DATE"]=$dateIndex;
l'INDEX et la DATE ne seront pas mis à jour et vous devriez avoir exactement les mêmes données que dans l'exemple fourni par trebosc, ce qui devrait vous rassurer ! 8-)
Ma fiche BPDV Image
  • 14 modules Sanyo 214 Wc
  • Onduleur Sputnik SolarMax 3000S

vincefn
Messages : 18
Enregistré le : 23 août 2009 01:00
BDPV : vincefn
Departement/Region : 38
Professionnel PV : Non
Localisation : 38

Re: Envoi automatique de la production mensuelle (en python)

Messagepar vincefn » 06 févr. 2011 00:35

Au cas où cela intéresserait d'autres personnes, j'ai à mon tour écrit un petit script (cette fois en langage python) permettant de soumettre les données au site BDPV.

C'est une bête fonction python, facilement utilisable si vous relevez la production via un module teleinfo. Evidemment, il vous faut les codes api_demandeur et api_secret pour pouvoir l'utiliser.

Code : Tout sélectionner

import time
import hashlib
import urllib
def bdpv_submit(t,idxWh,login_bdpv="invite",password_bdpv="invite",api_demandeur="XXX_",api_secret="XXXX_",adco=0,submit=True):
  """ Envoi de données automatique au site BDPV.
  t: temps en seconde depuis epoch
  idxWh: production indiquée par le compteur (en Wh)
  login_bdpv: login BDPV
  password_bdpv: mot de passe BDPV (qui n'est pas envoyé en clair, mais caché dans un hash md5)
  api_demandeur et api_secret: codes à demander à contact@forum-photovoltaique.fr
  adco: le n° du compteur, mais cela doit être facultatif
  submit: mettez False si vous voulez faire des tests.. sans saturer le serveur
 
  NB:
   - envoyer les données une fois par jour en fin de nuit pour ne pas saturer le serveur
   - pour le premier mois, il faut soumettre la production au début du mois en cours en plus de la production courante
  """
  t=time.strftime("%d%m%Y%H%M",time.localtime(t))
  api_sig="%sADCO%dDATE%sINDEX%dapi_demandeur%s"%(api_secret+password_bdpv,adco,t,idxWh,api_demandeur+login_bdpv)
  api_sig_md5=hashlib.md5(api_sig).hexdigest()
  url="http://www.bdpv.fr/_service/z_teleinfo_gen.php?ADCO=%d&INDEX=%d&DATE=%s&api_demandeur=%s&api_sig=%s"%(adco,idxWh,t,api_demandeur+login_bdpv,api_sig_md5)
  if submit:
    result=urllib.URLopener().open(url).read()
    assert int(result.split()[0])>0,"La soumission automatique a été refusée:"+result
  else:
    # Pour tester
    print url


netaldod
BDPV
BDPV
Messages : 2
Enregistré le : 24 déc. 2016 13:50
BDPV : superpopini
Departement/Region : 69
Professionnel PV : Non

Shell script pour envoi automatique de la production mensuelle

Messagepar netaldod » 25 déc. 2016 11:49

Bonjour, pour ceux qui utilisent Solarmax Watcher (ou bien qui ont une page web avec la production mensuelle mise à jour automatiquement), j'ai écrit un shell script en bash
pour envoyer la production à bdpv.fr. Les détails sont ici:

https://sourceforge.net/p/solarmaxwatch ... /4f3afcf3/

Le script utilise grep pour aller chercher le chiffre de la production mensuelle dans la page web (il cherche le texte qui précède les chiffres de la production mensuelle), donc il est facile de l'adapter si vous avez une page web différente. Les instructions sont pour le Raspberry Pi mais sont en pratique les mêmes pour n'importe quel système linux.
Petite mise à jour: pour éviter d'avoir la production mensuelle du mois précédent reportée sur le nouveau mois au début du mois, j'ai mis à jour le fonctionnement du script avec cron pour envoyer la production uniquement du jour 4 jusque à la fin du mois. Les détails sont dans le lien indiqué plus haut.


Retourner vers « BDPV : Demande améliorations »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré