Forum eedomus
http://forum.eedomus.fr/

[Store] Soleil étendu
http://forum.eedomus.fr/viewtopic.php?f=50&t=6047
« Précédent  Page 11 sur 11
Auteur:  CorsicaSouth [ 29 Mars 2021 10:18 ]
Sujet du message:  Re: [Store] Soleil étendu

Merci Harzhal pour le conseil

Vérification fuseau horaire faite, je suis bien dans GMT+1/Paris

Ce matin les horaires étendu sont ceux attendus et prennent bien en compte le passage heure d'été. Donc ce soir celà devrait faire ce qui est prévu.
Capture d’écran (101).png
Capture d’écran (101).png (69.07 Kio) Consulté 5754 fois


Je pense que le pb survient du fait du recalcul quotidien de "Soleil Etendu" qui se fait à 3h00.

Au moment du changement d'horaire on passe de 2h00 à 3h00+epsilon et donc probablement le recalcul de Soleil Etendu ne se fait pas le jour du changement d'heure car on ne passe pas par 3h00 précise. Il suffirait sans doute que le recalcul soit fait à 3h01 au lieu de 3h00. Pour valider il faudrait qu'influman se penche sur le plugin qu'il a mis à disposition et infirme/confirme mon idée.

Bon c'est pas bien grave cependant

Bonne journée
Auteur:  Harzhal [ 29 Mars 2021 10:52 ]
Sujet du message:  Re: [Store] Soleil étendu

C'est bien ça la raison effectivement...

Tu es entré dans le Soleil Etendu a un moment charnière ! ;)
Auteur:  flux [ 17 Déc 2021 11:19 ]
Sujet du message:  Re: [Store] Soleil étendu

Bonjour à tous,

Le soleil ne s'est pas levé chez moi ce matin :lol:
C'est le cas chez vous aussi?
soleiletendu.PNG
soleiletendu.PNG (21.26 Kio) Consulté 5454 fois
Auteur:  Christophe [ 17 Déc 2021 12:24 ]
Sujet du message:  Re: [Store] Soleil étendu

90993CB9-2B50-4957-8924-5C9EFB1E38C6.jpeg
90993CB9-2B50-4957-8924-5C9EFB1E38C6.jpeg (151.15 Kio) Consulté 5450 fois


Bonjour,
De mon côté c’est passé
;)
Auteur:  influman [ 17 Déc 2021 17:58 ]
Sujet du message:  Re: [Store] Soleil étendu

flux a écrit:Bonjour à tous,

Le soleil ne s'est pas levé chez moi ce matin :lol:
C'est le cas chez vous aussi?
soleiletendu.PNG


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.
Auteur:  merguez07 [ 17 Déc 2021 18:35 ]
Sujet du message:  Re: [Store] Soleil étendu

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.
Auteur:  influman [ 17 Déc 2021 19:33 ]
Sujet du message:  Re: [Store] Soleil étendu

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.


Oui :) c’est bien pour ça qu’il n’a pas ete construit comme ça a la base ;)
Auteur:  merguez07 [ 17 Déc 2021 20:57 ]
Sujet du message:  Re: [Store] Soleil étendu

influman a écrit:Oui :) c’est bien pour ça qu’il n’a pas ete construit comme ça a la base


C'était effectivement l'idée...mais il y avait aussi des trous dans la raquette :D

Flux peux tu nous tester ce code ?
Code : Tout sélectionner
<?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;

    }

?>
Auteur:  flux [ 27 Mars 2022 18:55 ]
Sujet du message:  Re: [Store] Soleil étendu

Bonjour,

Pour l'instant pas de soucis en 1.7, je n'ai pas reperdu l'état Est lèvé.
Par contre aujourd'hui le changement d'heure n'a pas été pris en compte, mes volets se sont fermés une heure trop tôt.

flux
Auteur:  merguez07 [ 27 Mars 2022 19:23 ]
Sujet du message:  Re: [Store] Soleil étendu

flux a écrit:Par contre aujourd'hui le changement d'heure n'a pas été pris en compte


bonjour,

l'heure prise en compte est celle contenue dans l'Eedomus.

regarde ici :http://IP de ta box eedomus/config/ et autres paramètres, tu pourras forcer la mise à l'heure si elle n'est pas bonne
Auteur:  flux [ 28 Mars 2022 19:50 ]
Sujet du message:  Re: [Store] Soleil étendu

Trop bien! Merci pour l'astuce! :)
Auteur:  Christophe [ 17 Avr 2023 08:06 ]
Sujet du message:  Re: [Store] Soleil étendu

Bonjour,

Aujourd'hui j'ai un loupé sur l'état "est levé" avez vous vécu ce raté ou est-ce localisé chez moi svp ?

Merci de vos retour

Capture d’écran 2023-04-17 à 09.05.46.png
Est levé ??
Capture d’écran 2023-04-17 à 09.05.46.png (91.07 Kio) Consulté 2343 fois
Auteur:  flux [ 17 Avr 2023 08:37 ]
Sujet du message:  Re: [Store] Soleil étendu

Bonjour,

Pour ma part j'ai bien reçu l'évènement "Est Levé"(7:13:05) (environ 30 minutes après "Se lève" (6:45:42))
Auteur:  Christophe [ 20 Avr 2023 07:45 ]
Sujet du message:  Re: [Store] Soleil étendu

Bonjour Flux,

Merci pour l'info ;)

Un bug ponctuel, j'espère....

Bonne journée.
Page 11 sur 11 Le fuseau horaire est UTC+1 heure