Commit eb4b052c authored by root's avatar root

v2.2

- Mode transparent/débug pour mieux comprendre le fonctionnement du logiciel (uniquement en mode expert) - Prise en compte de l'autonomie partielle (pour les utilisations saisonières) - Nouvelle base IGP avec toutes les valeurs d'Ines Solaire : http://ines.solaire.free.fr/gisesol.php
parent 2aee37e4
This diff is collapsed.
......@@ -47,7 +47,7 @@ Pour les utilisateurs avancés :
Télécharger et décompresser le fichier zip du master : https://github.com/kepon85/CalcPvAutonome/archive/master.zip
Le rendre accessible depuis votre serveur http et personnaliser les valeur du fichier config.ini?
Le rendre accessible depuis votre serveur http et personnaliser les valeur du fichier config.ini
### Todos
......@@ -71,6 +71,10 @@ CalcConsommation :
### Changelog
- 2.2
- Mode transparent/débug pour mieux comprendre le fonctionnement du logiciel (uniquement en mode expert)
- Prise en compte de l'autonomie partielle (pour les utilisations saisonières)
- Nouvelle base IGP avec toutes les valeurs d'Ines Solaire : http://ines.solaire.free.fr/gisesol.php
- 2.0
- Utilisation des valeurs IGP (iradiation global sur plan) de Ines Solaire : http://ines.solaire.free.fr/gisesol.php
- Choix de l'orientation, l'inclinaison et de l'albédo (en expert) en fonction de la ville
......
......@@ -25,6 +25,10 @@ Aut=2
DD=30
; Tension final des batterie (0=automatique)
U=0
; Période d'autonomie souhaité
InesPeriode='complete'
InesPeriodeDebut=5
InesPeriodeFin=9
; INES solaire
InesVille='Paris le Bourget'
; Orientation
......@@ -901,8 +905,9 @@ CABLE_1_50[prix]=12.10
; Schema câblage
[schemaCablage]
; Data
; répertoire de travail en partant du répertoire lib
var_dir_file='../var'
; répertoire de travail accessible en http
var_dir_url='./var'
; Taille (px) d'une batterie style AGM (rectangle)
batType1W=200
......
<?php $CalcPvAutonomeVersion='2.0'; ?>
<?php $CalcPvAutonomeVersion='2.2'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
......@@ -24,21 +24,20 @@
<body>
<div id="page-wrap">
<?php
$HelpMe='<p>Ce logiciel libre et colaboratif est en recherche de contributeur. N\'hésitez donc pas à donner votre avis sur la méthode de calucl, l\'orthographe, les idée de fonctionnalités qui vous manque, la couleur qui vous pique les yeux ect... <a href="http://david.mercereau.info/contact/" target="_blank">Envoyez tout ça par email</a> ou directement sur le <a href="https://github.com/kepon85/CalcPvAutonome">dépôt Github</a></p>';
$footer=true;
if (isset($_GET['p']) && $_GET['p'] == 'CalcConsommation') {
echo '<h1>Calculer ces besoins électriques journalier</h1>';
echo $HelpMe;
@include_once('./header.php');
include('./CalcConsommation.php');
@include_once('./bottom.php');
} elseif (isset($_GET['p']) && $_GET['p'] == 'Modeles') {
include('./Modeles.php');
$footer=false;
} else {
echo '<h1>Calculer/dimensionner son installation photovoltaïque isolé (autonome)</h1>';
echo $HelpMe;
@include_once('./header.php');
@include_once('./header.php');
include('./CalcPvAutonome.php');
@include_once('./bottom.php');
}
if ($footer == true) {
?>
......@@ -54,7 +53,7 @@
<img src="http://calcpvautonome.zici.fr/lib/solar-panel-1393880_1280.png" alt="">
</div>
<?php @include_once('./footer.php'); ?>
</body>
<script type="text/javascript">
$(document).ready(function() {
/* infobulles http://javascript.developpez.com/tutoriels/javascript/creer-info-bulles-css-et-javascript-simplement-avec-jquery/ */
......@@ -83,4 +82,5 @@ $(document).ready(function() {
});
</script>
</body>
</html>
......@@ -123,5 +123,19 @@ $albedos = array ('0.0',
'0.9',
'1.0');
$mois = array (
1 => 'Janvier',
2 => 'Fvrier',
3 => 'Mars',
4 => 'Avril',
5 => 'Mai',
6 => 'Juin',
7 => 'Juillet',
8 => 'Aot',
9 => 'Septembre',
10 => 'Octobre',
11 => 'Novembre',
12 => 'Dcembre',
);
// ########## Fin des data du formulaire
?>
......@@ -4,6 +4,13 @@
// Ces donnes sont rcupr depuis le site :
// http://ines.solaire.free.fr/gisesol.php
/*
* 7s par requte
* 5016 enregistrement par ville
* 65 villes
* ... il faut que a tourne 1 mois pour tout aspirer... OU lancer plusieurs fois le script avec uniquement certain albedo...
* Remarques : pas plus de 3 script lanc avec la mme IP, sinon a bloque
*/
/*
* Juste l'albedo 0.3
......@@ -25,12 +32,43 @@ include('./lib/simple_html_dom.php');
include('./ines.solaire/FormData.php');
// Sleep entre 2 requette
$SLEEP_ENTRE_REQUETE=0;
$SLEEP_ENTRE_REQUETE=2;
if (isset($argv[1])) {
$albedos = array ($argv[1]);
// Pour faire "plus" rapide
// $albedos = array ($argv[1]);
// Par groupe
/*
switch ($argv[1]) {
case 1:
$albedos = array ('0.3',
'0.7');
break;
case 2:
$albedos = array ('0.4',
'0.5');
break;
case 3:
$albedos = array ('0.8',
'0.9');
break;
default :
exit();
}*/
}
// Connect DB
try {
if (preg_match('/^sqlite/', $config_ini['irradiation']['db'])) {
......@@ -45,14 +83,14 @@ try {
// Create DB if not exists pour Optimum
try {
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".$config_ini['irradiation']['dbTableOptimum']." (
id INTEGER PRIMARY KEY,
ville CHAR(24) NOT NULL,
mois CHAR(20) NOT NULL,
inclinaison CHAR(11) NOT NULL,
orientation CHAR(5) NOT NULL,
albedo CHAR(3) NOT NULL,
igp NUMERIC(4) NOT NULL);");
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".$config_ini['irradiation']['dbTableOptimum']." (
id INTEGER PRIMARY KEY,
ville CHAR(24) NOT NULL,
mois CHAR(20) NOT NULL,
inclinaison CHAR(11) NOT NULL,
orientation CHAR(5) NOT NULL,
albedo CHAR(3) NOT NULL,
igp NUMERIC(4) NOT NULL);");
} catch ( PDOException $e ) {
$e->getMessage();
die();
......@@ -62,7 +100,18 @@ function parseHtmlForIgp() {
global $html;
$Igp = array();
$IgpMonth=0;
$IGP['defavorable']=(float) 99;
$IGP['igp1']=(float) 99;
$IGP['igp2']=(float) 99;
$IGP['igp3']=(float) 99;
$IGP['igp4']=(float) 99;
$IGP['igp5']=(float) 99;
$IGP['igp6']=(float) 99;
$IGP['igp7']=(float) 99;
$IGP['igp8']=(float) 99;
$IGP['igp9']=(float) 99;
$IGP['igp10']=(float) 99;
$IGP['igp11']=(float) 99;
$IGP['igp12']=(float) 99;
$IgpOptimumPourLaVille=null;
$IgpOptimumPourLaVilleExplode=null;
foreach($html->find('td') as $td) {
......@@ -72,14 +121,8 @@ function parseHtmlForIgp() {
if ($IgpMonth > 0) {
$Igp[$IgpMonth]=(float) str_replace(' ','',$td->plaintext);
// Si l'IGP est encore plus dfavorable que la prcdente, on l'enregistre !
//echo "\n".$Igp[$IgpMonth].'" <"'.$IGP['defavorable'].'"';
if ($Igp[$IgpMonth] < $IGP['defavorable']) {
//echo '## OK '.$Igp[$IgpMonth];
$IGP['defavorable'] = $Igp[$IgpMonth];
//} else {
// echo 'Not ok';
}
$IGP['igp'.$IgpMonth]=$Igp[$IgpMonth];
$IgpMonth++;
}
// Si la ligne IGP est trouv on commence chercher
......@@ -122,21 +165,25 @@ foreach ($villes as $ville) {
try {
if (preg_match('/^sqlite/', $config_ini['irradiation']['db'])) {
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".$villeTableName." (
id INTEGER PRIMARY KEY,
inclinaison CHAR(11) NOT NULL,
orientation CHAR(5) NOT NULL,
albedo CHAR(4) NOT NULL,
igp NUMERIC(4) NOT NULL);");
} else {
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".$villeTableName." (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
inclinaison CHAR(11) NOT NULL,
orientation CHAR(5) NOT NULL,
albedo CHAR(4) NOT NULL,
igp CHAR(4) NOT NULL);");
}
igp1 NUMERIC(4) NOT NULL,
igp2 NUMERIC(4) NOT NULL,
igp3 NUMERIC(4) NOT NULL,
igp4 NUMERIC(4) NOT NULL,
igp5 NUMERIC(4) NOT NULL,
igp6 NUMERIC(4) NOT NULL,
igp7 NUMERIC(4) NOT NULL,
igp8 NUMERIC(4) NOT NULL,
igp9 NUMERIC(4) NOT NULL,
igp10 NUMERIC(4) NOT NULL,
igp11 NUMERIC(4) NOT NULL,
igp12 NUMERIC(4) NOT NULL);");
} catch ( PDOException $e ) {
$e->getMessage();
die();
......@@ -199,15 +246,37 @@ foreach ($villes as $ville) {
$IGP = parseHtmlForIgp();
if ($IGP['defavorable'] != 99) {
echo " igp=".$IGP['defavorable'];
if ($IGP['igp1'] != 99 && $IGP['igp2'] != 99 && $IGP['igp3'] != 99 && $IGP['igp4'] != 99 && $IGP['igp5'] != 99 && $IGP['igp6'] != 99 && $IGP['igp7'] != 99 && $IGP['igp8'] != 99 && $IGP['igp9'] != 99 && $IGP['igp10'] != 99 && $IGP['igp11'] != 99 && $IGP['igp12'] != 99) {
echo " igp1=".$IGP['igp1'];
echo " igp2=".$IGP['igp2'];
echo " igp3=".$IGP['igp3'];
echo " igp4=".$IGP['igp4'];
echo " igp5=".$IGP['igp5'];
echo " igp6=".$IGP['igp6'];
echo " igp7=".$IGP['igp7'];
echo " igp8=".$IGP['igp8'];
echo " igp9=".$IGP['igp9'];
echo " igp10=".$IGP['igp10'];
echo " igp11=".$IGP['igp11'];
echo " igp12=".$IGP['igp12'];
try {
$insertcmd = $dbco->prepare("INSERT INTO ".$villeTableName." (inclinaison, orientation, albedo, igp)
VALUES (:inclinaison, :orientation, :albedo, :igp)");
$insertcmd = $dbco->prepare("INSERT INTO ".$villeTableName." (inclinaison, orientation, albedo, igp1, igp2, igp3, igp4, igp5, igp6, igp7, igp8, igp9, igp10, igp11, igp12)
VALUES (:inclinaison, :orientation, :albedo, :igp1, :igp2, :igp3, :igp4, :igp5, :igp6, :igp7, :igp8, :igp9, :igp10, :igp11, :igp12)");
$insertcmd->bindParam('inclinaison', $inclinaison, PDO::PARAM_STR);
$insertcmd->bindParam('orientation', $orientation, PDO::PARAM_STR);
$insertcmd->bindParam('albedo', $albedo, PDO::PARAM_STR);
$insertcmd->bindParam('igp', $IGP['defavorable'], PDO::PARAM_STR);
$insertcmd->bindParam('igp1', $IGP['igp1'], PDO::PARAM_STR);
$insertcmd->bindParam('igp2', $IGP['igp2'], PDO::PARAM_STR);
$insertcmd->bindParam('igp3', $IGP['igp3'], PDO::PARAM_STR);
$insertcmd->bindParam('igp4', $IGP['igp4'], PDO::PARAM_STR);
$insertcmd->bindParam('igp5', $IGP['igp5'], PDO::PARAM_STR);
$insertcmd->bindParam('igp6', $IGP['igp6'], PDO::PARAM_STR);
$insertcmd->bindParam('igp7', $IGP['igp7'], PDO::PARAM_STR);
$insertcmd->bindParam('igp8', $IGP['igp8'], PDO::PARAM_STR);
$insertcmd->bindParam('igp9', $IGP['igp9'], PDO::PARAM_STR);
$insertcmd->bindParam('igp10', $IGP['igp10'], PDO::PARAM_STR);
$insertcmd->bindParam('igp11', $IGP['igp11'], PDO::PARAM_STR);
$insertcmd->bindParam('igp12', $IGP['igp12'], PDO::PARAM_STR);
$insertcmd->execute();
} catch ( PDOException $e ) {
echo "\nDB insert error : ", $e->getMessage();
......
......@@ -3,7 +3,7 @@
Ines solaire est un logiciel permettant d'obtenir l'IGP (Irradiation Global dans le plan) qui est une valeur nécessaire pour le calcul de l'installation sur CalcPvAutonome
Le logiciel Ines Solaire : http://ines.solaire.free.fr/gisesol.php
A l'aide du script GetData.php je récupère toutes les valeurs IGP du mois le plus défavorable en testant toutes les possibilités d'orientation, d'inclinaison et d'albedo par ville (contenu dans FormData.php). Ce script rempli la base db.sqlite afin que les données reste en local pour éviter la latence du logiciel Ines Solaire lors de calcul sur CalcPvAutonome.
A l'aide du script GetData.php je récupère toutes les valeurs IGP en testant toutes les possibilités d'orientation, d'inclinaison et d'albedo par ville (contenu dans FormData.php). Ce script rempli la base db.sqlite afin que les données reste en local pour éviter la latence du logiciel Ines Solaire lors de calcul sur CalcPvAutonome.
### License
......
No preview for this file type
......@@ -83,11 +83,6 @@ function debug($msg, $balise=null) {
}
}
// Affichage des erreurs du formulaire
function erreurPrint($id, $msg) {
return '<li>'.$msg.'</li>';
}
// Recherche bonne config régulateur
function chercherRegulateur() {
......@@ -99,13 +94,13 @@ function chercherRegulateur() {
$meilleurRegulateur['diffRegulateurParcPvV'] = 99999;
$meilleurRegulateur['diffRegulateurParcPvA'] = 99999 ;
debug('<ul type="1">');
debug('<ul type="1" class="debug">');
if ($_GET['ModRegu'] == 'perso') {
// Mode perso
debug('<li>');
debug('Test de config avec le régulateur perso ::: ');
debug('Avec le régulateur perso indiqué');
debug($parcPvW.'&lt;'.$_GET['PersoReguPmaxPv'].'W, ');
......@@ -142,16 +137,16 @@ function chercherRegulateur() {
// Debug
debug('<li>');
debug('Test de config avec le '.$regulateur['nom'].' ::: ');
debug($parcPvW.'&lt;'.$regulateur['PmaxPv'].'W, ');
debug($parcPvV.'&lt;'.$regulateur['VmaxPv'].'V, ');
debug($parcPvI.'&lt;'.$regulateur['ImaxPv'].'A');
debug('Le régulateur type '.$regulateur['nom'].' à les caractéristiques suivantes : ');
debug('<ul>');
debug('Puissance maximum de panneaux accepté '.$regulateur['PmaxPv'].'W, le parc envisagé est à '.$parcPvW, 'li');
debug('Tension PV maximum de circuit ouvert accepté '.$regulateur['VmaxPv'].'V, le parc envisagé est à '.$parcPvV, 'li');
debug('Courant de court-circuit PV maximal accepté '.$regulateur['ImaxPv'].'A, le parc envisagé est à '.$parcPvI, 'li');
debug('</ul>');
if ($parcPvW < $regulateur['PmaxPv']
&& $parcPvV < $regulateur['VmaxPv']
&& $parcPvI < $regulateur['ImaxPv']) {
debug(' | ** ça fonctionne ** ');
debug('<li>Donc ça fonctionne !</li>', 'ul');
} else {
continue;
}
......@@ -164,7 +159,7 @@ function chercherRegulateur() {
if ($diffRegulateurParcPvW < $meilleurRegulateur['diffRegulateurParcPvW']
|| $diffRegulateurParcPvV < $meilleurRegulateur['diffRegulateurParcPvV']
|| $diffRegulateurParcPvI < $meilleurRegulateur['diffRegulateurParcPvA']) {
debug(' | ** meilleur config **');
debug('<li><b>Meilleur configuration</b> jusqu\'à présent car le parc est au plus prêt des caractéristiques de notre régulateur</li>', 'ul');
$meilleurRegulateur['diffRegulateurParcPvW'] = $diffRegulateurParcPvW;
$meilleurRegulateur['diffRegulateurParcPvV'] = $diffRegulateurParcPvV;
$meilleurRegulateur['diffRegulateurParcPvA'] = $diffRegulateurParcPvI;
......@@ -186,19 +181,23 @@ function chercherRegulateur() {
// On cherche le bon câble
function chercherCable_SecionAudessus($sectionMinimum) {
global $config_ini;
debug('<ul class="debug">');
foreach ($config_ini['cablage'] as $idCable => $cable) {
debug('Pour une section minimum de '.$sectionMinimum.', on test '.$cable['diametre'], 'p');
debug('Pour une section minimum de '.$sectionMinimum.', on test '.$cable['diametre'], 'li');
if ($sectionMinimum < $cable['diametre']) {
debug('<li>C\'est bon car '.$sectionMinimum.' < '.$cable['diametre'].'</li>', 'ul');
$meilleurCable['nom']=$cable['nom'];
$meilleurCable['diametre']=$cable['diametre'];
$meilleurCable['prix']=$cable['prix'];
break;
}
}
debug('</ul>');
return $meilleurCable;
}
function chercherCable_SecionPlusProche($sectionMinimum) {
global $config_ini;
debug('<ul class="debug">');
$meilleurCable['diffSection']=9999;
foreach ($config_ini['cablage'] as $idCable => $cable) {
$diffSection=$sectionMinimum-$cable['diametre'];
......@@ -206,16 +205,16 @@ function chercherCable_SecionPlusProche($sectionMinimum) {
if ($diffSection < 0) {
$diffSection=$diffSection*-1;
}
debug('<p>Pour une section la plus proche de '.$sectionMinimum.', on test '.$cable['diametre'].', il y a une différence de '.$diffSection);
debug('Pour une section la plus proche de '.$sectionMinimum.', on test '.$cable['diametre'].', il y a une différence de '.$diffSection.', li');
if ($diffSection <= $meilleurCable['diffSection']) {
$meilleurCable['nom']=$cable['nom'];
$meilleurCable['diametre']=$cable['diametre'];
$meilleurCable['prix']=$cable['prix'];
$meilleurCable['diffSection']=$diffSection;
debug(' : *** Nouvelle bonne config');
debug('<li>La différence est la plus faible, c\'est la meilleur bonne configuration</li>', 'ul');
}
debug('</p>');
}
debug('</ul>');
return $meilleurCable;
......@@ -224,11 +223,12 @@ function chercherCable_SecionPlusProche($sectionMinimum) {
// On cherche le bon convertisseur
function chercherConvertisseur($U,$Pmax) {
global $config_ini;
debug('Tension '.$U, 'p');
debug('<ul class="debug">');
foreach ($config_ini['convertisseur'] as $convertisseur) {
if ($U == $convertisseur['Vbat']) {
debug('Test pour le convertisseur '.$convertisseur['nom'], 'p');
debug('Test pour le convertisseur '.$convertisseur['nom'], 'li');
if ($Pmax <= $convertisseur['Pmax']) {
debug('<li>Il est capable de délivrer '.$convertisseur['Pmax'].'W, c\'est le bon !</li>', 'ul');
$meilleurConvertisseur['nom']=$convertisseur['nom'];
$meilleurConvertisseur['Pmax']=$convertisseur['Pmax'];
$meilleurConvertisseur['Ppointe']=$convertisseur['Ppointe'];
......@@ -237,6 +237,23 @@ function chercherConvertisseur($U,$Pmax) {
}
}
}
debug('</ul>');
return $meilleurConvertisseur;
}
// Pour les erreurs dans le formulaire
function erreurDansLeFormulaireValue0($id, $msg) {
global $erreurDansLeFormulaire, $_GET;
if (empty($_GET[$id]) || $_GET[$id] < 0) {
$erreurDansLeFormulaire['nb']++;
$erreurDansLeFormulaire['msg']=$erreurDansLeFormulaire['msg'].erreurPrint($id, $msg);
}
return $erreurDansLeFormulaire;
}
// Affichage des erreurs du formulaire
function erreurPrint($id, $msg) {
return '<li>'.$msg.'</li>';
}
?>
......@@ -12,6 +12,12 @@ function debug($msg) {
}
}
// Check l'existance du dossier var
if (!is_writable($config_ini['schemaCablage']['var_dir_file'])) {
echo 'Erreur à signaler à l\'administrateur : Vérifier la présence du répertoire '.$config_ini['schemaCablage']['var_dir_file'].' en lecture/écriture par le serveur.';
exit();
}
// Inspiré de http://codes-sources.commentcamarche.net/source/35997-centrer-un-texte-dans-une-image-gd
function centrage_texte($chaine,$taillePolice, $widthTotal) {
// Je calcule le nombre de caractères dans la chaine
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment