Commit ae6c39e7 by root

- 0.3

    - Déduction automatique du régulateur nessésaire (possibilité de forcer un modèle type ou de personnaliser ces caractéristiques)
    - Déduction automatique du câblage des panneaux (série/parallèle)
parent 16165519
dev
favicon.ico
.htaccess
stats
......
......@@ -19,7 +19,9 @@ Pour l'utilisateur de base :
- (simple) Carte par zone
- (précis) Valeur du site http://ines.solaire.free.fr/gisesol_1.php (kWh/m²/j)
- En mode expert, ajuster le degré de décharge, les valeurs de rendement électrique des batteries ou du reste de l'installation,
- Déduction automatique du nombre de panneaux nessésaire (possibilité de forcer un modèle type)
- Déduction automatique du nombre de panneaux nessésaire (possibilité de forcer un modèle type ou de personnaliser ces caractéristiques)
- Déduction automatique du régulateur nessésaire (possibilité de forcer un modèle type ou de personnaliser ces caractéristiques)
- Hypothèse de câblage panneaux / régulateur (exemple : 3 panneaux en série sur 2 paralèles branché sur un régulateur)
- Déduction automatique de la tension du parc de batteries à utiliser (possibilité de forcer une valeur en mode expert)
- Déduction automatique d'une configuration du parc de câblage des batteries et du modèle à utiliser (exemple : "2 batteries 220Ah 12V en série") (possibilité de forcer un modèle de travail en mode expert)
- Estimation d'une fourchette du coût du parc de batterie & photovoltaïque
......@@ -50,8 +52,11 @@ Le rendre accessible depuis votre serveur http et personnaliser les valeur du fi
### Todos
- Bug info bulle pas bien positionné
- Bug plusieurs "auto" appariasse dans le select de tension de batterie en manipulant les régulateurs...
- Hypotèse câblage PV.
- Pouvoir personnaliser ses batteries
- Beau dessin du câblage...
- Calcul des sections de câbles
- Prévoir d'autres technologie batterie que AGM
- Générer un beau dessin avec le câblage
- Sauvegarde du résultat par URL, envoyer à un amis...
......@@ -65,6 +70,9 @@ CalcConsommation :
### Changelog
- 0.3
- Déduction automatique du régulateur nessésaire (possibilité de forcer un modèle type ou de personnaliser ces caractéristiques)
- Déduction automatique du câblage des panneaux (série/parallèle)
- 0.2
- Déduction automatique du nombre de panneaux (possibilité de forcer un modèle de travail)
- Possibilité de privilégier la technologie monocristalin ou polycristalin
......
......@@ -25,6 +25,8 @@ U=0
Deg=65
; Zone
ZoneId=3
; Marge courant court circuit régulateur Icc
reguMargeIcc=20
; Rayonnement moyen quotidien du mois le plus défavorable (kWh/m²/j)
[irradiation]
......@@ -58,7 +60,6 @@ zone8_65=2.97
; http://www.solaire-diffusion.eu/images/stories/documents/PVSI/dimensionnement_photovoltaique_TECSOL.pdf
; https://www.solaris-store.com/80-simulateur-solaire
; https://www.solariflex.com/smartblog/13/calculer-sa-consommation-electrique.html
ampouleLed[nom] = "Ampoule Led"
ampouleLed[conso] = 7
ampouleIncandescence[nom] = "Ampoule à incandescence"
......@@ -143,7 +144,6 @@ bat12V_bas=1.99
; Le plus cher que j'ai trouvé avec le moins de puissance
; 43/14 = 1,614 http://www.myshopenergy.fr/batterie-agm-etanche-vrla-12v-14ah-victron-energy-_r_199_i_401.html
bat12V_haut=3.07
; PV coût / Wc + coût de la structure 0,2 / Wc
; Le moins cher que j'ai trouvé avec le plus de puissance
; 206÷260 = 0,79 http://www.wattuneed.com/fr/panneaux-solaires-traditionnels/1347-panneau-solaire-benq-260wc-polycristallin-3170000184080.html
......@@ -152,7 +152,7 @@ pv_bas=0.79
; 55/50 = 1,1 http://www.wattuneed.com/fr/panneaux-solaires-traditionnels/814-panneau-solaire-50wc-3170000258556.html
pv_haut=1.1
; Les PV
; Les PV type
; Data exemple : http://www.myshop-solaire.com/myshop_images/divers/myshopenergy/panneaux_solaires/fiche-technique-panneau-monocristallin-bluesolar-victronenergy.pdf
[pv]
PV_Mono_30[W]=30
......@@ -303,4 +303,188 @@ GEL_2_3000[nom]="GEL OPzV 2V 3000Ah"
GEL_2_3000[V]=2
GEL_2_3000[Ah]=3000
; Les régulateurs
[regulateur]
; Les 2 derniers caractères précédé d'un "_" doivent définir la tension Vbat du parc de batterie
MPPT_75_10_12[nom]="MPTT 75/10"
MPPT_75_10_12[Vbat]=12
MPPT_75_10_12[PmaxPv]=145
MPPT_75_10_12[VmaxPv]=75
MPPT_75_10_12[ImaxPv]=10
MPPT_75_10_24[nom]="MPTT 75/10"
MPPT_75_10_24[Vbat]=24
MPPT_75_10_24[PmaxPv]=290
MPPT_75_10_24[VmaxPv]=75
MPPT_75_10_24[ImaxPv]=10
MPPT_75_15_12[nom]="MPTT 75/15"
MPPT_75_15_12[Vbat]=12
MPPT_75_15_12[PmaxPv]=220
MPPT_75_15_12[VmaxPv]=75
MPPT_75_15_12[ImaxPv]=15
MPPT_75_15_24[nom]="MPTT 75/15"
MPPT_75_15_24[Vbat]=24
MPPT_75_15_24[PmaxPv]=440
MPPT_75_15_24[VmaxPv]=75
MPPT_75_15_24[ImaxPv]=15
MPPT_100_15_12[nom]="MPTT 100/15"
MPPT_100_15_12[Vbat]=12
MPPT_100_15_12[PmaxPv]=220
MPPT_100_15_12[VmaxPv]=100
MPPT_100_15_12[ImaxPv]=15
MPPT_100_15_24[nom]="MPTT 100/15"
MPPT_100_15_24[Vbat]=24
MPPT_100_15_24[PmaxPv]=440
MPPT_100_15_24[VmaxPv]=100
MPPT_100_15_24[ImaxPv]=15
MPPT_100_30_12[nom]="MPTT 100/30"
MPPT_100_30_12[Vbat]=12
MPPT_100_30_12[PmaxPv]=440
MPPT_100_30_12[VmaxPv]=100
MPPT_100_30_12[ImaxPv]=30
MPPT_100_30_24[nom]="MPTT 100/30"
MPPT_100_30_24[Vbat]=24
MPPT_100_30_24[PmaxPv]=880
MPPT_100_30_24[VmaxPv]=100
MPPT_100_30_24[ImaxPv]=30
MPPT_100_50_12[nom]="MPTT 100/50"
MPPT_100_50_12[Vbat]=12
MPPT_100_50_12[PmaxPv]=700
MPPT_100_50_12[VmaxPv]=100
MPPT_100_50_12[ImaxPv]=50
MPPT_100_50_24[nom]="MPTT 100/50"
MPPT_100_50_24[Vbat]=24
MPPT_100_50_24[PmaxPv]=1400
MPPT_100_50_24[VmaxPv]=100
MPPT_100_50_24[ImaxPv]=50
MPPT_150_35_12[nom]="MPTT 150/35"
MPPT_150_35_12[Vbat]=12
MPPT_150_35_12[PmaxPv]=500
MPPT_150_35_12[VmaxPv]=150
MPPT_150_35_12[ImaxPv]=35
MPPT_150_35_24[nom]="MPTT 150/35"
MPPT_150_35_24[Vbat]=24
MPPT_150_35_24[PmaxPv]=1000
MPPT_150_35_24[VmaxPv]=150
MPPT_150_35_24[ImaxPv]=35
MPPT_150_35_48[nom]="MPTT 150/35"
MPPT_150_35_48[Vbat]=48
MPPT_150_35_48[PmaxPv]=2000
MPPT_150_35_48[VmaxPv]=150
MPPT_150_35_48[ImaxPv]=35
MPPT_150_45_12[nom]="MPTT 150/45"
MPPT_150_45_12[Vbat]=12
MPPT_150_45_12[PmaxPv]=650
MPPT_150_45_12[VmaxPv]=150
MPPT_150_45_12[ImaxPv]=45
MPPT_150_45_24[nom]="MPTT 150/45"
MPPT_150_45_24[Vbat]=24
MPPT_150_45_24[PmaxPv]=1300
MPPT_150_45_24[VmaxPv]=150
MPPT_150_45_24[ImaxPv]=45
MPPT_150_45_48[nom]="MPTT 150/45"
MPPT_150_45_48[Vbat]=48
MPPT_150_45_48[PmaxPv]=2600
MPPT_150_45_48[VmaxPv]=150
MPPT_150_45_48[ImaxPv]=45
MPPT_150_60_12[nom]="MPTT 150/60"
MPPT_150_60_12[Vbat]=12
MPPT_150_60_12[PmaxPv]=860
MPPT_150_60_12[VmaxPv]=150
MPPT_150_60_12[ImaxPv]=60
MPPT_150_60_24[nom]="MPTT 150/60"
MPPT_150_60_24[Vbat]=24
MPPT_150_60_24[PmaxPv]=1720
MPPT_150_60_24[VmaxPv]=150
MPPT_150_60_24[ImaxPv]=60
MPPT_150_60_48[nom]="MPTT 150/60"
MPPT_150_60_48[Vbat]=48
MPPT_150_60_48[PmaxPv]=3440
MPPT_150_60_48[VmaxPv]=150
MPPT_150_60_48[ImaxPv]=60
MPPT_150_70_12[nom]="MPTT 150/70"
MPPT_150_70_12[Vbat]=12
MPPT_150_70_12[PmaxPv]=1000
MPPT_150_70_12[VmaxPv]=150
MPPT_150_70_12[ImaxPv]=70
MPPT_150_70_24[nom]="MPTT 150/70"
MPPT_150_70_24[Vbat]=24
MPPT_150_70_24[PmaxPv]=2000
MPPT_150_70_24[VmaxPv]=150
MPPT_150_70_24[ImaxPv]=70
MPPT_150_70_48[nom]="MPTT 150/70"
MPPT_150_70_48[Vbat]=48
MPPT_150_70_48[PmaxPv]=4000
MPPT_150_70_48[VmaxPv]=150
MPPT_150_70_48[ImaxPv]=70
MPPT_150_85_12[nom]="MPTT 150/85"
MPPT_150_85_12[Vbat]=12
MPPT_150_85_12[PmaxPv]=1200
MPPT_150_85_12[VmaxPv]=150
MPPT_150_85_12[ImaxPv]=85
MPPT_150_85_24[nom]="MPTT 150/85"
MPPT_150_85_24[Vbat]=24
MPPT_150_85_24[PmaxPv]=2400
MPPT_150_85_24[VmaxPv]=150
MPPT_150_85_24[ImaxPv]=85
MPPT_150_85_48[nom]="MPTT 150/85"
MPPT_150_85_48[Vbat]=48
MPPT_150_85_48[PmaxPv]=4900
MPPT_150_85_48[VmaxPv]=150
MPPT_150_85_48[ImaxPv]=85
MPPT_150_100_12[nom]="MPTT 150/100"
MPPT_150_100_12[Vbat]=12
MPPT_150_100_12[PmaxPv]=1450
MPPT_150_100_12[VmaxPv]=150
MPPT_150_100_12[ImaxPv]=100
MPPT_150_100_24[nom]="MPTT 150/100"
MPPT_150_100_24[Vbat]=24
MPPT_150_100_24[PmaxPv]=2900
MPPT_150_100_24[VmaxPv]=150
MPPT_150_100_24[ImaxPv]=100
MPPT_150_100_48[nom]="MPTT 150/100"
MPPT_150_100_48[Vbat]=48
MPPT_150_100_48[PmaxPv]=5800
MPPT_150_100_48[VmaxPv]=150
MPPT_150_100_48[ImaxPv]=100
MPPT_250_85_12[nom]="MPTT 250/85"
MPPT_250_85_12[Vbat]=12
MPPT_250_85_12[PmaxPv]=1200
MPPT_250_85_12[VmaxPv]=250
MPPT_250_85_12[ImaxPv]=85
MPPT_250_85_24[nom]="MPTT 250/85"
MPPT_250_85_24[Vbat]=24
MPPT_250_85_24[PmaxPv]=2400
MPPT_250_85_24[VmaxPv]=250
MPPT_250_85_24[ImaxPv]=85
MPPT_250_85_48[nom]="MPTT 250/85"
MPPT_250_85_48[Vbat]=48
MPPT_250_85_48[PmaxPv]=4900
MPPT_250_85_48[VmaxPv]=250
MPPT_250_85_48[ImaxPv]=85
MPPT_250_100_12[nom]="MPTT 250/100"
MPPT_250_100_12[Vbat]=12
MPPT_250_100_12[PmaxPv]=1450
MPPT_250_100_12[VmaxPv]=250
MPPT_250_100_12[ImaxPv]=100
MPPT_250_100_24[nom]="MPTT 250/100"
MPPT_250_100_24[Vbat]=24
MPPT_250_100_24[PmaxPv]=2900
MPPT_250_100_24[VmaxPv]=250
MPPT_250_100_24[ImaxPv]=100
MPPT_250_100_48[nom]="MPTT 250/100"
MPPT_250_100_48[Vbat]=48
MPPT_250_100_48[PmaxPv]=5800
MPPT_250_100_48[VmaxPv]=250
MPPT_250_100_48[ImaxPv]=100
......@@ -2,7 +2,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>[CalcPvAutonome] Calculer/dimensionner son installation photovoltaïque en site isolé (autonome)</title>
<title>[CalcPvAutonome] Calculer/dimensionner son installation photovoltaïque isolé (autonome)</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link href="./lib/style.css" media="screen" rel="stylesheet" type="text/css" />
<meta http-equiv="Pragma" content="no-cache">
......@@ -28,7 +28,7 @@
echo $HelpMe;
include('./CalcConsommation.php');
} else {
echo '<h1>Calculer/dimensionner son installation photovoltaïque en site isolé (autonome)</h1>';
echo '<h1>Calculer/dimensionner son installation photovoltaïque isolé (autonome)</h1>';
echo $HelpMe;
include('./CalcPvAutonome.php');
}
......
<?php
// Formulaire afficher ce qui est en get ou ce qui est dans la config
function valeurRecup($nom) {
global $config_ini;
if (isset($_GET[$nom])) {
......@@ -10,6 +10,7 @@ function valeurRecup($nom) {
echo '';
}
}
// Forumaire sur les select mettre le "selected" au bon endroit selon le get ou la config
function valeurRecupSelect($nom, $valeur) {
global $config_ini;
if ($_GET[$nom] == $valeur) {
......@@ -20,6 +21,7 @@ function valeurRecupSelect($nom, $valeur) {
echo '';
}
}
// Convertie les nombre pour l'affichage ou pour les calculs
function convertNumber($number, $to = null) {
if ($to == 'print') {
return number_format($number, 0, ',', ' ');
......@@ -28,14 +30,108 @@ function convertNumber($number, $to = null) {
}
}
// Affichage du debug
function debug($msg) {
if (isset($_GET['debug'])) {
echo '<span class="debug">'.$msg.'</span>';
}
}
// Affichage des erreurs du formulaire
function erreurPrint($id, $msg) {
return '<li>'.$msg.'</li>';
}
// Recherche bonne config régulateur
function chercherRegulateur() {
global $parcPvW,$parcPvV,$parcPvI,$config_ini,$U,$_GET;
$meilleurRegulateur['nom'] = null;
$meilleurRegulateur['diffRegulateurParcPvW'] = 99999;
$meilleurRegulateur['diffRegulateurParcPvV'] = 99999;
$meilleurRegulateur['diffRegulateurParcPvA'] = 99999 ;
debug('<ul type="1">');
if ($_GET['ModRegu'] == 'perso') {
// Mode perso
debug('<li>');
debug('Test de config avec le régulateur perso ::: ');
debug($parcPvW.'&lt;'.$_GET['PersoReguPmaxPv'].'W, ');
debug($parcPvV.'&lt;'.$_GET['PersoReguVmaxPv'].'V, ');
debug($parcPvI.'&lt;'.$_GET['PersoReguImaxPv'].'A');
if ($parcPvW < $_GET['PersoReguPmaxPv']
&& $parcPvV < $_GET['PersoReguVmaxPv']
&& $parcPvI < $_GET['PersoReguImaxPv']) {
debug(' | ** ça fonctionne ** ');
$meilleurRegulateur['nom'] = 'Regulateur Personnalisé';
$meilleurRegulateur['Vbat'] = $_GET['U'];
$meilleurRegulateur['PmaxPv'] = $_GET['PersoReguPmaxPv'];
$meilleurRegulateur['VmaxPv'] = $_GET['PersoReguVmaxPv'];
$meilleurRegulateur['ImaxPv'] = $_GET['PersoReguImaxPv'];
}
debug('</li>');
} else {
// Mode auto ou choisie
foreach ($config_ini['regulateur'] as $idRegulateur => $regulateur) {
// Si un modèle de régulateur à été choisie, on est plus en mode automatique
if ($_GET['ModRegu'] != 'auto' && $_GET['ModRegu'] != substr($idRegulateur, 0, -3)) {
continue;
}
// On conserve uniquement les références supportant la même tension Vbat
if ($U != $regulateur['Vbat']) {
continue;
}
// 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');
if ($parcPvW < $regulateur['PmaxPv']
&& $parcPvV < $regulateur['VmaxPv']
&& $parcPvI < $regulateur['ImaxPv']) {
debug(' | ** ça fonctionne ** ');
} else {
continue;
}
// Différence avec la capacité souhauté
$diffRegulateurParcPvW=$regulateur['PmaxPv']-$parcPvW;
$diffRegulateurParcPvV=$regulateur['VmaxPv']-$parcPvV;
$diffRegulateurParcPvI=$regulateur['ImaxPv']-$parcPvI;
if ($diffRegulateurParcPvW < $meilleurRegulateur['diffRegulateurParcPvW']
|| $diffRegulateurParcPvV < $meilleurRegulateur['diffRegulateurParcPvV']
|| $diffRegulateurParcPvI < $meilleurRegulateur['diffRegulateurParcPvA']) {
debug(' | ** meilleur config **');
$meilleurRegulateur['diffRegulateurParcPvW'] = $diffRegulateurParcPvW;
$meilleurRegulateur['diffRegulateurParcPvV'] = $diffRegulateurParcPvV;
$meilleurRegulateur['diffRegulateurParcPvA'] = $diffRegulateurParcPvI;
$meilleurRegulateur['nom'] = $regulateur['nom'];
$meilleurRegulateur['Vbat'] = $regulateur['Vbat'];
$meilleurRegulateur['PmaxPv'] = $regulateur['PmaxPv'];
$meilleurRegulateur['VmaxPv'] = $regulateur['VmaxPv'];
$meilleurRegulateur['ImaxPv'] = $regulateur['ImaxPv'];
}
debug('</li>');
}
}
debug('</ul>');
return $meilleurRegulateur;
}
?>
......@@ -58,7 +58,8 @@ input {
.erreurForm {
color: #9B0101;
}
.form.PersoPv {
.form.PersoPv,
.form.PersoRegu {
border: 1px solid #C5C5C5;
padding: 5px;
}
......
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