implementer un datpiker dans les champs input

Ce forum est dédié aux discussions qui concernent les graphiques réalisés avec la librairie Highstock, Une question, un bug ?

Modérateurs : jturlier, Météo Villarzel

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

implementer un datpiker dans les champs input

Message par alain » 28 janv. 2015, 15:16

bonjours.
ben voila, je me résout a nouveau a faire appel a vous.
mon soucis:je n'arrive pas implémenter convenablement un datepiker directement sur la page graphique

-A l'aide du tuto hihcharts/highstock j'ai bien réussit a faire un graphe des xxx dernières heures.
-j'ai ajouté (dans le cas hicharts) un champs input, je récupère convenablement la valeur entrée grâce a la méthode POST, ensuite il ne me reste plus qu'a actualiser la variable du tuto start et stop.
a la main comme cela je peut choisir le jour et l'intervalle de temps affiché.(c'est pour test, il n'y a pas de contrôle et je rentre le timstamp directement dans le champs.)
-Je précise que je travaille directement sur ma page de graphique et non pas par l’intermédiaire d'un formulaire.
- toujours dans hicharts, mais highstock a déjà les input j'ai ajouté deux champs: appelé date debut et date de fin et ça va a pêut pres.
-donc j'ai une fonction qui marche: avancer ou reculer d'un jour.
par contre quand je veut mettre un datepicker je n'ai plus de graph, je pense a un conflit dans mes appels aux librairies JS car le datepiker marche convenablement seul, le graph aussi, mais une fois sur la même page, ça marche plus.
[u]pour test[/u] sur mes input je fait comme cela: ce code part du bas, de la fin du tuto, j'ai nommée cette page:48h_teleinfo.php

Code : Tout sélectionner

<!--  Maitenant il ne reste plus qu'à afficher le graphique dans le corps "body" de la page et on ferme la balise html
  id="container" = C'est le nom que vous avez défini au début dans "renderTo: 'container', "
  style="width: 550px; height: 300px; = la largeur et la hauteur que vous voulez donner à votre graphique.
  Votre graphique est terminé.-->
  </head>
   <body>
   <!-- on créé le formulaire php , passage de paramètres par la méthode post-->
<form action="48h_teleinfo.php" method="post">
	
<!-- on déclare un champs select, pour affichier la liste de choix -->

<select name="jours">
<option value=""> ----- jours ----- </option>
<option value="01"> 01 </option>
<option value="02"> 02 </option>
<option value="03"> 03 </option>
<option value="04"> 04 </option>
</select>

<select name="mois">
<option value=""> ----- jours ----- </option>
<option value="01"> 01 </option>
<option value="02"> 02 </option>
<option value="03"> 03 </option>
<option value="04"> 04 </option>
</select>

<!-- un bouton pour valider -->
<input type="submit" value="valider" name="OK">
</form>
</center>
      <div id="container" style="width: 1280px; height: 500px; margin: 0 auto"></div>
   </body>
</html>
par contre des que j'ajoute ces lignes au debut du ficher tuto, a la siuite des autres, ca ne plante pas encore

Code : Tout sélectionner

<!--- <link href="jquery-ui-1.10.4/css/ui-lightness/jquery-ui-1.10.4.css" rel="stylesheet"> -->
<link href="jquery-ui-1.10.4/css/custom-theme/jquery-ui-1.10.4.custom.css" rel="stylesheet">
<script src="jquery-ui-1.10.4/js/jquery-1.10.2.js"></script>
<script src="jquery-ui-1.10.4/js/jquery-ui-1.10.4.js"></script>
<!-- receupere les langues pour la traduction du calendrier -->
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery-ui-i18n.min.js"></script> 
par contre dans le tuto, dans la partie scrpit si j'ajoute ceci ça plante. j'ai récupéré ce script, il marche, je n'utilises que
-le datepiker simple
- le datepiker aller et retour qui surveille que l'on ne peut pas choisir des dates (DU) (AU) de façon coherente, je n'utilise pas la source ajax

Code : Tout sélectionner

/**
 * Création d'un calendrier
 * @return {[type]} [description]
 */
$(function() 
{  
	// définit les options par défaut de tous les calendriers
	$.datepicker.setDefaults($.datepicker.regional["fr"]);  // affiche le calendrier en fr 

	// définit les options par défaut du calendrier
	$.datepicker.setDefaults({ 
		showButtonPanel: true,// affiche des boutons sous le calendrier
		showOtherMonths: true, // affiche les autres mois
		selectOtherMonths: true, // possibilités de sélectionner les jours des autres mois
		showOn: "button", 			// affiche le calendrier via un bouton image
		buttonImage: "10-calendar-icon.png", 
		buttonImageOnly: true,
		changeMonth: true, // listes déroulantes pour les mois et les années
		changeYear: true,
		yearRange: "-1:+3",// le nombre d'année disponible dans la liste déroulante
		//defaultDate: "16-05-2014",// la date par défaut sélectionnée dans le calendrier
		firstDay: 1, // premier jour le lundi
		//beforeShowDay: $.datepicker.noWeekends, // masque les week end
		showWeek: true, // affiche les semaines

		duration: "fast", // ajoute une animation sur le calendrier
		showAnim: "slide", 
		showOptions: {direction: "left"}
		/*minDate: "+3", // les dates sélectionnables (minimum et maximum)
		maxDate: "+13" */
		});

	//$("#calendar").datepicker();

	/**
	 * Gestion d'une date de départ et d'une date de retour
	 * @param  
	 * @return {[type]}       [description]
	 */
	$("#calendar_from").datepicker({ 
		onClose: function(date) { 
			$("#calendar_to").datepicker("option", "minDate", date); 
		} 
	}); 

	$("#calendar_to").datepicker(); 


	/**
	 * Communication avec PHP via AJAX lors de la sélection de la date
	 * @param  
	 * @return {[type]}              [description]
	 */
	$("#calendar").datepicker ({ 
		onSelect : function (dateTexte){ 
			var data = {date : dateTexte}; 
			$.ajax ({ // appel du script php
				url : "10-ajax.php", 
				data : data, 
				complete : function (xhr, result){ 
					// si il y a une erreur
					if (result != "success")
					{
						$("#confirmation").html ("<b>Erreur durant votre résevertion, veuillez recommencer plus tard.</b>") ; // ajout de la reponse php sous forme HTML	
						return; 	
					} 
					var retour = xhr.responseText; 
					$("#confirmation").html (retour) ; // ajout de la reponse php sous forme HTML
				} 
			}); 
		} 
	}); 

});
si une Âme charitable peut me passer le bout de code qui va bien avec le tuto je luis serait reconnaissant, je voudrais en fait faire ce qu'il y a dans le graph du bas de cette page:
http://www.boock.ch/meteo/graphiques_dy ... e_jour.php




Quelques fonctions si cela peut etre utile a quit lit ce message, testée, ellent fonctionne toutes
Calendar 4 renvoie la date en tstamp

Code : Tout sélectionner

/**
 * Affiche les différents formats des dates
 * @return {[type]} [description]
 */
$(function() { 
	$("#calendar1").datepicker({dateFormat: "mm-dd-yy", appendText: " mm-dd-yy - défaut ango-saxon"}); 
}); 

$(function() { 
	$.datepicker.setDefaults($.datepicker.regional["fr"]); 
	$("#calendar2").datepicker({dateFormat: "dd-mm-yy", appendText: " dd-mm-yy - défaut français"}); 
}); 

$(function() { 
	$("#calendar3").datepicker({dateFormat: "yy-mm-dd", appendText: " yy-mm-dd"}); 
}); 

$(function() { 
	$("#calendar4").datepicker({dateFormat: "@"}); 
}); 

$(function() { 
	$("#calendar5").datepicker({dateFormat: "!", appendText: " ticks Windows"}); 
}); 

$(function() { 
	$("#calendar6").datepicker({dateFormat: $.datepicker.COOKIE, appendText: " COOKIE"}); 
}); 

$(function() { 
	$("#calendar7").datepicker({dateFormat: "'Le' d 'du mois de' MM yy", appendText: " avec du texte"}); 
});
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: implementer un datpiker dans les champs input

Message par alain » 28 janv. 2015, 15:34

edit

lien vers un tuto pas mal fait, les sources sont telechargeables
https://www.youtube.com/watch?v=9U_5Z4WqswI
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: implementer un datpiker dans les champs input

Message par Météo Villarzel » 28 janv. 2015, 22:11

Salut Alain,
en fait j'ai deux solutions, une simple et une moins simple qui n'est pas de moi.

Pour la simple ou tu peux uniquement choisir la date de départ du graphique et une plage fixe, par exemple 3 mois
voir ce graphique http://www.boock.ch/meteo/graphiques_dy ... _1mois.php

on détermine un start/stop

Code : Tout sélectionner

$stop1=strtotime ($list[0]);  
     
// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données des dernières xx heures
if(!empty($_POST['depart'])) {
    $start=mktime(0,0,0,substr($_POST['depart'], 3, 2),substr($_POST['depart'], 0, 2),substr($_POST['depart'], 6, 4));
    $stop =mktime(0,0,0,date("n",$start)+3,date("j",$start),date("Y",$start));
}
else{
    $start=mktime(0,0,0,date("n",$stop1)-3,date("j",$stop1)+1,date("Y",$stop1));
    $stop=$stop1;
}
Puis un petit script

Code : Tout sélectionner

<script>
    var today = (new Date().getTime());
    var debut = today-(86400000*93);
    var date = new Date(debut);
    var month = date.getMonth()+1;
    var day = new Date().getDate();
    var year = date.getFullYear();
    var datemaxi = (day + '/' + month + '/' + year);   
  $(function() {
    $.datepicker.setDefaults( $.datepicker.regional['fr']);
    $( "#datepicker" ).datepicker({
        dateFormat : 'dd/mm/yy',
        minDate:'08/01/2010',
        maxDate: datemaxi, 
        changeMonth: true,
        changeYear: true,
    });
  });
  </script>
et le formulaire dans le body

Code : Tout sélectionner

<form method="POST" action="" class="ui-widget">
	  <label style="color: #000000">Choisir la date de début du graphique</label>
	  <input style="width: 75px" type="text" name="depart" id="datepicker">
	  <input id="valid_button" type='submit' value="Afficher" />
	  </form>
La deuxième solution, je te la met en vrac, mais comme tu as du temps libre, tu devrais t'en sortir.
C'est mon graphique de consommation électrique.
Tu as juste à changer les liens vers tes librairies JS et la requête pour récupérer tes valeurs

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<HEAD>
		<META NAME="DESCRIPTION" CONTENT="Station météo amateur de Villarzel Suisse">
		<META NAME="KEYWORDS" CONTENT="station,meteo,amateur,releves,direct,webcam,station meteo">
		<META NAME="REVISIT-AFTER" CONTENT="5 DAYS">
		<meta http-equiv="X-UA-Compatible" content="IE=9; IE=9" >
		<META NAME="LANGUAGE" CONTENT="FR">
		<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"> 
		<title>Météo Villarzel</title>

<script type="text/javascript" src="jquery.min.js"></script>
<script src="../highstock2013/highstock.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>
<script src="http://code.highcharts.com/stock/highcharts-more.js"></script>
<script src="http://code.highcharts.com/stock/modules/exporting.js"></script>
<script src="http://code.highcharts.com/stock/themes/grid.js"></script>

<link rel="stylesheet" href="/meteo/jquery/development-bundle/themes/base/jquery.ui.all.css">
<script src="/meteo/jquery/js/jquery-1.9.1.js"></script>
<script src="/meteo/jquery/development-bundle/ui/jquery.ui.core.js"></script>
<script src="/meteo/jquery/development-bundle/ui/jquery.ui.widget.js"></script>
<script src="/meteo/jquery/development-bundle/ui/jquery.ui.datepicker.js"></script>
<script src="/meteo/jquery/development-bundle/demos/datepicker/jquery.ui.datepicker-fr.js"></script>
<link rel="stylesheet" href="/meteo/jquery/development-bundle/demos/demos.css">
<script type="text/javascript" src="/meteo/overlib.js"></script>
<script type="text/javascript" src="/meteo/overlib_fade.js"></script> 	 

		<?php
			// récupération des paramètres
			if(isset($_GET["du"])) {
				$tab = explode("-",$_GET["du"]) ;
				$jour_debut = $tab[0] ;
				$mois_debut = $tab[1] ;
				$annee_debut = $tab[2] ;
			} else {
				$jour_debut = 1 ;
				$mois_debut = date("m") ;
				$annee_debut = date("Y") ;
			}
			if(isset($_GET["au"])) {
				$tab = explode("-",$_GET["au"]) ;
				$jour_fin = $tab[0] ;
				$mois_fin = $tab[1] ;
				$annee_fin = $tab[2] ;
			} else {
				$jour_fin = date("d") ;
				$mois_fin = date("m") ;
				$annee_fin = date("Y") ;
			}
			//calcul si la fin de la période est situé après la date actuelle
			$nbr_jour_valide = round((strtotime(sprintf("%02d-%02d-%04d", $jour_fin, $mois_fin, $annee_fin)) - strtotime(date('d-m-Y')))/(60*60*24)+1) ; 
			if ($nbr_jour_valide > 0) { 
				$jour_fin = date("d") ;
				$mois_fin = date("m") ;
				$annee_fin = date("Y") ;
			}
			//calcul si le début de la période est situé avant le 01/01/2008
			$nbr_jour_valide = round((strtotime(sprintf("%02d-%02d-%04d", $jour_debut, $mois_debut, $annee_debut)) - strtotime(sprintf("%02d-%02d-%04d", 1, 1, 2008)))/(60*60*24)+1) ; 
			if ($nbr_jour_valide < 0) { 
				$jour_debut = 1 ;
				$mois_debut = 1 ;
				$annee_debut = 2008 ;
				//calcul si la fin de la période est situé avant le 01/01/2008
				$nbr_jour_valide = round((strtotime(sprintf("%02d-%02d-%04d", $jour_fin, $mois_fin, $annee_fin)) - strtotime(sprintf("%02d-%02d-%04d", 1, 1, 2008)))/(60*60*24)+1) ; 
				if ($nbr_jour_valide < 0) { 
					$jour_fin = 1 ;
					$mois_fin = 1 ;
					$annee_fin = 2008 ;
				}
			}
			$nbr_jour = round((strtotime(sprintf("%02d-%02d-%04d", $jour_fin, $mois_fin, $annee_fin)) - strtotime(sprintf("%02d-%02d-%04d", $jour_debut, $mois_debut, $annee_debut)))/(60*60*24)+1) ; 
		?>
		
		<script type="text/javascript">
function comArr(unitsArray) { 
				var outarr = [];
				for (var i = 0; i < dTime.length; i++) {
					outarr[i] = [dTime[i], unitsArray[i]];
				}
				return outarr;
			}		
			$(function () {
				$( "#edit1" ).datepicker({ dateFormat: "dd-mm-yy",showOn: "button",buttonImage: "calendar.gif",buttonImageOnly: true,yearRange: "2008:<?php echo date("Y");?>",dayNames: [ "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" ],dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa" ],monthNames: [ "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre" ]});
				$( "#edit2" ).datepicker({ dateFormat: "dd-mm-yy",showOn: "button",buttonImage: "calendar.gif",buttonImageOnly: true,yearRange: "2008:<?php echo date("Y");?>",dayNames: [ "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" ],dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa" ],monthNames: [ "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre" ]});
				Highcharts.setOptions({
	lang: {
		months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 
			'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
		weekdays: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
		shortMonths: ['Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil','Août', 'Sept', 'Oct', 'Nov', 'Déc'],
            decimalPoint: ',',
		resetZoom: 'Reset zoom',
            resetZoomTitle: 'Reset zoom à 1:1',
            downloadPNG: "Télécharger au format PNG image",
            downloadJPEG: "Télécharger au format JPEG image",
            downloadPDF: "Télécharger au format PDF document",
            downloadSVG: "Télécharger au format SVG vector image",
            exportButtonTitle: "Exporter image ou document",
            printButtonTitle: "Imprimer le graphique",
            loading: "Laden..."
	}
});

    
    	window.chart = new Highcharts.StockChart({
    	
		    chart: {
		        renderTo: 'container',
		        type: 'spline',

				zoomType: 'x',
				 alignTicks: false,
                backgroundColor: {
                linearGradient: [0, 0, 500, 500],
                stops: [
                    [0, 'rgb(70, 130, 180)'],
                    [1, 'rgb(255, 255, 255)']
                ]
            },
		    },
			
		    
		    rangeSelector : {
						buttonTheme: {
							width:70
						},
						buttons: [{
							type: 'day',
							count: 1,
							text: '1 jour'
						},{
							type: 'week',
							count: 1,
							text: '1 semaine'
						},{
							type: 'month',
							count: 1,
							text: '1 mois'
						},{
							type: 'all',
							count: 1,
							text: 'Tout'
						}],
						inputEnabled: false,
						selected : 3,
					},
			credits: {
            text: '© Météo Villarzel',
            href: ''
			},
		    legend: {
	    	enabled: false,
	    	align: 'top',
        	backgroundColor: '#cfddef',
        	borderColor: 'royalblue',
        	borderWidth: 2,
	    	layout: 'horizontal',
	    	verticalAlign: 'top',
	    	y: 25,
			x: 20,
	    	shadow: true
	    },
		    title: {
		        text: 'Puissance électrique compteur lumière',
				style: {
                color: '#FFFFFF',
                fontWeight: 'bold'}
		    },
			
yAxis: { // 1er yAxis (numero 0)
             opposite:false,
            showFirstLabel: true,
             showLastLabel: true,
            labels: {
                    formatter: function() {
                        return this.value +' W';
                    },
               align : 'right',
               x : -10,
               y : 3,
                    style: {
                        color: 'red'
                    }
                },
                title: {
                    text: 'Puissance',
               style: {
                        color: 'red'
                    }
                }
            },
		    	    tooltip: {
				crosshairs:true,
				borderColor: '#4b85b7',
				shared: true,
backgroundColor: {
                linearGradient: [0, 0, 0, 60],
                stops: [
                    [0, '#4c86b6'],
                    [1, '#e3e3e3']
                ]
            },
				valueDecimals: 1,
				formatter: function() {
                var s = '<b>'+ Highcharts.dateFormat('%A %e %B %Y à %H:%M', this.x) +'</b>';
                
                $.each(this.points, function(i, point) {
					var unit = {
                    'Puissance': ' W'
                    }[this.point.series.name];
				    s = s + '<br>' + '<span style="color:'+ point.series.color +'">' + point.series.name + '</span> : '  

+Highcharts.numberFormat(point.y,1,","," ")
                       + unit;
                });
                
                return s;
            },
			
            },

		    
		    series: [{
		        name: 'Puissance',
				type: 'area',
				fillColor: {
                    linearGradient: [0, 0, 0, 300],
                    stops: [
                        [0, 'rgb(255, 69, 0)'],
                        [1, 'rgba(255,0,0,0.5)']
                    ]
				},
				zIndex: 1,
				color: '#ff0000',
		        data: comArr(dtemp),
		    }]
		
		}, function(chart) {
chart.renderer.image('http://www.boock.ch/meteo/images/ban_villarzel.gif', 765, 10, 43, 50)
        .add();  
            // apply the date pickers
            setTimeout(function() {
                $('input.highcharts-range-selector', $('#' + chart.options.chart.renderTo)).datepicker({minDate:-30,maxDate:0,})
            },0)
        });
    // Set the datepickers date format
    $.datepicker.setDefaults({
        dateFormat: 'yy-mm-dd',
		// dateFormat: 'dd-mm-yyyy',
        onSelect: function(dateText) {
            this.onchange();
            this.onblur();
        }
		
    });
/// the button action
    $('#button').click(function()
 {
        var extremes = chart.yAxis[0].getExtremes()
        $('#report').html(
            '<span style="color:#FF0000;font-weight:bold;font-size:14px">'+ 'Consommation max: '+ (Math.round(extremes.dataMax*10)/10) +' W '
        )
    });	

});

			
			<?php
require("mysqli_connect.php"); 
				// exécution de la requête
				$sql="SELECT tstamp, watt_h_c1, sonde  from currentdet where sonde=0 and tstamp >= '". mktime(0,0,0,$mois_debut,$jour_debut,$annee_debut)."' and  tstamp <= '". mktime(23,59,59,$mois_fin,$jour_fin,$annee_fin)."' ORDER BY tstamp";
				$query = mysqli_query($conn,$sql);    
				$trouve = 0 ;
				$jouractuel = $debut ;
				$pluiejour = 0 ;
				if ($query) {
					while($currentdet = mysqli_fetch_array($query)) {
						$trouve = 1 ;
						if (date("I",time())==0) { 
						$time[]=($currentdet['tstamp']+3600)*1000;
						} 
						else {
						$time[]=($currentdet['tstamp']+7200)*1000;
						}
						$temp[] = $currentdet["watt_h_c1"] ;


						
					}
				}
				if($trouve == 0) {
					$time[] = 'null' ;
					$temp[] = 'null' ;


					
				}
			?>
			
			eval('var dTime = [<?php echo implode(",", $time); ?>]');
			eval('var dtemp = [<?php echo implode(",", $temp); ?>]');

			

			
					
		</script>
	</head>
	
	<body>
		<table width="910" border="0" align="center">
			<tr> 
				<td> 
					<form id="Formulaire" action="conso_lumiere_detail_total.php" method="get" name="Formulaire" target="_self">
						<table>
							<tr>
								<td rowspan=2 width=300>
									<font size="2">Sélectionnez la période totale du graphique </font>
								</td>
								<td width=30>
									Du
								</td>
								<td width=200>
									<input type="text" name="du" id="edit1" size="10" value="<?php echo sprintf("%02d-%02d-%04d", $jour_debut, $mois_debut, $annee_debut);?>">
								</td>
								<td valign=middle align=left rowspan=2>
									<input type="submit" name="" value="Afficher">
								</td>
							</tr>
							<tr>
								<td width=30>
									Au
								</td>
								<td width=100>
									<input type="text" name="au" id="edit2" size="10" value="<?php echo sprintf("%02d-%02d-%04d", $jour_fin, $mois_fin, $annee_fin);?>">
								</td>
							</tr>
						</table>
					</form>
				</td>
				<td width="101"> 
					<div align="right">
						<a href="javascript:void(0);" onMouseOver="return overlib('<ul><li>Vous pouvez définir la plage d&rsquo;affichage du graphique avec les boutons zoom, <font color=\'#0040FF\'>1 jours</font>, <font color=\'#0040FF\'>une semaine</font>, <font color=\'#0040FF\'>1 mois</font>, et <font color=\'#0040FF\'>Tout</font> et ensuite vous déplacer avec la barre et ses boutons situés en bas du graphique.<br><br></li><li>Vous pouvez modifier la plage d&rsquo;affichage du graphique avec la barre et ses boutons situés en bas du graphique.<br><br></li><li>Vous pouvez zoomer sur une zone spécifique du graphique en maintenant le bouton de la souris et en faisant glisser le curseur à l&rsquo;intérieur du graphique. <br><br></li><li>Vous pouvez masquer/afficher les courbes en cliquant, dans la légende, sur le nom de la donnée dont vous voulez modifier l&rsquo;affichage.<br><br></li></ul>',OPACITY, 90, LEFT, FGCOLOR, '#b5cee1', BGCOLOR, '#4682b4', BORDER, 2, WIDTH, 450, TEXTSIZE, 2, CAPTION, 'Informations' ,CAPTIONSIZE,'3');" onMouseOut="return nd();"><img src="../wxwugraphs/wxwugraphs/images/info.png" width="40" height="40" border="0"></a> 
						<a href="javascript:void(0);" onMouseOver="return overlib('Actualiser le graphique', OPACITY, 80, LEFT, FGCOLOR, '#b5cee1', TEXTSIZE,'2', WIDTH, 160);" onMouseOut="return nd();"><img src="../wxwugraphs/wxwugraphs/images/refresh.png" width="40" height="40" onClick="javascript:location.reload();"></a> 
					</div>
				</td>
			</tr>
			<tr> 
				<td colspan="2"> 
					<div id="container" style="width: 890px; height: 600px; margin: 0 auto"></div>
				</td>
			</tr>
			<tr>
    <td colspan="2">
      <p><button id="button">Afficher les extrêmes sur la plage selectionnée</button></p>
      <p>
      <div id="report"></div>
    </td>
  </tr>
		</table>
	</body>
</html>
Désolé, j'ai fais un peu court, mais j'ai pas mal de job sous le coude.

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: implementer un datpiker dans les champs input

Message par alain » 28 janv. 2015, 23:54

bonsoir
super merci
Ma femme s'en va quelques jours.
le portable va chauffer.
c'est quand même pas si simple ;)
Je me marre j’étais partit comme un gagnant, comme ça fait des années que je fait du basic, je pensais arriver facilement..... la Vie vous ramène vite a la réalité :mrgreen:
encore merci ;)
Alain
Petit Hors sujet
ps j'ai vu que le calcul puissance se faisait, j'en ais déduit que la solution pour savoir si le circulateur était on ou off était trouvée.
Il se peut que quelque fois le calcul donne une puissance négative, c'est normal au démarrage le matin, si les lignes sont longues, mais pas normale la nuit (thermosiphon)
Quand même super, non de voir vivre son install comme cela :D
C'est la que l'on se rend compte que les nuits claires le capteur plan (absorbeur) descend bien plus bas en température que l'air ambiant
encore merci et chapeau, surtout e trouver le temps quand on travaille, et par la même, merci de cotiser :)
Alain
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: implementer un datpiker dans les champs input

Message par Météo Villarzel » 29 janv. 2015, 14:00

Salut Alain,
j'ai vu que le calcul puissance se faisait, j'en ais déduit que la solution pour savoir si le circulateur était on ou off était trouvée.
Oui, j'ai fait une grosse bidouille :lol: en fait j'ai mis un relais en parallèle de mes pompes et une sonde de température, le signal de la sonde est coupé quand le relais tire si qui me donne une valeur "NULL" dans ma BDD, j'utilise cette valeur pour indiquer que la pompe est enclenchée.
C'est la que l'on se rend compte que les nuits claires le capteur plan (absorbeur) descend bien plus bas en température que l'air ambiant
Il faut que je mette encore une sonde à l'entrée de mes capteurs, mais comme ils sont sur le toit, je vais attendre un temps meilleur car avec la neige de ces jours :roll:
encore merci et chapeau, surtout de trouver le temps quand on travaille, et par la même, merci de cotiser
Je ne pense pas que je cotise dans la même caisse que toi, mais c'est-on jamais à l'heure actuelle.

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: implementer un datpiker dans les champs input

Message par alain » 29 janv. 2015, 17:21

re bonjour
après lecture/étude du script a 1 calendrier que tu m'a passé, j'ai trouvé mon erreur et sous mon nez :mrgreen: juste une fonction mal fermée.... et ça fait 15 jours. Pourtant, console.log, firebug, et web Devellopeur. J'ai tout essayé et rien vue.
Je maitrise mal les outils de debug du PHP.
Donc enfin mon calendrier apparait sur ma page et je récupère dans ma variable ma date.
J’étudie maintenant ton script avec plus d'attention et j’espère franchir la barre des dernières XX heures: c'est a dire donner le choix d'une date pour le graph.

Ton script complet m'est très utile car j’étudie comment tu choisit/valide et exécute tes requêtes pour afficher un graph entre deux intervalles de dates

Pour information a celui qui travaille avec Mktime cette page permet en live de tester ses commandes
essai mktime en ligne
https://fr.functions-online.com/mktime.html
sur ce site il y a moyen de tester le résultat de pas mal de choses.
DONC UN GRAND MERCI

note
peut être éditer ton post pour modifier tes chemins, je ne sais pas si en les utilisant ça charge ton serveur?
Perso j'ai les miens

Code : Tout sélectionner

<title>Tests télinformations</title>

      
      <!-- 1. pour les Graphique -->
<script type="text/javascript" src="jquery.min.js"></script>           
<script type="text/javascript" src="highcharts.js"></script> 
<script type="text/javascript" src="grid.js"></script>
<script type="text/javascript" src="exporting.js"></script>

<!-- 1. pour les calendriers -->
<!--- <link href="jquery-ui-1.10.4/css/ui-lightness/jquery-ui-1.10.4.css" rel="stylesheet"> -->
<link href="jquery-ui-1.10.4/css/custom-theme/jquery-ui-1.10.4.custom.css" rel="stylesheet">
<script src="jquery-ui-1.10.4/js/jquery-1.10.2.js"></script>
<script src="jquery-ui-1.10.4/js/jquery-ui-1.10.4.js"></script>
<!-- receupere les langues pour la traduction du calendrier -->
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery-ui-i18n.min.js"></script> 
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: implementer un datpiker dans les champs input

Message par Météo Villarzel » 29 janv. 2015, 18:52

tu as enclenché tous tes serveurs hier soir vers 23h00 :lol:
pff.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: implementer un datpiker dans les champs input

Message par alain » 30 janv. 2015, 00:49

bonsoir
merci, j'ai récupéré pas mal de choses dans ton exemple 1
Ainsi, maintenant je peut naviguer de jours en jours :D
pour l'instant je teste en local, mais je pense que mes routines de gestions d'erreurs sont bonne :|
Ainsi je récupère dans ta condition (if) les messages que je transmet directement dans le graph (sous titre).
-Le jour choisit.
-Si il n'y a pas de jours de choisie, mais seulement l'envoie submit j'affiche par défaut les 24 dernières heures.
-et je gère max date et min date en fonction du début de BDD et du jours en cours?
-j'ai aussi passé ton input en hiden,puisque il n'est plus utile ainsi j'esquive toute la chaine de contrôle (hormis les contrôles classiques), enfin j’espère.
Je met en ligne après plus de test
TRES RECONNAISSANT
Alain
Les projets (c'est pas gagné) :mrgreen:
Maintenant je vais essayer d'ajouter une condition supplémentaire HC/HP pour les couleur.... a partir de la BDD
Après j’attaque les historique, la deux calendriers: ( du au.) affichage en bargraph
Puis je m’inspire de ton système de vue pour faire les calculs directement depuis la BDD pour mes couts
on est pas couché!!
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: implementer un datpiker dans les champs input

Message par alain » 30 janv. 2015, 11:17

bonjour
En ligne, en provisoire. Base sur DB4FREE qui accepte les connexions externes, mais il faut que je trouve une solution plus fiable, je vais surement me tourner vers celle proposée par Jean: une feuille SQL uploadeé, car la trop dépendant de la ligne internet, et de ce coté je suis pas gâté
Merci pour ton aide.... Mais je crois que j'ai encore pas mal a faire appel a la communauté des grosses têtes du langage PHP/MYSQL/HIGHARTS vue mon niveau :mrgreen:
note
posté dans Highstock car au début je voulais implémenter les calendriers dans les inputs de Highstock, mais en fait le graph ce fait sous Highcharts
Alain
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: implementer un datpiker dans les champs input

Message par jturlier » 02 févr. 2015, 15:27

Salut Alain,
pourquoi ne récupères-tu pas la partie calendrier de l'affichage des données statistiques de GW que j'avais écrite en Javascript et qui était destinée aux sites sans PHP.
Jean

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Statistiques GW</title>
<style type="text/css">
#YearCalendar{width:100%;border:1px #E5E5E5 solid;}
#YearCalendar td.TestContainer{text-align:center;border:1px #E5E5E5 solid;}

/* These are some customised themes. The class name has to be passed to the function as the 4th argument*/
.CalendarStyle0{border:1px #ccc solid;border-collapse:collapse;font:normal 60% Verdana, Arial, sans-serif;background:#F2F2F2;}
.CalendarStyle0 td{border:0px #0000FF solid;text-align:center;background-color:#ead6b1}
.CalendarStyle0 td.jour{ border:0px #0000FF solid;text-align:right;cursor:pointer;background-color:#ead6b1}
.CalendarStyle0 td.fleche{  border:0px #0000FF solid;text-align:center;font-weight:bold;color:#000000; cursor:pointer;background-color:#b9a570}
.CalendarStyle0 td.annee{border:0px #0000FF solid;text-align:center;font-weight:bold;color:#000000; cursor:pointer;background-color:#b9a570}
.CalendarStyle0 td.mois{border:0px #0000FF solid;text-align:center;font-weight:bold;color:#000000; cursor:pointer;background-color:#b9a570}
.CalendarStyle0 td.SelectedDay{background:#999999;color:blue;font-weight:bold; cursor:pointer}
.CalendarStyle0 td.Title{font-weight:bold;color:#000000;background-color:#ead6b1}
.CalendarStyle0 .WeekName td{font-weight:bold;width:13%;background-color:#c9b578;text-align:right}
.CalendarStyle0 td.listeMois{border:0px #0000FF solid;text-align:center;cursor:pointer;width:25%;}

#FondEcran { border:2px #E5E5E5 dotted;  padding:5px;width: 99%; height: 100%; z-index: 99; left: 9px; top: 15px;background-color:#dbccA0;}
#Body { background-color:#DBCCA0;}
.Iframe2 {	background-color:#DBCCA0;width:100%; }

.EnTete {border:2px #E5E5E5 solid  ;position: relative; z-index: 1;background-color:#c9b578;padding-top:12px; text-align:center; width:80%}
.IframeStat {width:100%;background-color:#DBCCA0; height:1330px;}
.IframeGtemp {background-color:#DBCCA0; height:200px}
.CalendrierStat {width:20%; vertical-align:top;background-color:#DBCCA0;}
.NomSite{font-weight:bold;	font-size:130%;}
.GWstyle{ text-align:center;font-size:75%;}
</style>
<script type="text/javascript">
<!--
// ClassName - This parameter can be used to apply different themes for different calendars used in the same page
var MonSite ="http://meteozoir.homeip.net/StatisticsFR/"
var NomMonSite ="Statistiques"
function Calendar(Year, Month, Day, ClassName)
{     Calendar.MonthNames = new Array('Janvier','Février','Mars', 'Avril', 'Mai', 'Juin','Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décember');
    //If no parameter is passed use the current date.
    this.oDate = new Date();
    this.Year = (Year == null) ? this.oDate.getFullYear() : Year;
    this.Month = (Month == null) ? this.oDate.getMonth() : Month - 1;
    this.Day = (Day == null) ? 0 : Day;
    this.oDate = new Date(this.Year, this.Month, 1);
    this.NextMonth = new Date(this.Year, this.Month + 1, 1);
    this.WeekStart = this.oDate.getDay();
    // Get the number of months in current month
    this.MonthDays = Math.round((this.NextMonth.getTime() - this.oDate.getTime()) / 86400000) + 1;
    this.HTML = '<table width="100%" class="' + ((ClassName == null) ? 'tblCalendar' : ClassName) + '" cellspacing="0">';
    // Le titre
    this.HTML += '<tr><td colspan="28" class="annee"  onClick="javascript:changedate(\'Full\')">Statistiques complètes</td></tr>';
    // La barre d'accès aux mois et années
    this.HTML += '<tr><td colspan="4" class="fleche" onClick="javascript:changedate(\'prevyr\');"><<<td colspan="4" class="fleche" onClick="javascript:changedate(\'prevmo\');" ><</td> <td colspan="8" class="mois"  onClick="javascript:changedate(\'moactu\')";>' + Calendar.MonthNames[this.Month]+'</td><td colspan="4"  class="annee"  onClick="javascript:changedate(\'actuyr\');">' + this.Year +  '</td><td colspan="4"  class="fleche" onClick="javascript:changedate(\'nextmo\');">></td><td  colspan="4" class="fleche" onClick="javascript:changedate(\'nextyr\');">>></td></tr>';
    // Noms des jours

 if ((Day==0)||(Day=null)) {CalendarMois(Year, Month, Day, ClassName);} else {CalendarJour(Year, Month, Day, ClassName);
}

}
function CalendarJour(Year, Month, Day, ClassName)
{
    // Noms des jours
    this.HTML += '<tr class="WeekName"><td colspan="4" >&nbsp;Dim&nbsp;</td><td colspan="4" >&nbsp;Lun&nbsp;</td><td colspan="4" >&nbsp;Mar&nbsp;</td><td colspan="4" >&nbsp;Mer&nbsp;</td><td colspan="4" >&nbsp;Jeu&nbsp;</td><td colspan="4" >&nbsp;Ven&nbsp;</td><td colspan="4" >&nbsp;Sam&nbsp;</td></tr>';
    this.HTML += '<tr>';
    // Remplissage des premières cellules sans N° de jours avec des blancs
    for(DayCounter = 0; DayCounter < this.WeekStart; DayCounter++)
    {
        this.HTML += '<td colspan="4" ></td>';
    }
    // Remplissage des jours
    for(DayCounter = 1; DayCounter < this.MonthDays; DayCounter++)
    {
        if((DayCounter + this.WeekStart) % 7 == 1) this.HTML += '<tr>';
        if(DayCounter == this.Day)
        	var Classe="SelectedDay";
        else var Classe="jour";
        this.HTML += '<td colspan="4"  class="'+Classe +'" onClick="javascript:changedate(\'jr\',' + DayCounter + ')">' + DayCounter + '</td>';
        if((DayCounter + this.WeekStart) % 7 == 0) this.HTML += '</tr>';
    }
    //  Remplissage des cellules après la fin du mois avec des blancs
	if ((this.MonthDays + this.WeekStart)>35) {var totJour=42;} else {var totJour=35;}
    for(j = (totJour - (this.MonthDays + this.WeekStart)), DayCounter = 0; DayCounter <= j; DayCounter++)
    {
        this.HTML += '<td colspan="4" >&nbsp;</td>';
        if((j - DayCounter) % 7 == 0) this.HTML += '</tr>';
    }
}

function CalendarMois(Year, Month, Day, ClassName)
{
     MonthAbreg = new Array('Jan.','Fév.','Mar.', 'Avr.', 'Mai', 'Juin','Juil.', 'Août.', 'Sep.&nbsp;', 'Oct.', 'Nov.', 'Déc.');
        var Classe="listeMois";
        for(MonthCounter = 1; MonthCounter < 13; MonthCounter++)
    	{     
    	if((MonthCounter) % 4  == 1) this.HTML += '<tr>';
        this.HTML += '<td colspan="7" class="listeMois" onClick="javascript:changedate(\'actumo\',' + (MonthCounter) + ')">' + (MonthAbreg[MonthCounter-1]) + '</td>';
        if((MonthCounter) % 4 == 0) this.HTML += '</tr>';
    	}
}

function changedate(ItemSelected,numX) { //test des éléments sélectionnés dans la barre d'accès aux mois et années ainsi qu'aux jours
this.Month++;
	if (ItemSelected == "prevyr") {this.Year--;}
	else if (ItemSelected == "nextyr") {this.Year++;}
	else if (ItemSelected == "prevmo") {this.Month--;}
	else if (ItemSelected == "nextmo") {this.Month++;}
	var YrModif= false;

	if (this.Month == 0) {
		this.Month = 12;
		this.Year--;
		var YrModif= true;
	}
	else if (this.Month == 13) {
		this.Month = 1;
		this.Year++
		var YrModif= true;
	}
	
var Mois1=String(this.Month+100);
var Mois=Mois1.substring(1,3);
var Jour1=String((numX+100)); //peut être le jour ou le mois !!!!
var Jour=Jour1.substring(1,3);

	if ((ItemSelected == "nextyr")||(ItemSelected == "prevyr")||(ItemSelected == "actuyr")||(YrModif==true))
		{setCookie("GWYear",this.Year);
		setCookie("GWGraphe","OK");
		sURL=MonSite+this.Year+"/"+this.Year+".xml";
		setCookie("GWDay",0);
		}
	if ((ItemSelected == "nextmo")||(ItemSelected == "prevmo")||(ItemSelected == "moactu")||(ItemSelected == "actumo")) 
		{
		sURL=MonSite+this.Year+"/"+Mois+"/"+this.Year+"_"+Mois+".xml";		
		if (ItemSelected == "actumo"){
			sURL=MonSite+this.Year+"/"+Jour+"/"+this.Year+"_"+Jour+".xml";// la var Jour représente le mois
			this.Month=numX;}	
		setCookie("GWMonth",this.Month);
		setCookie("GWGraphe","KO");
		setCookie("GWDay",99);
		}
	if ((ItemSelected == "jr")) 
		{		
		setCookie("GWDay",Jour);
		sURL=MonSite+this.Year+"/"+Mois+"/"+this.Year+"_"+Mois+"_"+ Jour +".xml";		
		setCookie("GWGraphe","KO");
		}

	
	if ((ItemSelected == "Full")) 
	{		sURL=MonSite+"Full.xml"		
			setCookie("GWDay",0);
			setCookie("GWGraphe","OK");
	}
	setCookie("GWsURL",sURL);

//return
    window.location.reload(true); //on réactualise le fenêtre pour redémarrer en récupérant les valeurs des cookies enregistrées précédement
}

function setCookie(name,value,expires,path,domain,secure) 
{
document.cookie=name+"="+escape(value)+((expires==undefined) ? "" :(";expires=" +expires.toGMTString()))+((path==undefined) ? "": ("; path=" +path))+((domain==undefined) ? "" : ("; domain=" +domain))+((secure==true) ? "; secure=" : "");
}

function getCookie(name)
{
if (document.cookie.length==0) 
	{
	return null;
	}
var regCookies= new RegExp("(; )","g");
var cookies=document.cookie.split(regCookies);
for (var i=0; i<cookies.length;i++)
	{
	var regInfo= new RegExp("=","g");
	var infos=cookies[i].split(regInfo);
	if (infos[0]==name)
		{
		return unescape(infos[1]);
		}
	}
}

//-->
</script>
</head>
<body>

<div  id="FondEcran">
	<table width="100%"><tr>
	<td rowspan="2" class="CalendrierStat"> 
<script  type="text/javascript">
//var dtExpire=new Date();
//dtExpire.setTime(dtExpire.getTime()+200*1000); //cookies expire 5 mn later

var maintenant = new Date();
var Year = getCookie("GWYear");
var Month = getCookie("GWMonth");
var Day = getCookie("GWDay");
var sURL = getCookie("GWsURL");
var sGraphe = getCookie("GWGraphe");
/*deleteCookie("GWYear");
deleteCookie("GWMonth");
deleteCookie("GWDay");
deleteCookie("GWsURL");
deleteCookie("GWsURL1");
deleteCookie("GWsURL2");
deleteCookie("GWsURL3");
deleteCookie("GWsURL4");*/
if (Year=='undefined')
{
var Month = maintenant.getMonth()+1;
var Year = maintenant.getFullYear();
var Day = maintenant.getDate();
}
if ((sURL==null)||(sURL=='undefined'))
{
sURL = MonSite+"Full.xml";
sGraphe="OK";
}

    Styles = new Array('CalendarStyle0', 'CalendarStyle1', 'CalendarStyle2', 'CalendarStyle3');
		document.write('<table id="YearCalendar" cellpadding="15">');
        style = Styles[0];
        Calendar(Year,Month,Day, style );//
    	this.HTML += '</table>';
    	document.write('<div id="tblCalendar">' + this.HTML + '</div>'); //ecriture du code html
        //document.write('</td></tr></table>');
</script>

</td><td class="EnTete">
	<span class="NomSite"><script type="text/javascript">document.write(NomMonSite);</script></span> 
	</td>
</tr><tr>
<td class="GWstyle">Created with GraphWeather 
	<em><span >version 2.0</span></em>
</td></tr></table>
	
	</div>

<table  width="100%"  cellspacing="5px">
	<tr >
<td  class="IframeStat" rowspan="5" >
<script  type="text/javascript">
hauteur="height:100%;";
document.write('<iframe id="I1" src="'+MonSite +'Full.xml" scrolling="no" frameborder="0"  name="I1" style="overflow:hidden;'+hauteur+'width:100%;background-color:#dbcca0;"></iframe>');
frames['I1'].location.href=sURL; //iframe is loaded with xml file
</script>
</td></tr></table>
</body>
</html>
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Répondre