[Résolu] Stockage de variable globale


#1

Bonjour à tous,

Je cherche à stocker une valeur dans une variable globale.
Le but est de sauvegarder l’état d’une ampoule pilotée par un module milight afin de changer sa couleur progressivement toutes les heures. Vue qu’il n’est pas possible de lire la valeur du bridge, il faut que je stocke sa valeur dans une globale quelconque (enfin, c’est ce qui me parait le plus simple).

Pour cela, j’ai :

  • un “réveils” sous forme de tache cron
  • un script
  • un scénario qui appel mon réveil et mon script.

Le script :

const bridge = gladys.modules[‘milight’].getBridge(‘99’);
var zone = 2;

// Couleur aléatoire
var rouge = Math.random()*255;
var vert = Math.random()*255;
var bleu = Math.random()*255;

bridge.rgb(zone, rouge, vert, bleu);
bridge.on(zone);

Forcément avec ce code, la portée des variables rouge, vert et bleu n’est que locale. Comment stocker les valeurs dans une globale pour pouvoir les retrouver lorsque je vais appeler une deuxième fois ce script ?

Merci pour votre aide.


#2

Je vais peut être dire des bêtises mais en créant un “device” supplémentaire dans ton device et en lui poussant cette valeur ?
Après du coup, tu pourras appeler cette valeur pour l’ID de ton device ?

Je balance juste ça au hasard hein :stuck_out_tongue:


#3

Salut @AlexDesign

Créer des params ! Tu stock tes valeurs dans les params et tu pourra les consulter autant de fois que bon te semble !


#4

Du coup, ils apparaissent dans la liste des paramètres ?


#5

Oui c’est l’inconvénient… Et en plus ils sont modifiable… Donc à faire attention quand même !


#6

Et du coup mon idée de créer un device pour stocker le paramètre ?


#7

Bah elle est pas mauvaise mais les device c’est pas fait pour ça ^^
Et puis dans la prochaine version les params vont un peu évoluer, ce qui résoudra ce problème :wink:


#8

C’est pas non plus aberrant dans son cas puisqu’il veut stocker une couleur, donc une valeur de son ampoule. (enfin je crois avoir compris ça, j’ai pas de milight pour savoir ce qui est faisable ou pas)

Faut que tu arrêtes avec le teasing nom de diou ! :wink:


#9

Cool pour les params !
Voila le code. Il y a certainement matière à optimiser, mais ça marche du tonnerre !

const bridge = gladys.modules[‘milight’].getBridge(‘99’);
var zone = 4;
var timer = 0.25; // pause en sec entre 2 valeurs lors du changement de couleur

// Allumage des ampoules (si elles sont etteintes)
gladys.param.getValue(“AcquariumEtat”) .then(function(Etat){
if( Etat != “on”) {
console.log(“allume acquarium”);
bridge.rgb(zone, 1, 1, 1);
bridge.on(zone);
}
});

// Création d’une couleur aléatoire
var rouge = Math.round(Math.random()*255);
var vert = Math.round(Math.random()*255);
var bleu = Math.round(Math.random()*255);
console.log( “Nouvelle couleur = " + rouge +”,"+ vert +"," + bleu);

// Récupération de l’ancienne couleur
gladys.param.getValue(“AcquariumCouleur”) .then(function(OldCouleur){
var OldRouge = OldCouleur[0];
var OldVert = OldCouleur[1];
var OldBleu = OldCouleur[2];

// Allumage progressif
if( OldRouge < rouge ) {
    for( var i=OldRouge; i < rouge; i++){ bridge.rgb(zone, i, OldVert, OldBleu); sleep(timer);}
} else {
    for( var i=OldRouge; i > rouge; i--){ bridge.rgb(zone, i, OldVert, OldBleu); sleep(timer);}
}
if( OldVert < vert ) {
    for( var i=OldVert; i < vert; i++){ bridge.rgb(zone, rouge, i, OldBleu); sleep(timer);}
} else {
    for( var i=OldVert; i > vert; i--){ bridge.rgb(zone, rouge, i, OldBleu); sleep(timer);}
}
if( OldBleu < bleu ) {
    for( var i=OldBleu; i < bleu; i++){ bridge.rgb(zone, rouge, vert, i); sleep(timer);}
} else {
    for( var i=OldBleu; i > bleu; i--){ bridge.rgb(zone, rouge, vert, i); sleep(timer);}
}

});

// Sauvegarde de la couleur
gladys.param.setValue({ name: “AcquariumCouleur”, value: [rouge, vert, bleu] });
gladys.param.setValue({ name: “AcquariumEtat”, value: “on” });

function sleep(seconds){
for (var i=0; i <= seconds*1000; i++){}
}

Heu… comment ça ? l’utilisation des setValue et getValue resteront la même ?

EDIT : J’ai corrigé un bug dans le code, il est maintenant testé et approuvé.