[Résolu] loadVariable - saveVariable

Discussion et échanges de scripts pour la box eedomus

[Résolu] loadVariable - saveVariable

Messagepar merguez07 » 17 Mars 2018 10:50

Bonjour à tous,

je bloque sur un script utilisant les commandes loadVariable et saveVariable.
Un premier actionneur doit exécuter le script qui doit stocker une variable dans le saveVariable.
Un autre actionneur va lui aussi exécuter le script et dois recharger la variable avec loadVariable.
Malheureusement ce deuxième actionneur recharge une valeur vide alors que le premier a bien stocké une variable lors du SaveVariable.

y a t-il un nombre de variables limité, ou une durée de mémorisation limitée. Je ne comprends pas ou est le blème.
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: loadVariable - saveVariable

Messagepar rover820i » 17 Mars 2018 11:04

Salut,

Peux-tu mettre le passage de ton script ?
rover820i
 
Messages : 3363
Inscription : 23 Juil 2016

Re: loadVariable - saveVariable

Messagepar influman » 17 Mars 2018 11:18

Il y a enormement de place en memoire et pas de pb de memorisation.
De plus, on peut meme se passer des variables de script en script (c’est le cas entre Ask/Chatbot et Notifications IFTTT)

On penche donc plutot sur une erreur de ton cote ;)
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: loadVariable - saveVariable

Messagepar merguez07 » 17 Mars 2018 12:08

influman a écrit:On penche donc plutot sur une erreur de ton cote ;)


c'est bête à dire, mais je l'espère

voici mon script
meteodujour.zip
(329.84 Kio) Téléchargé 247 fois
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: loadVariable - saveVariable

Messagepar merguez07 » 18 Mars 2018 12:04

bon alors les gars, vous calez ? mon code est il pourrit ?
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: loadVariable - saveVariable

Messagepar influman » 18 Mars 2018 12:39

J’ai pas eu le temps de regarder, j’ai pas de PC ss la main...
Mets le bout de code en dur dans le forum là, stp
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: loadVariable - saveVariable

Messagepar merguez07 » 18 Mars 2018 12:44

Code : Tout sélectionner
<?php
/*************************************************************************************
**
** Script Meteo du Jour pour eedomus
**
** Script qui permet de recuperer au format XML les parametres des previsions
** de la meteo du jour de l'endroit ou se trouve votre box Eedomus
**
** - Ville                              (//ville),          texte
** - Date de la mesure                  (//dateupdate),     texte
** - Temp mini estimée du jour          (//tmin),           integer     °c
** - Temp maxi estimée du jour          (//tmax),           integer     °c
** - Temp moy estimée du jour           (//tmoy),           integer     °c
** - Condition méteo estimée du jour    (//condition),      texte
** - Vitesse max du vent estimée du jour(//ventmax),        integer     km/h
** - Humidite moyenne estimée du jour   (//hygmoy),         integer     %
** - Visibilite moyenne estimée du jour (//vismoy).         integer     km
** rajouts indice 1.1
** - Température mesurée ressentie      (//tress),          integer     °c
** - Température mesurée actuelle       (//tact),           integer     °c
** - Pression atm actuelle              (//pressact),       integer     mb
** - Vitesse du vent actuelle           (//ventact),        integer     km/h
** - Direction du vent mesurée actuelle (//dirvent),        texte   
** - Direction du vent mesurée actuelle (//dirventdeg),     integer     °
** - humidité mesurée actuelle          (//hygact),         integer     %
** - pluviométrie mesurée actuelle      (//pluieact),       integer     mm
** - pluviométrie estimée moy du jour   (//pluiemoy),       integer     mm
** - visibilité mesurée actuelle        (//visact),         integer     km
*********
**
** L'URL est de la forme :
** http://localhost/script/?exec=meteodujour.php&key=[VAR1]&city=[VAR2]
**
** La meteo du jour est recherchee sur le site https://www.apixu.com
** L'inscription sur le site (gratuite) est necessaire pour obtenir sa cle (Key).
** La clé nous autorise 5000 demande par mois (environ 7 par heure)
** Je conseille donc une scrutation par heure
** La météo sera faite pour l'endroit ou se trouve la box Eedomus (detection
** automatique à partir de l'adresse IP Publique)
*
**
** [VAR1] : Doit contenir la cle
** [VAR2] : Peut contenir la ville (en option car la ville est en principe détectée par l'IP)
**
** XPath : doit contenir la donnée souhaitée (ex : //ville pour avoir la ville)
**
**
*********
**
** Evolution des versions :
**
** 2017-10-03 (Merguez07 & Mashuble) : V1.0 - Version initiale
** 2017-11-13 Merguez07 : V1.1 modifications suivantes
**            * rajout des mesures suivantes:     
**                  - Température mesurée ressentie (°c)
**                  - Température mesurée actuelle (°c)
**                  - Pression atm actuelle (mb)
**                  - Vitesse du vent actuelle (km/h)
**                  - Direction du vent mesurée actuelle (texte)   
**                  - Direction du vent mesurée actuelle (°)
**                  - Humidité mesurée actuelle    (%)
**                  - Pluviométrie mesurée actuelle    (mm)
**                  - Pluviométrie estimée moy du jour (mm)
**                  - Visibilité mesurée actuelle   (km)
** 2017-11-14 Merguez07 : V1.2 petite correction de dernière minute 
** 2017-11-27 Merguez07 : V1.3 modif du script pour que un seul capteur interroge le site
**                        pour tous les autres afin d'eviter la saturation des requetes
**                        avant la fin du mois (5000 requetes max par mois)
**                        le capteur qui interroge le site lancera le script ainsi :
**                        http://localhost/script/?exec=meteodujour.php&key=[VAR1]
**                        Les autres capteurs lanceront le script ainsi:
**                        http://localhost/script/?exec=meteodujour.php
**2017-12-08 Merguez07 : V1.4 Modif de l'icone pour le rendre international
**2017-12-11 Merguez07 : V1.5 correction retrait d'espace avant 2 liens HTTP
**2018-01-11 Merguez07 : V1.6 rajout de la ville en VAR2 car parfois elle est mal détectée par l'IP
**2018-01-11 Merguez07 : V1.7 correction d'un bug sur la ville
**2018-02-27 Merguez07 : V1.8 Correction bug dans le fichier json suite à modif 1.7
**2018-03-06 Merguez07 : V1.9 SUite à pb non debuggé sur fichier Json modif du script
**************************************************************************************/




// On recupere la cle
    $key = getArg('key', false, NULL);
    $ville=getArg('city', false, NULL);
    $periph_id=getArg('eedomus_controller_module_id');


// On recupere le path
    $url =  "http://localhost/api/get?action=periph.caract&show_config=1&periph_id=$periph_id";
    $arrValue = sdk_json_decode(utf8_encode(httpQuery($url,'GET')));
    $path=utf8_decode($arrValue["body"]["XPATH"]);
       
// On recupere la meteo
    if ($path=="//condition") {

        // Recherche de l'adresse IP publique
        $url="http://ip-api.com/json";
        $jsonResponse = httpQuery($url);
        $content = sdk_json_decode($jsonResponse,true);
        $monippublique=$content[query];

        //la localisation se fera par VAR2 sinon par IP
        $localisation = $monippublique;
        if ($ville!=" ") {
            $localisation = $ville;
        }
       
        // on interroge le site APIXU.com
        $url_meteo = "http://api.apixu.com/v1/forecast.json?key=" . $key . "&q=" . $localisation. "%20&days=1";
        $jsonResponse = httpQuery($url_meteo);
        $content = sdk_json_decode($jsonResponse,true);

        // conversion vent mph-->km/h
        $vent=$content[forecast][forecastday][0][day][maxwind_kph];////indice 1.1

        // calcul des indices Beaufort
        if ($vent<1) $beaufort=0;
        if ($vent>=1 and $vent<6)
            $beaufort=1;
        if ($vent>=6 and $vent<12)
            $beaufort=2;
        if ($vent>=12 and $vent<20)
            $beaufort=3;
        if ($vent>=20 and $vent<29)
            $beaufort=4;
        if ($vent>=29 and $vent<39)
            $beaufort=5;
        if ($vent>=39 and $vent<50)
            $beaufort=6;
        if ($vent>=50 and $vent<62)
            $beaufort=7;
        if ($vent>=62 and $vent<75)
            $beaufort=8;
        if ($vent>=75 and $vent<89)
            $beaufort=9;
        if ($vent>=89 and $vent<103)
            $beaufort=10;
        if ($vent>=103 and $vent<118)
            $beaufort=11;
        if ($vent>=118)
            $beaufort=12;

        // sauvegarde des données pour ne pas réinterroger le site pour chaque capteur
        saveVariable('BEAUFORT',$beaufort);
        saveVariable('VILLE',$content[location][name]);
        saveVariable('DATEUPDATE',$content[current][last_updated]);
        saveVariable('TRESS',$content[current][feelslike_c]);
        saveVariable('TACT',$content[current][temp_c]);
        saveVariable('TMIN',$content[forecast][forecastday][0][day][mintemp_c]);
        saveVariable('TMAX',$content[forecast][forecastday][0][day][maxtemp_c]);
        saveVariable('TMOY',$content[forecast][forecastday][0][day][avgtemp_c]);
        saveVariable('CONDITION',$content[forecast][forecastday][0][day][condition][text]);
        saveVariable('PRESSACT',$content[current][pressure_mb]);
        saveVariable('VENTACT',$content[current][wind_kph]);
        saveVariable('VENTMAX',$vent);
        saveVariable('DIRVENT',$content[current][wind_dir]);
        saveVariable('DIRVENTDEG',$content[current][wind_degree]);
        saveVariable('HYGACT',$content[current][humidity]);
        saveVariable('HYGMOY',$content[forecast][forecastday][0][day][avghumidity]);
        saveVariable('PLUIEACT',$content[current][precip_mm]);
        saveVariable('PLUIEMOY',$content[forecast][forecastday][0][day][totalprecip_mm]);
        saveVariable('VISACT',$content[current][vis_km]);
        saveVariable('VISMOY',$content[forecast][forecastday][0][day][avgvis_km]);
 
    }

    // Generation du XML
    sdk_header('text/xml');
    $xml = '<?xml version="1.0" encoding="UTF-8"?>';
    $xml .= '<meteodujour>';
    $xml .= '<status>ok</status>';
    $xml .= '<ville>' . loadVariable('VILLE') . '</ville>';
    $xml .= '<dateupdate>' . loadVariable('DATEUPDATE') . '</dateupdate>';//date de dernière mise à jour des valeurs
    $xml .= '<tress>' . loadVariable('TRESS')  . '</tress>'; // indice 1.1 température ressentie
    $xml .= '<tact>' . loadVariable('TACT') . '</tact>';//indice 1.1 température actuelle
    $xml .= '<tmin>' . loadVariable('TMIN') . '</tmin>';// température min prévue
    $xml .= '<tmax>' . loadVariable('TMAX') . '</tmax>';//température max prévue
    $xml .= '<tmoy>' . loadVariable('TMOY') . '</tmoy>';//température moyenne prévue
    $xml .= '<condition>' . loadVariable('CONDITION') . '</condition>';
    $xml .= '<pressact>' . loadVariable('PRESSACT') . '</pressact>';//indice 1.1 pression actuelle
    $xml .= '<ventact>' . loadVariable('VENTACT') . '</ventact>';//indice 1.1 vent actuel
    $xml .= '<ventmax>' . loadVariable('VENTMAX') . '</ventmax>';// vent max prévu dans la journée
    $xml .= '<beaufort>' . loadVariable('BEAUFORT') . '</beaufort>';// beaufort max prévu dans la journée
    $xml .= '<dirvent>' . loadVariable('DIRVENT') .'</dirvent>'; //indice 1.1
    $xml .= '<dirventdeg>' . loadVariable('DIRVENTDEG') .'</dirventdeg>';//indice 1.1
    $xml .= '<hygact>' . loadVariable('HYGACT')  . '</hygact>'; // indice 1.1 humidité actuelle
    $xml .= '<hygmoy>' . loadVariable('HYGMOY') . '</hygmoy>';// hygrométrie moyenne prévue
    $xml .= '<pluieact>' . loadVariable('PLUIEACT')  . '</pluieact>'; // indice 1.1 quantité de pluie actuelle
    $xml .= '<pluiemoy>' . loadVariable('PLUIEMOY')  . '</pluiemoy>'; // indice 1.1 quantité de pluie prévue
    $xml .= '<visact>' . loadVariable('VISACT')  . '</visact>'; // indice 1.1 visibilité actuelle
    $xml .= '<vismoy>' . loadVariable('VISMOY') . '</vismoy>';// vibilité moyenne prévue
    $xml .= '</meteodujour>';

echo $xml;

?>
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: loadVariable - saveVariable

Messagepar influman » 18 Mars 2018 16:58

Euh la ca depend quand meme de la bonne execution de tes SaveVariables...
Il faudrait deja etre sûr que ta condition est verifiee pour que cette partie soit executee...
T’as qu’a rajouter un etat libre « debug » de type texte que tu mets a jour par des setvalue dans ton code pour debugger
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: loadVariable - saveVariable

Messagepar merguez07 » 18 Mars 2018 18:13

bon je crois avoir découvert mon bug. j'avais mis
$url = "http://localhost/api/get?action=periph.caract&show_config=1&periph_id=$periph_id";
au lieu de
$url = "http://localhost/api/get?action=periph.caract&show_config=1&periph_id=".$periph_id;

je laisse en test pour voir si c'est résolu
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: loadVariable - saveVariable

Messagepar merguez07 » 18 Mars 2018 20:47

bon je confirme LoadVariable - SaveVariable fonctionnent bien.
Je suis juste un gros blaire. :oops:
Grace à l'astuce de debuggage d'influman j'ai pu trouver mes erreurs (et oui il n'y en avait pas qu'une :lol: )
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


Retour vers Scripts & Périphériques du store

Qui est en ligne ?

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

cron