Comment récupérer les coordonnées GPS de jeedom dans un scénario

Bonjour
Tout est dans le titre, si vous savez comment je peux récupérer les informations renseignées sur la page de configuration de jeedom L’attitude longitude pour les utiliser directement dans un scénario ?
Merci

Bonjour,

En utilisant un bloc code il me semble que c’est faisable

Bonjour @domoggvad

J’utilise ça :
image
49 et 6 sont les valeurs si config::byKey non définies. ( Jeedom v3 )

super merci

Pour compléter:
image

Je voulais adapter un vieux scénario que j’avais récupérer il y’a quelques années sur l’ancien forum, mille excuses je ne me souvient plus du nom de l’auteur.
il fonctionne , sauf que je n’ai aucun déclenchent des ID scénario au lever , mais Ok au coucher
j’ai aussi une erreur sur les logs du scénario:
PHP Notice: Undefined variable: idCoucher in /var/www/html/core/class/scenarioExpression.class.php(1748) : eval()'d code on line 190
decompte soleil
si vous avez une idée merci

/******************************************************************************/

    //Configuration
    $Debug = false;   // Permet d'activer les log de Debug - true ou false
    $latitude =config::bykey('info::latitude')??48;
    $longitude = config::bykey('info::longitude')??2;
    //$latitude = 48.960226;
    //$longitude = 2.542867;
    $zenith = 90;
    $gmt = 3; // GMT/UTC
    $idCoucher=0
    $Variable_Lever = "HeureLever"; // Le nom de votre Variable pour le levé
    $Variable_Coucher = "HeureCoucher"; // Le Nom de votre Variable pour le couché
    $Variable_madate= "madated";
    $Variable_madate2= "madated2";
    $madate2=date("d-m-y");
    
    $scenario->setData($Variable_madate, $madate2);

    
    /******************************************************************************/

    // Déclaration des ID Scénarios à mettre à jour pour Lever Soleil
    $IdScenaLever = array(
       "135:+10",   // Scénario lumiere exterieur
       "151:-10",           // Scénario volets
       "131"              // Scénario Divers
    );

    // Déclaration des ID Scénarios à mettre à jour pour Coucher Soleil
    $IdScenaCoucher = array(
       "135:+10",       // Scénario lumiere exterieur
       "151:-10",           // Scénario volets
       "131"             // Scénario Divers
    );

    /******************************************************************************/

    // Lever Soleil
    $Lever_Soleil = date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt);
    $Lever_Soleil_Value = explode(":", $Lever_Soleil);

    // Stockage du Lever de Soleil dans sa Variable
    $scenario->setData($Variable_Lever, $Lever_Soleil_Value[0].$Lever_Soleil_Value[1]);
    if ($Debug) { $scenario->setLog(':: DEBUG :: Sauvegarde : ' . $Lever_Soleil_Value[0].$Lever_Soleil_Value[1] . ' Dans Variable : ' . $Variable_Lever); }

    // Initialisation du Tableau
    $TbLever = 0;

    // Exécution des Modifications Cron pour chaque Element du Tableau
    if ($Debug) { $scenario->setLog(':: DEBUG :: Nombre ID pour Lever : ' . count($IdScenaLever)); }
    if (count($IdScenaLever) > 0) {
       foreach ($IdScenaLever as $IdScenaLeverValue) {

          if ($Debug) { $scenario->setLog('-------------------------------------------------------------------------------'); }

          if (strstr($IdScenaLeverValue, ':')) {

             // Récupèration Heures et Minutes séparés
             $IdScenaLeverValue = explode(':', $IdScenaLeverValue);
             if ($Debug) { $scenario->setLog(':: DEBUG :: Id Scena : ' . $IdScenaLeverValue[0] . ' - Décalage Horaire : ' . $IdScenaLeverValue[1]); }

             // Conversion en secondes de L'heure et minute du Lever Soleil
             $ConvertHeureLever = ((($Lever_Soleil_Value[0] * 60)*60) + ($Lever_Soleil_Value[1] * 60));
             if ($Debug) { $scenario->setLog(':: DEBUG :: Heure Lever en Seconde : '.$ConvertHeureLever); }

             // Vérification d'un décalage horaire
             if (strstr($IdScenaLeverValue[1], '+')) {
                // Incrémentation des minutes converties en secondes
                $ConvertHeureLever += substr($IdScenaLeverValue[1], 1)*60;
                if ($Debug) { $scenario->setLog(':: DEBUG :: ConvertHeureLever secondes (+) : ' . $ConvertHeureLever); }
             }
             else if (strstr($IdScenaLeverValue[1], '-')) {
                // Décrémentation des minutes converties en secondes
                $ConvertHeureLever -= substr($IdScenaLeverValue[1], 1)*60;
                if ($Debug) { $scenario->setLog(':: DEBUG :: ConvertHeureLever secondes (-) : ' . $ConvertHeureLever); }
             } else {
                $scenario->setLog(":: ERROR : Pas d'indicateur d'addition ou de soustraction !");
             }

             $NewHeureLever = intval($ConvertHeureLever / 3600);
             $NewMinuteLever = intval(($ConvertHeureLever % 3600) / 60);
             $IdScenaToEdit = intval($IdScenaLeverValue[0]);

             if ($Debug) { $scenario->setLog(':: DEBUG :: NewHeureLever : ' . $NewHeureLever); }
             if ($Debug) { $scenario->setLog(':: DEBUG :: NewMinuteLever : ' . $NewMinuteLever); }

          } else {

             if ($Debug) { $scenario->setLog(':: DEBUG :: Id Scena : ' . $IdScenaLeverValue[0]); }

             $NewHeureLever = $Lever_Soleil_Value[0];
             $NewMinuteLever = $Lever_Soleil_Value[1];
             $IdScenaToEdit = $IdScenaLeverValue;

             if ($Debug) { $scenario->setLog(':: DEBUG :: NewHeureLever : ' . $NewHeureLever); }
             if ($Debug) { $scenario->setLog(':: DEBUG :: NewMinuteLever : ' . $NewMinuteLever); }
          }

          $Scenario = scenario::byId($IdScenaToEdit);

          if (is_object($Scenario)) {
             if ($Scenario->getMode() != 'schedule') {
                $Scenario->setMode('schedule');
             }

             $Schedule = $Scenario->getSchedule();
             $Scenario->setSchedule($NewMinuteLever . ' ' . $NewHeureLever . ' * * *');
             $Scenario->save();
          }

          $TbLever++;
       }
    } else { $scenario->setLog(":: LOG : Pas de Scénario à modifier pour le Lever de Soleil !"); }

    if ($Debug) { $scenario->setLog('-------------------------------------------------------------------------------'); }

    // Coucher Soleil
    $Coucher_Soleil = date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt);
    $Coucher_Soleil_Value = explode(":", $Coucher_Soleil);

    // Stockage du Coucher de Soleil dans sa Variable
    $scenario->setData($Variable_Coucher, $Coucher_Soleil_Value[0].$Coucher_Soleil_Value[1]);
    if ($Debug) { $scenario->setLog(':: DEBUG :: Sauvegarde : ' . $Coucher_Soleil_Value[0].$Coucher_Soleil_Value[1] . ' Dans Variable : ' . $Variable_Coucher); }

    // Initialisation du Tableau
    $TbCoucher = 0;

    // Exécution des Modifications Cron pour chaque Element du Tableau
    if ($Debug) { $scenario->setLog(':: DEBUG :: Nombre ID pour Coucher : ' . count($IdScenaCoucher)); }
    if (count($IdScenaCoucher) > 0) {
       foreach ($IdScenaCoucher as $IdScenaCoucherValue) {

          if ($Debug) { $scenario->setLog('-------------------------------------------------------------------------------'); }

          if (strstr($IdScenaCoucherValue, ':')) {

             // Récupèration Heures et Minutes séparés
             $IdScenaCoucherValue = explode(':', $IdScenaCoucherValue);
             if ($Debug) { $scenario->setLog(':: DEBUG :: Id Scena : ' . $IdScenaCoucherValue[0] . ' - Décalage Horaire : ' . $IdScenaCoucherValue[1]); }

             // Conversion en secondes de L'heure et minute du Coucher Soleil
             $ConvertHeureCoucher = ((($Coucher_Soleil_Value[0] * 60)*60) + ($Coucher_Soleil_Value[1] * 60));
             if ($Debug) { $scenario->setLog(':: DEBUG :: Heure Coucher en Seconde : '.$ConvertHeureCoucher); }

             // Vérification d'un décalage horaire
             if (strstr($IdScenaCoucherValue[1], '+')) {
                // Incrémentation des minutes converties en secondes
                $ConvertHeureCoucher += substr($IdScenaCoucherValue[1], 1)*60;
                if ($Debug) { $scenario->setLog(':: DEBUG :: ConvertHeureCoucher secondes (+) : ' . $ConvertHeureCoucher); }
             }
             else if (strstr($IdScenaCoucherValue[1], '-')) {
                // Décrémentation des minutes converties en secondes
                $ConvertHeureCoucher -= substr($IdScenaCoucherValue[1], 1)*60;
                if ($Debug) { $scenario->setLog(':: DEBUG :: ConvertHeureCoucher secondes (-) : ' . $ConvertHeureCoucher); }
             }
             else {
                $scenario->setLog(":: ERROR : Pas d'indicateur d'addition ou de soustraction !");
             }

             $NewHeureCoucher = intval($ConvertHeureCoucher / 3600);
             $NewMinuteCoucher = intval(($ConvertHeureCoucher % 3600) / 60);
             $IdScenaToEdit = intval($IdScenaCoucherValue[0]);

             if ($Debug) { $scenario->setLog(':: DEBUG :: NewHeureCoucher : ' . $NewHeureCoucher); }
             if ($Debug) { $scenario->setLog(':: DEBUG :: NewMinuteCoucher : ' . $NewMinuteCoucher); }
          } else {
             if ($Debug) { $scenario->setLog(':: DEBUG :: Id Scena : ' . $IdScenaCoucherValue[0]); }

             $NewHeureCoucher = $Coucher_Soleil_Value[0];
             $NewMinuteCoucher = $Coucher_Soleil_Value[1];
             $IdScenaToEdit = $IdScenaCoucherValue;

             if ($Debug) { $scenario->setLog(':: DEBUG :: NewHeureCoucher : ' . $NewHeureCoucher); }
             if ($Debug) { $scenario->setLog(':: DEBUG :: NewMinuteCoucher : ' . $NewMinuteCoucher); }
          }

          $Scenario = scenario::byId($IdScenaToEdit);

          if (is_object($Scenario)) {
             if ($Scenario->getMode() != 'schedule') {
                $Scenario->setMode('schedule');
             }

             $Schedule = $Scenario->getSchedule();
             $Scenario->setSchedule($NewMinuteCoucher . ' ' . $NewHeureCoucher . ' * * *');
             $Scenario->save();
          }

          $idCoucher++;
       }
    } else { $scenario->setLog(":: LOG : Pas de Scénario à modifier pour le Coucher de Soleil !"); }

        $scenario->setLog('Levée - Couchée Soleil : '.$Lever_Soleil_Value[0].$Lever_Soleil_Value[1].' - '.$Coucher_Soleil_Value[0].$Coucher_Soleil_Value[1]);
		$scenario->setLog('Date : '.$madate2);
	
1 « J'aime »

Hum! le code me paraît conséquent par rapport à ce que j’ai mit dans mon plugin (MétéoFull). Le code est plus petit. Pourquoi réinventer la roue, il y a une fonction existante en PHP :

**date_sun_info**
Returns an array with information about sunset/sunrise and twilight begin/end
<?php
function date_sun_info($time, $latitude, $longitude) { }
*@param*   `int $time`  — Timestamp.
*@param*   `float $latitude`  — Latitude in degrees.
*@param*   `float $longitude`  — Longitude in degrees.
*@return*   `array|false`  — array on success or false on failure.
*@link*  [https://php.net/manual/en/function.date-sun-info.php](#)
*@since*  5.1.2
Returns an array with information about sunset/sunrise and twilight begin/end

Donc en gros, tu récupères tes coordonnées et tu envois à cette fonction avec la date du jour. Tu récupères ensuite un tableau :

$infoSoleil = date_sun_info($jour0, $latitude, $longitude);
$datajson['jour_0']['sunrise'] = date("H:i", $infoSoleil["sunrise"]);
$datajson['jour_0']['sunset'] = date("H:i", $infoSoleil["sunset"]);

C est surtout la partie exécution des scénarios qui me paraît intéressante

@domoggvad

Pour le PHP Notice, il manque un ; à la fin de la ligne $idCoucher=0;
image
C’est peut être ce qui fait que les scenarios du Lever ne sont pas exécutés.

Pourquoi faire le calcul des heures de lever et coucher du soleil sur le fuseau horaire gmt+3 ?

c’était juste pour mes tests, je décalais pour voir l’exécution, bien sur c’est 1
merci

1 en hiver et 2 en été ?

Oui c est bien ça, d ici que les changements d horaires ne disparaissent.

Vous pouvez lancer des scénarios depuis un scenario:
image

Merci, je voulais juste parfaire mes connaissances en codant un peu et surtout comprendre la logique de son scénario en le modifiant.

Si ça peut aider …

Merci @olive