[Store] Soleil étendu

Discussion et échanges de scripts pour la box eedomus

Re: [Store] Soleil étendu

Messagepar CorsicaSouth » 29 Mars 2021 10:18

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é 5461 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
CorsicaSouth
 
Messages : 5
Inscription : 12 Oct 2015
Localisation : Corse du Sud

Re: [Store] Soleil étendu

Messagepar Harzhal » 29 Mars 2021 10:52

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

Tu es entré dans le Soleil Etendu a un moment charnière ! ;)
eedomus+ Domotique Z-Wave sur Chauffage + Eclairage + Protection ouvrants + Volets roulants & Vélux + Protection fuite eau & fumée + Vannes connectées + Caméras Foscam - +de 70 objets connectés + Station Netatmo + Somfy Connexoon + Onduleur APC
Harzhal
 
Messages : 675
Inscription : 18 Oct 2018
Localisation : Roazhon - Breizh

Re: [Store] Soleil étendu

Messagepar flux » 17 Déc 2021 11:19

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é 5161 fois
flux
 
Messages : 53
Inscription : 30 Nov 2018

Re: [Store] Soleil étendu

Messagepar Christophe » 17 Déc 2021 12:24

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


Bonjour,
De mon côté c’est passé
;)
Eedomus+, Netatmo: Camera Thermostat pluviomètre anémomètre Station météo , Synology Ds218, Raspberry Pi 3, Alarme Myfox HCPRO, Ensemble Dio modules détecteurs portes, Antenne GP433
Christophe
 
Messages : 140
Inscription : 28 Sep 2019
Localisation : Hauts de France

Re: [Store] Soleil étendu

Messagepar influman » 17 Déc 2021 17:58

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.
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: [Store] Soleil étendu

Messagepar merguez07 » 17 Déc 2021 18:35

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.
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Soleil étendu

Messagepar influman » 17 Déc 2021 19:33

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 ;)
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: [Store] Soleil étendu

Messagepar merguez07 » 17 Déc 2021 20:57

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;

    }

?>
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Soleil étendu

Messagepar flux » 27 Mars 2022 18:55

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
flux
 
Messages : 53
Inscription : 30 Nov 2018

Re: [Store] Soleil étendu

Messagepar merguez07 » 27 Mars 2022 19:23

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
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Soleil étendu

Messagepar flux » 28 Mars 2022 19:50

Trop bien! Merci pour l'astuce! :)
flux
 
Messages : 53
Inscription : 30 Nov 2018

Re: [Store] Soleil étendu

Messagepar Christophe » 17 Avr 2023 08:06

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é 2050 fois
Eedomus+, Netatmo: Camera Thermostat pluviomètre anémomètre Station météo , Synology Ds218, Raspberry Pi 3, Alarme Myfox HCPRO, Ensemble Dio modules détecteurs portes, Antenne GP433
Christophe
 
Messages : 140
Inscription : 28 Sep 2019
Localisation : Hauts de France

Re: [Store] Soleil étendu

Messagepar flux » 17 Avr 2023 08:37

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))
flux
 
Messages : 53
Inscription : 30 Nov 2018

Re: [Store] Soleil étendu

Messagepar Christophe » 20 Avr 2023 07:45

Bonjour Flux,

Merci pour l'info ;)

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

Bonne journée.
Eedomus+, Netatmo: Camera Thermostat pluviomètre anémomètre Station météo , Synology Ds218, Raspberry Pi 3, Alarme Myfox HCPRO, Ensemble Dio modules détecteurs portes, Antenne GP433
Christophe
 
Messages : 140
Inscription : 28 Sep 2019
Localisation : Hauts de France

Précédent

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 17 invité(s)