Commit a4dbf9cd authored by root's avatar root

V2.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
    - Possibilité de faire déterminer l'orientation et l'inclinaison la plus optimum en fonction de la ville
    - Une base local à été aspiré, plus de détail voir https://github.com/kepon85/CalcPvAutonome/blob/master/ines.solaire/README.md
parent 4ac508c2
This diff is collapsed.
......@@ -15,9 +15,9 @@ Pour perfectionner ce logiciel j'ai besoin de vous. donc n'hésitez par à émet
Pour l'utilisateur de base :
- 3 mode au formulaire (Débutant, Eclairé, Expert)
- Pour déterminer l'ensoleillement :
- (simple) Carte par zone
- (précis) Valeur du site http://ines.solaire.free.fr/gisesol_1.php (kWh/m²/j)
- Le niveau d'ensoleillement est issus du logiciel http://ines.solaire.free.fr/gisesol.php
- Soit on détermine l'orientation, l'inclinaison et de l'albédo (en expert) en fonction de la ville
- Soit on laisse le logiciel nous déterminer l'orientation et l'inclinaison la plus optimum en fonction de la ville
- En mode expert, ajuster le degré de décharge, les valeurs de rendement électrique des batteries ou du reste de l'installation, capacité de courant charge/décharge max...
- Déduction automatique du nombre de panneaux, batteries et 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)
......@@ -40,7 +40,7 @@ Pour les utilisateurs avancés :
#### Requis pour le fonctionnement / l'installation du
* PHP (5.5-5.6 recomended) + lib gd
* PHP (5.5-5.6 recomended) + lib gd + lib sqlite + lib PDO
* Lighttpd/Apache (ou autre serveur web, service d'hébergement mutualisé...)
#### Installation
......@@ -51,11 +51,15 @@ Le rendre accessible depuis votre serveur http et personnaliser les valeur du fi
### Todos
- Bouton "autonomie partiel, estival' (exemple camion, caravane vacance) on prend l'IGP de mai...
- Créer une tolérance négative. Exemple si on a besoin de 250W, on peut considérer qu'un panneaux de 240W peut faire l'affaire ? (% tolérence paramétrable)
- Prévoir une requête vers INES si la BD est vide, incomplète ou non présente. (nessésaire ?)
- Gérer le litium (avec ces contraintes techniques)
- Ecrire l'algo
- Prix boîter de jonction
- https://www.avelheol.fr/29-boitier-de-jonction
- https://solaireshop.fr/materiel-electrique-et-accessoires/cables-et-connecteurs-solaire.html
- http://www.simple-et-solaire.com/connectique-cablage-8
- Prendre en considération l'énergie hybride (éolienne, groupe, hydrolienne...)
- Prendre en compte l'autodécharge
- Responsive
......@@ -67,6 +71,11 @@ CalcConsommation :
### Changelog
- 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
- Possibilité de faire déterminer l'orientation et l'inclinaison la plus optimum en fonction de la ville
- Une base local à été aspiré, plus de détail voir https://github.com/kepon85/CalcPvAutonome/blob/master/ines.solaire/README.md
- 1.2
- Estimation de budget groupé et totalisé
- Ajout du contrôleur de batterie (voltmètre pour installation < à 100Ah)
......
......@@ -25,10 +25,14 @@ Aut=2
DD=30
; Tension final des batterie (0=automatique)
U=0
; Degré d'inclinaison des PV
Deg=65
; Zone
ZoneId=3
; INES solaire
InesVille='Paris le Bourget'
; Orientation
InesOrientation='Sud'
; Inclinaison
InesInclinaison='65'
; Albédo
InesAlbedo='0.2'
; Marge courant court circuit régulateur Icc : ne marge de 38%, car les panneaux sont calibré sur un soleil de 1000Wc au m², hors, en France, on peut atteindre 1380W/m².. cette marge augmente avec le froid et peut baisser si le fabricant du régulateur à déjà appliqué une marge à la conception
reguMargeIcc=38
; Pourcentage de courant de charge max
......@@ -54,40 +58,20 @@ distanceReguBat=1.5
; http://forum.apper-solaire.org/viewtopic.php?f=16&t=9242&p=122109#p122098
cablageRegleAparMm=6
; Rayonnement moyen quotidien du mois le plus défavorable (kWh/m²/j)
; base de donnée du rayonnement :
; Donnée issu de : http://ines.solaire.free.fr/gisesol.php
[irradiation]
; Lille
zone1_0=0.55
zone1_35=0.83
zone1_65=0.92
; Paris
zone2_0=0.72
zone2_35=1.11
zone2_65=1.22
; Nantes
zone3_0=0.83
zone3_35=1.27
zone3_65=1.39
; Limoges
zone4_0=1.04
zone4_35=1.67
zone4_65=1.85
; Bordeaux
zone5_0=1.09
zone5_35=1.7
zone5_65=1.86
; Carcasonne
zone6_0=1.28
zone6_35=1.99
zone6_65=2.17
; Montpelier
zone7_0=1.55
zone7_35=2.66
zone7_65=2.94
; Marseille
zone8_0=1.49
zone8_35=2.7
zone8_65=2.97
; PDO stucture
; Exemple pour MYSQL :
; db=mysql:host=127.0.0.1;dbname=baseMysql'
; dbUser='utilisateurMysql'
; dbPass='motdepassedefou'
; Exemple pour Sqlite :
; db='sqlite:./data/emailPoubelle.sqlite'
db='sqlite:./ines.solaire/db.sqlite'
; table prefix
dbTablePrefix='ines_';
dbTableOptimum='_ines_optimum';
[equipement]
; Informations tiré de :
......
<?php $CalcPvAutonomeVersion='1.1.2'; ?>
<?php $CalcPvAutonomeVersion='2.0'; ?>
<!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">
......@@ -29,6 +29,7 @@
if (isset($_GET['p']) && $_GET['p'] == 'CalcConsommation') {
echo '<h1>Calculer ces besoins électriques journalier</h1>';
echo $HelpMe;
@include_once('./header.php');
include('./CalcConsommation.php');
} elseif (isset($_GET['p']) && $_GET['p'] == 'Modeles') {
include('./Modeles.php');
......@@ -36,6 +37,7 @@
} else {
echo '<h1>Calculer/dimensionner son installation photovoltaïque isolé (autonome)</h1>';
echo $HelpMe;
@include_once('./header.php');
include('./CalcPvAutonome.php');
}
if ($footer == true) {
......
<?php
// ########## Data du formulaire :
$villes = array ( 'Abbeville',
'Agen',
'Ajaccio',
'Alenon',
'Ambrieu',
'Angers',
'Auxerre',
'Bastia',
'Besanon',
'Biarritz',
'Bordeaux',
'Bourg St Maurice',
'Bourges',
'Brest',
'Caen',
'Carcassonne',
'Carpentras',
'Chambry',
'Chartres',
'Chateauroux',
'Clermont Ferrand',
'Colmar',
'Dijon',
'Embrun',
'Evreux',
'Grenoble',
'Gourdon',
'La Rochelle',
'Langres',
'Le Mans',
'Le Puy',
'Lille',
'Limoges',
'Luxeuil',
'Lyon',
'Mcon',
'Marseille',
'Melun',
'Metz',
'Millau',
'Montlimar',
'Montpellier',
'Mulhouse',
'Nancy',
'Nantes',
'Nevers',
'Nice',
'Nimes',
'Orlans',
'Pau',
'Paris le Bourget',
'Perpignan',
'Poitiers',
'Reims',
'Rennes',
'Rouen',
'St Etienne',
'St Quentin',
'Strasbourg',
'Toulon',
'Toulouse',
'Tours',
'Troyes',
'Valence',
'Vichy');
$inclinaisons = array ('horizontale',
'5',
'10',
'15',
'20',
'25',
'30',
'35',
'40',
'45',
'50',
'55',
'60',
'65',
'70',
'75',
'80',
'85',
'verticale');
$orientations = array ('-165',
'-150',
'-135',
'-120',
'-105',
'Est',
'-75',
'-60',
'-45',
'-30',
'-15',
'Sud',
'+15',
'+30',
'+45',
'+60',
'+75',
'Ouest',
'+105',
'+120',
'+135',
'+150',
'+165',
'Nord');
$albedos = array ('0.0',
'0.1',
'0.2',
'0.3',
'0.4',
'0.5',
'0.6',
'0.7',
'0.8',
'0.9',
'1.0');
// ########## Fin des data du formulaire
?>
#!/usr/bin/php
<?php
// Script qui rcupre les donnes IGP du mois le plus dfavorable
// Ces donnes sont rcupr depuis le site :
// http://ines.solaire.free.fr/gisesol.php
/*
* Juste l'albedo 0.3
* screen -S 0.3 -dm bash -c 'cd /var/www/calcpvautonome.zici.fr/web/dev/ ; while true; do php ines.solaire/GetData.php "0.3"; sleep 60; done'
* Juste l'albedo 0.3 avec proxy http://www.gatherproxy.com/embed/?t=&p=&c=Germany
* screen -S 0.3 -dm bash -c 'cd /var/www/calcpvautonome.zici.fr/web/dev/ ; while true; do php ines.solaire/GetData.php "0.3" "iporoxy" "portproxy"; sleep 60; done'
* Tout :
* screen -S all -dm bash -c 'cd /var/www/calcpvautonome.zici.fr/web/dev/ ; while true; do php ines.solaire/GetData.php; sleep 60; done'
*/
if (php_sapi_name() != 'cli') {
echo 'Ce script ne peut tre lanc qu\'en ligne de comamnde.';
exit();
}
include('./lib/Fonction.php');
$config_ini = parse_ini_file('./config.ini', true);
include('./lib/simple_html_dom.php');
include('./ines.solaire/FormData.php');
// Sleep entre 2 requette
$SLEEP_ENTRE_REQUETE=0;
if (isset($argv[1])) {
$albedos = array ($argv[1]);
}
// Connect DB
try {
if (preg_match('/^sqlite/', $config_ini['irradiation']['db'])) {
$dbco = new PDO($config_ini['irradiation']['db']);
} else {
$dbco = new PDO($config_ini['irradiation']['db'], $config_ini['irradiation']['dbUser'], $config_ini['irradiation']['dbPass']);
}
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ) {
die('Connexion la base '.$e->getMessage());
}
// 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);");
} catch ( PDOException $e ) {
$e->getMessage();
die();
}
function parseHtmlForIgp() {
global $html;
$Igp = array();
$IgpMonth=0;
$IGP['defavorable']=(float) 99;
$IgpOptimumPourLaVille=null;
$IgpOptimumPourLaVilleExplode=null;
foreach($html->find('td') as $td) {
// Tant qu'on a pas trouv les 12 mois d'IGP
if ($IgpMonth <= 12) {
// Si IGP > 1, c'est qu'on est dans la ligne, on enregistre donc les IGP
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';
}
$IgpMonth++;
}
// Si la ligne IGP est trouv on commence chercher
if (preg_match('/(IGP)/',$td->plaintext)) {
$IgpMonth++;
}
}
// Recherche optimum pour la ville :
if (preg_match('/irradiation globale dans le plan pour le mois le plus/',$td->plaintext)) {
$IgpOptimumPourLaVille=$td->plaintext;
}
}
if ($IgpOptimumPourLaVille != null) {
$IgpOptimumPourLaVilleExplode=explode(" ", $IgpOptimumPourLaVille);
//print_r($IgpOptimumPourLaVilleExplode);
$IGP['optimum']['mois'] = substr($IgpOptimumPourLaVilleExplode[16], 0, -1);
$IGP['optimum']['igp'] = $IgpOptimumPourLaVilleExplode[21];
$IGP['optimum']['orientation'] = $IgpOptimumPourLaVilleExplode[28];
if ($IGP['optimum']['orientation'] != 'Ouest' && $IGP['optimum']['orientation'] != 'Est'
&& $IGP['optimum']['orientation'] != 'Nord' && $IGP['optimum']['orientation'] != 'Sud'
&& $IGP['optimum']['orientation'] != 'ouest' && $IGP['optimum']['orientation'] != 'est'
&& $IGP['optimum']['orientation'] != 'nord' && $IGP['optimum']['orientation'] != 'sud') {
$IGP['optimum']['orientation'] = substr(utf8_encode($IGP['optimum']['orientation']), 0, -2);
}
$IGP['optimum']['inclinaison'] = substr($IgpOptimumPourLaVilleExplode[36], 0, -1);
if ($IGP['optimum']['inclinaison'] != 'horizontale' && $IGP['optimum']['inclinaison'] != 'verticale') {
$IGP['optimum']['inclinaison'] = substr(utf8_encode($IGP['optimum']['inclinaison']), 0, -2);
}
}
return $IGP;
}
foreach ($villes as $ville) {
// Create DB if not exists (une / ville)
$villeTableName=wd_remove_accents(utf8_encode($config_ini['irradiation']['dbTablePrefix'].str_replace(' ','',$ville)));
echo "\n".$villeTableName."\n";
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);");
}
} catch ( PDOException $e ) {
$e->getMessage();
die();
}
// Suppression des doublons
$sql = "delete from ".$villeTableName." where rowid not in (select max(id) from ".$villeTableName." group by inclinaison, orientation, albedo)";
try {
$stmt = $dbco->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$stmt->execute();
$stmt = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
foreach ($inclinaisons as $inclinaison) {
foreach ($orientations as $orientation) {
foreach ($albedos as $albedo) {
echo "\n";
echo "Pour ".$ville." avec un plan de incl=".$inclinaison." ori=".$orientation." alb=".$albedo;
/*
Content-Type: application/x-www-form-urlencoded
Content-Length: 84
ville=Embrun&inclinaison=35%B0&orientation=%2B60%B0&albedo=0.6&choix=kWh%2Fm%B2.jour
Rcupr via F12, rseau, modifier et renvoyer, corps de a requte
"ville=Clermont+Ferrand&inclinaison=85%B0&orientation=-135%B0&albedo=0.0&choix=kWh%2Fm%B2.jour");
*/
$postFields="ville=".urlencode($ville)."&inclinaison=".urlencode($inclinaison)."&orientation=".urlencode($orientation)."&albedo=".urlencode($albedo)."&choix=kWh%2Fm%B2.jour";
//"ville=Embrun&inclinaison=35%B0&orientation=%2B60%B0&albedo=0.6&choix=kWh%2Fm%B2.jour"
//"ville=Clermont+Ferrand&inclinaison=85%B0&orientation=-135%B0&albedo=0.0&choix=kWh%2Fm%B2.jour"
if ($dbco->query("SELECT COUNT(*) FROM ".$villeTableName." WHERE inclinaison = '".$inclinaison."' AND orientation = '".$orientation."' AND albedo = '".$albedo."'")->fetchColumn() == 0) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://ines.solaire.free.fr/gisesol.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
// Dfinition de l'adresse du proxy
if (isset($argv[2]) && isset($argv[3])) {
curl_setopt($ch, CURLOPT_PROXY, $argv[2]);
curl_setopt($ch, CURLOPT_PROXYPORT, $argv[3]);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
// http://nimishprabhu.com/top-10-best-usage-examples-php-simple-html-dom-parser.html
//$html = file_get_html('/tmp/gisesol.php');
$html = str_get_html($server_output);
$IGP = parseHtmlForIgp();
if ($IGP['defavorable'] != 99) {
echo " igp=".$IGP['defavorable'];
try {
$insertcmd = $dbco->prepare("INSERT INTO ".$villeTableName." (inclinaison, orientation, albedo, igp)
VALUES (:inclinaison, :orientation, :albedo, :igp)");
$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->execute();
} catch ( PDOException $e ) {
echo "\nDB insert error : ", $e->getMessage();
die();
}
} else {
echo "\n !!! Erreur !\n\n";
}
// Pour l'optimum
if ($dbco->query("SELECT COUNT(*) FROM ".$config_ini['irradiation']['dbTableOptimum']." WHERE albedo = '".$albedo."' AND ville = '".utf8_encode($ville)."'")->fetchColumn() == 0) {
try {
$insertcmd = $dbco->prepare("INSERT INTO ".$config_ini['irradiation']['dbTableOptimum']." (ville, inclinaison, orientation, mois, albedo, igp)
VALUES (:ville, :inclinaison, :orientation, :mois, :albedo ,:igp)");
$insertcmd->bindParam('ville', utf8_encode($ville), PDO::PARAM_STR);
$insertcmd->bindParam('inclinaison', $IGP['optimum']['inclinaison'], PDO::PARAM_STR);
$insertcmd->bindParam('orientation', $IGP['optimum']['orientation'], PDO::PARAM_STR);
$insertcmd->bindParam('mois', utf8_encode($IGP['optimum']['mois']), PDO::PARAM_STR);
$insertcmd->bindParam('albedo', $albedo, PDO::PARAM_STR);
$insertcmd->bindParam('igp', $IGP['optimum']['igp'], PDO::PARAM_STR);
$insertcmd->execute();
} catch ( PDOException $e ) {
echo "\nDB insert optimum error : ", $e->getMessage();
die();
}
echo "\n\t > Avec une albedo de ".$albedo.", le pire moi est le mois de ".$IGP['optimum']['mois']." avec un IGP de ".$IGP['optimum']['igp']." sur une inclinaison de ".$IGP['optimum']['inclinaison']." et une orientation de ".$IGP['optimum']['orientation'].". ";
}
curl_close ($ch);
$html->clear();
unset($html);
} else {
echo " PRESENT !";
}
}
}
echo "\n Attente ".$SLEEP_ENTRE_REQUETE."s";
sleep($SLEEP_ENTRE_REQUETE);
}
}
?>
# Ines Solaire
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.
### License
Le code est sous licence BEERWARE : Tant que vous conservez cet avertissement, vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en retour.
> Written with [StackEdit](https://stackedit.io/).
phpliteadmin.php
\ No newline at end of file
<?php
//
// This is sample configuration file
//
// You can configure phpliteadmin in one of 2 ways:
// 1. Rename phpliteadmin.config.sample.php to phpliteadmin.config.php and change parameters in there.
// You can set only your custom settings in phpliteadmin.config.php. All other settings will be set to defaults.
// 2. Change parameters directly in main phpliteadmin.php file
//
// Please see https://bitbucket.org/phpliteadmin/public/wiki/Configuration for more details
//password to gain access
//$password = 'calcpvautonome';
$password = '';
//directory relative to this file to search for databases (if false, manually list databases in the $databases variable)
$directory = '.';
//whether or not to scan the subdirectories of the above directory infinitely deep
$subdirectories = false;
//if the above $directory variable is set to false, you must specify the databases manually in an array as the next variable
//if any of the databases do not exist as they are referenced by their path, they will be created automatically
$databases = array(
array(
'path'=> 'db.sqlite',
'name'=> 'Ines Solar'
),
);
/* ---- Interface settings ---- */
// Theme! If you want to change theme, save the CSS file in same folder of phpliteadmin or in folder "themes"
$theme = 'phpliteadmin.css';
// the default language! If you want to change it, save the language file in same folder of phpliteadmin or in folder "languages"
// More about localizations (downloads, how to translate etc.): https://bitbucket.org/phpliteadmin/public/wiki/Localization
$language = 'fr²';
// set default number of rows. You need to relog after changing the number
$rowsNum = 30;
// reduce string characters by a number bigger than 10
$charsNum = 300;
// maximum number of SQL queries to save in the history
$maxSavedQueries = 10;
/* ---- Custom functions ---- */
//a list of custom functions that can be applied to columns in the databases
//make sure to define every function below if it is not a core PHP function
$custom_functions = array(
'md5', 'sha1', 'time', 'strtotime',
// add the names of your custom functions to this array
/* 'leet_text', */
);
// define your custom functions here
/*
function leet_text($value)
{
return strtr($value, 'eaAsSOl', '344zZ01');
}
*/
/* ---- Advanced options ---- */
//changing the following variable allows multiple phpLiteAdmin installs to work under the same domain.
$cookie_name = 'pla3412';
//whether or not to put the app in debug mode where errors are outputted
$debug = false;
// the user is allowed to create databases with only these extensions
$allowed_extensions = array('db','db3','sqlite','sqlite3');
This diff is collapsed.
<?php
// Retir les accents
// http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html
function wd_remove_accents($str)
{
$str = htmlentities($str, ENT_NOQUOTES);
$str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
return $str;
}
// Ajoute le ° si c'est une valeur chiffré
function ajoutDegSiAngleChiffre($deg) {
if (preg_match('#[0-9]+$#',$deg)) {
return $deg.'°';
} else {
return $deg;
}
}
// Transforme 'sud' en 0°
function nomEnAngle($val) {
if (!preg_match('#^[0-9]+$#',$val)) {
switch($val) {
case 'Sud':
case 'sud':
$val='0°';
break;
case 'Est':
case 'est':
$val='-90°';
break;
case 'Ouest':
case 'ouest':
$val='90°';
break;
case 'Nord':
case 'nord':
$val='180°';
break;
}
}
return $val;
}
// Formulaire afficher ce qui est en get ou ce qui est dans la config
function valeurRecup($nom) {
global $config_ini;
......@@ -31,9 +73,13 @@ function convertNumber($number, $to = null) {
}
// Affichage du debug
function debug($msg) {
function debug($msg, $balise=null) {
if (isset($_GET['debug'])) {
echo '<span class="debug">'.$msg.'</span>';
if (isset($balise)) {
echo '<'.$balise.' class="debug">'.$msg.'</'.$balise.'>';
} else {
echo $msg;
}
}
}
......@@ -141,7 +187,7 @@ function chercherRegulateur() {
function chercherCable_SecionAudessus($sectionMinimum) {
global $config_ini;
foreach ($config_ini['cablage'] as $idCable => $cable) {
debug('<p>Pour une section minimum de '.$sectionMinimum.', on test '.$cable['diametre'].'</p>');
debug('Pour une section minimum de '.$sectionMinimum.', on test '.$cable['diametre'], 'p');
if ($sectionMinimum < $cable['diametre']) {
$meilleurCable['nom']=$cable['nom'];
$meilleurCable['diametre']=$cable['diametre'];
......@@ -178,10 +224,10 @@ function chercherCable_SecionPlusProche($sectionMinimum) {
// On cherche le bon convertisseur
function chercherConvertisseur($U,$Pmax) {
global $config_ini;
debug('<p>Tension '.$U.'</p>');
debug('Tension '.$U, 'p');
foreach ($config_ini['convertisseur'] as $convertisseur) {
if ($U == $convertisseur['Vbat']) {
debug('<p>Test pour le convertisseur '.$convertisseur['nom'].'</p>');
debug('Test pour le convertisseur '.$convertisseur['nom'], 'p');
if ($Pmax <= $convertisseur['Pmax']) {
$meilleurConvertisseur['nom']=$convertisseur['nom'];
$meilleurConvertisseur['Pmax']=$convertisseur['Pmax'];
......
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