flux a écrit:Bonjour à tous,
Le soleil ne s'est pas levé chez moi ce matin
C'est le cas chez vous aussi?
influman a écrit:A priori, Polling loupé par la box a la minute exacte de la phase de lever.
Il faudrait securiser ce plugin pour qu’il fasse le bon passage a la phase en testant >= plutot que l’heure exacte. Ce qui permettrait meme de reduire le Polling.
merguez07 a écrit:influman a écrit:A priori, Polling loupé par la box a la minute exacte de la phase de lever.
Il faudrait securiser ce plugin pour qu’il fasse le bon passage a la phase en testant >= plutot que l’heure exacte. Ce qui permettrait meme de reduire le Polling.
humm..pas aussi simple car on teste déjà avec du >=.
Le problème c'est que les états Est levé (sunrise) et levée limite sont souvent séparés que d'une minute et donc si on rate le polling du Est Levé on chope forcément celui du levée Limite à la place.
Va falloir cogiter pour balayer tous les états.
influman a écrit:Oui c’est bien pour ça qu’il n’a pas ete construit comme ça a la base
<?php
// *********************************************************************************************************************
// V1.23 : Script qui fournit les phases du soleil incluant des phases personnalisées en écart
// V1.3 : Merguez07 : simplification du code
// Amélioration de la gestion des phases
// recherche auto des coordonnées (lat, long) en fonction de l'IP de la box Eedomus
// recherche auto de la ville en fonction des coordonnées (lat, long)
// V1.4 : Merguez07 : correction de bug qui generait 60 requêtes entre 2 et 3h00
// V1.5 : Merguez07 : Correction pour prendre en compte une erreur suite à requête
// V1.6 : Merguez07 : Correction pour prendre en compte un update lors de l'installation du plugin
// V1.7 : Merguez07 : Correction pour ne pas sauté l'état Est Levé en cas de perte de polling
//*************************************** *****************************************************************************
$num = getArg("num", true); // Obligatoire : numéro du plugin (pour gerer plusieurs plugin identiques)
$update = getArg("update", false, ''); // Optionnel : update forcée si $update="now"
$refresh = loadVariable($num.'refresh'); //si true on peu faire la requête, si FALSE on utilise le cache
if ($refresh==="") $refresh=true;
$hour = date("G"); //ex : "10" ou "4" heure
$heurenum = date("H:i"); //ex : "10:15" ou "04:15" heure:minute
$cached_xml = loadVariable($num.'cached_xml');
if ($cached_xml=="") $update="now";
if (!$refresh && $hour==2) { // à 02:00 on autorise à faire la requête de 03:00)
$refresh=true;
saveVariable($num.'refresh', $refresh);
}
if (($refresh && $hour==3)||($update=="now")) {
$json = httpQuery("http://ip-api.com/json");
$Tjson = sdk_json_decode($json,true);
$latlong = $Tjson["lat"].",".$Tjson["lon"];
$ville = $Tjson["city"]; // ville de la box
$longlat = getArg("longlat", false);// latitude,longitude
if ($longlat==""||strpos($longlat, "plugin")!== false) $longlat=$latlong;
$tab_longlat = explode(",",$longlat);
$latitude = $tab_longlat[0];
$longitude = $tab_longlat[1];
if ($longlat!=$latlong) {
$url_ville = "https://geo.api.gouv.fr/communes?lat=$latitude&lon=$longitude&format=json";
$json = httpQuery($url_ville);
$Tjson = sdk_json_decode($json,true);
$ville = $Tjson[0]["nom"];
}
$param = getArg("delay", false);// param
$tab_param = explode(",",$param);
$delay = $tab_param[0];
$heurelimlevermini = $tab_param[1];
$heurelimlevermaxi = $tab_param[2];
$heurelimcouchermini = $tab_param[3];
$heurelimcouchermaxi = $tab_param[4];
// requête des données soleil via api
$url = "http://api.sunrise-sunset.org/json?lat=".$latitude."&lng=".$longitude;
$json = httpQuery($url,'GET');
$result = sdk_json_decode(utf8_encode($json));
if ($result['status']!="OK") die;
$date_request = date ("d/m/y à H:i");
// détermination des phases
if ($delay >= 60) $delay = 59;
if ($delay <= 0) $delay = 1;
list($gmt) = sscanf(date("P"), "%d:%d");
$seleve = date("H:i", strtotime($result['results']['civil_twilight_begin']." +$gmt hours"));// SE LEVE
$avantleve = date("H:i", strtotime($seleve." -$delay minutes")); // AVANT LEVER
$leve = date("H:i", strtotime($result['results']['sunrise']." +$gmt hours")); // LEVER
$apresleve = date("H:i", strtotime($leve." +$delay minutes")); // APRES LEVER
$zenith = date("H:i", strtotime($result['results']['solar_noon']." +$gmt hours")); // ZENITH
$secouche = date("H:i", strtotime($result['results']['sunset']." +$gmt hours")); // SE COUCHE
$avantcouche= date("H:i", strtotime($secouche." -$delay minutes")); // AVANT COUCHER
$couche = date("H:i", strtotime($result['results']['civil_twilight_end']." +$gmt hours")); // COUCHER
$aprescouche= date("H:i", strtotime($couche." +$delay minutes")); // APRES COUCHER
// détermination limite
$leverlim = $heurelimlevermini;
if ($leve > $heurelimlevermini && $leve <= $heurelimlevermaxi) $leverlim = date("H:i", strtotime($leve." +1 minutes"));
if ($leve > $heurelimlevermaxi ) $leverlim = $heurelimlevermaxi;
$coucherlim = $heurelimcouchermini;
if ($secouche > $heurelimcouchermini && $secouche <= $heurelimcouchermaxi) $coucherlim = date("H:i", strtotime($secouche." +1 minutes"));
if ($secouche > $heurelimcouchermaxi ) $coucherlim = $heurelimcouchermaxi;
// détermination du status
$Tab_status=array( 1=>$avantleve,
2=>$seleve,
3=>$leve,
4=>$apresleve,
5=>$avantcouche,
6=>$secouche,
7=>$couche,
8=>$aprescouche,
12=>$zenith,
100=>$leverlim,
200=>$coucherlim);
saveVariable($num.'tab_status', $Tab_status);
$status=sdk_find_status($Tab_status,$heurenum);
$old_status=loadVariable($num.'old_status');
if (($status==100) && ($old_status==2)&&(($leve > $heurelimlevermini) && ($leve <= $heurelimlevermaxi))) $status=3;
saveVariable($num.'old_status', $status);
// détermination du cache XML
$cached_xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"."\n";
$cached_xml .= "<SUN>"."\n";
$cached_xml .= " <STATUS>" .$status. "</STATUS>" ."\n";
$cached_xml .= " <DATE_CACHE>" .$date_request. "</DATE_CACHE>" ."\n";
$cached_xml .= ' <CACHE>0</CACHE>' ."\n";
$cached_xml .= " <VILLE>" .$ville. "</VILLE>" ."\n";
$cached_xml .= " <LATITUDE>" .$latitude. "</LATITUDE>" ."\n";
$cached_xml .= " <LONGITUDE>" .$longitude. "</LONGITUDE>" ."\n";
$cached_xml .= " <LEVEE_LIMITE_MIN>" .$heurelimlevermini. "</LEVEE_LIMITE_MIN>" ."\n";
$cached_xml .= " <LEVEE_LIMITE>" .$leverlim. "</LEVEE_LIMITE>" ."\n";
$cached_xml .= " <LEVEE_LIMITE_MAX>" .$heurelimlevermaxi. "</LEVEE_LIMITE_MAX>" ."\n";
$cached_xml .= " <AVANT_LEVEE>" .$avantleve. "</AVANT_LEVEE>" ."\n";
$cached_xml .= " <SE_LEVE>" .$seleve. "</SE_LEVE>" ."\n";
$cached_xml .= " <SUNRISE>" .$leve. "</SUNRISE>" ."\n";
$cached_xml .= " <APRES_LEVEE>" .$apresleve. "</APRES_LEVEE>" ."\n";
$cached_xml .= " <ZENITH>" .$zenith. "</ZENITH>" ."\n";
$cached_xml .= " <AVANT_COUCHE>" .$avantcouche. "</AVANT_COUCHE>" ."\n";
$cached_xml .= " <SUNSET>" .$secouche. "</SUNSET>" ."\n";
$cached_xml .= " <COUCHE>" .$couche. "</COUCHE>" ."\n";
$cached_xml .= " <APRES_COUCHE>" .$aprescouche. "</APRES_COUCHE>" ."\n";
$cached_xml .= " <COUCHEE_LIMITE_MIN>" .$heurelimcouchermini. "</COUCHEE_LIMITE_MIN>" ."\n";
$cached_xml .= " <COUCHEE_LIMITE>" .$coucherlim. "</COUCHEE_LIMITE>" ."\n";
$cached_xml .= " <COUCHEE_LIMITE_MAX>" .$heurelimcouchermaxi. "</COUCHEE_LIMITE_MAX>" ."\n";
$cached_xml .= '</SUN>'."\n";
//affichage du cache XML
sdk_header('text/xml');
echo $cached_xml;
//modification du cache XML
$cached_xml = str_replace(' <CACHE>0</CACHE>', ' <CACHE>1</CACHE>', $cached_xml);
saveVariable($num.'cached_xml', $cached_xml);
//blocage ds requêtes
$refresh=false;
saveVariable($num.'refresh', $refresh);
} else {
$cached_xml = loadVariable($num.'cached_xml');
// détermination du status
$Tab_status = loadVariable ($num.'tab_status');
$status = sdk_find_status($Tab_status,$heurenum);
//modification du cache XML
$ex_status = xpath($cached_xml,"/SUN/STATUS");
$cached_xml = str_replace(" <STATUS>" .$ex_status. "</STATUS>", " <STATUS>" .$status. "</STATUS>", $cached_xml);
//affichage du cache XML
sdk_header('text/xml');
echo $cached_xml;
}
die;
function sdk_find_status ($Tab_status,$heurenum){ // recherche le status en fonction de l'heure en cours
$maxhour = max ($Tab_status);
$minhour = min ($Tab_status);
if ($heurenum<$minhour ||$heurenum>$maxhour ) $monstatus=sdk_array_search($maxhour,$Tab_status);
else {
foreach ($Tab_status as $status=>$state){
if ($heurenum>=$state){
if ($monstatus=="") $monstatus=$status;
else if ($Tab_status[$monstatus]<$state) $monstatus=$status;
}
}
}
return $monstatus;
}
function sdk_array_search($data,$array) { // recherche la clé d'un tableau à partir de la valeur
foreach ($array as $key=> $value) if ($value==$data) return $key;
}
?>
flux a écrit:Par contre aujourd'hui le changement d'heure n'a pas été pris en compte
Christophe a écrit:Bonjour,
Pas eu de "est levé" aujourd'hui
Et de votre côté?
Bonne journée
Christophe a écrit:Bonjour,
Pas eu de "est levé" aujourd'hui
Et de votre côté?
Bonne journée
Christophe a écrit:Bonjour et merci pour vos retours,
J’ai la version V1.6
Sûrement un loupé ponctuel, Ça reste très rare et pas d’impact important pour moi…
A voir demain,
Bonne journée
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)