Aller au contenu

Messages recommandés

Posté(e)

Bon, ça casse pas une patte à  un canard, mais pour apprendre LUA mieux vaut commencer simple.

 

L'objet de cette petite chose est d'avoir un visu des températures min/max. Quand vous achetez un thermomètre à  deux balles il a des options de mini/maxi, mais pas chez Fibaro.

 

Il y a donc une scène qui tourne en continue et retient les min et max. L'affichage ce fait dans un device virtuel.

Le bouton reset tue la scène et la redémarre.

 

Il vous faudra changer les "id" de vos thermomètres et du virtual device.

Rien ne vous empêche de rajouter les thermomètres de la chambre du petit dernier, du cellier de vos bonnes bouteilles (moi, c'est Saint Emilion - Merci :P ).

Au printemps je mettrais la piscine.

--[[
%% autostart
%% properties

%% globals
--]]

local temp;
local TempExtMin = 100;
local TempExtMax = -100;
local TempSalonMin = 100;
local TempSalonMax = -100;
local temin = "";
local temax = "";
local tsmin = "";
local tsmax = "";

local id = {};

id.tempext = 35;
id.tempint = 42;
id.display = 74;

while true do
  
  -- Température extérieur
  
  temp = fibaro:getValue(id.tempext,"value");
  if (tonumber(temp) < TempExtMin)
    then
     TempExtMin = tonumber(temp);
     temin = string.format("%2.1f",TempExtMin);
    end
  if (tonumber(temp) > TempExtMax)
    then
     TempExtMax = tonumber(temp);
     temax = string.format("%2.1f",TempExtMax);
    end
   fibaro:call(id.display, "setProperty", "ui.Label1.value", temin.." / "..temax.." °C"); 
  fibaro:call(id.display, "setProperty", "ui.Label7.value", temp.." °C");
  
  -- temérature intérieur
  
  temp = fibaro:getValue(id.tempint,"value");
  if (tonumber(temp) < TempSalonMin)
    then
     TempSalonMin = tonumber(temp);
     tsmin = string.format("%2.1f",TempSalonMin);
    end
  if (tonumber(temp) > TempSalonMax)
    then 
     TempSalonMax = tonumber(temp);
     tsmax = string.format("%2.1f",TempSalonMax);
    end
  fibaro:call(id.display, "setProperty", "ui.Label11.value", tsmin.." / "..tsmax.." °C");
  fibaro:call(id.display, "setProperty", "ui.Label13.value", temp.."°C"); 
  
fibaro:sleep(3*60*1000);
  end

post-1115-0-69895900-1422005669_thumb.jpg

 

Temp_minmax.vfib

 

PS: Cet outil est vraiment très pratique sur smartphone.

  • Upvote 6
Posté(e)

Super, je vais aussi essayer.

Question : pourquoi définis-tu 2 variables min / 2 variables max par thermomètre (au lieu de 1 min et 1 max) ?

Posté(e)

@Berale24,

Dans la VD de c-lol (http://www.domotique-fibaro.fr/index.php/topic/3173-vd-check-connexion-internet/)

il y a ceci, qui pourrait t'affranchir de hardcoder l'id de ta VD.

local deviceId = fibaro:getSelfId();

Je ne sais pas où tu l'a mis, mais ce serait peut-être une possibilité d'amélioration ?

 

Autres idées en vrac :

  • mettre un bouton reset par thermomètre dans la VD
  • afficher la date du dernier reset du thermomètre

Merci en tout cas !!!!

Posté(e)

Excellent la signature Jojo. :-)

La fonction getValue te renvoie un string (j'en vois qui rigolent) mais il faut une valeur numérique pour faire une comparaison plus grand ou plus petit.

De même pour afficher il faut un variable alphanumérique (ça rigole moins là).

On peut jouer avec les fonction "to string" et "tonumber" mais j'ai choisi deux variables.

Note aussi la fonction string.format qui permet de n'afficher qu'une décimale. J'ai toujours trouvé ridicule ces valeurs au centième de dégrée alors que la précision de ces trucs est de +/- 0.5 dégrée.

Getselfid te renvoie l'id du device actuel. Ici j'ai besoin de l'id d'un autre device.

La date, bonne idée.

J'avais pensé au reset individualisés mais il faut alors passer par des variables globales et j'avais la flemme.

Posté(e)

Berale24,

Merci beaucoup de m'avoir donné l'occasion de me mettre au LUA.

Je propose ici une V1 de ce que tu as fait :

  • tout le code est dans la VD (plus de scène)
  • les données sont dans une variable globale
  • on peut reseter chaque thermomètre indépendemment, avec date du dernier reset

Donc, pour faire marcher le basard :

  1. créer une variable globale par thermomètre
  2. ligne 18 : spécifier le n° de l'icône à  afficher

 

Sorry, mais le code n'est pas générique : je n'y connais rien en LUA, je n'ai fait que honteusement recopier ce que Berale24 (el c-lol) ont fait.

Si un vrai pro pouvait me dire comment reformater les dates (en 01/12/2015 22:59), ce serait super, car je trouve ce format par défaut nul 

Posté(e)

@jojo,

 

Pour reformater les dates (en 01/12/2015 22:59) tu peux essayer ceci

os.date("%x %H:%M")

;)

  • Upvote 1
Posté(e)

Question pour les pros.

 

J'avais d'abord, par erreur, mis le code de reset dans la boucle principale du VD et donc mon device passait son temps à  faire des reset. :huh:

Je l'ai déplacé dans le bouton, mais celui ci devient automatiquement "principal" et donc fait aussi des reset.

Impossible de décocher la petite case sauf en créant un bouton bidon qui devient principal et ne fait rien.

 

Une idée ???

Merci.

Posté(e)

pour moi,le bouton principal ne s'active pas automatiquement, sauf si tu cliques sur le bouton par défaut de ta VD. Dans ma VD, un des deux boutons reset est le main, mais pas de reset en continu

Posté(e)

Merci Krikroff, j'ai utilisé ceci "%d/%m/%m %H:%M" (pour avoir 24/01/14 10:22), car avec "%x %H:%M" j'avais 01/24/14 10:22.

 

Voici donc la dernière version de la VD de Berale24 :

Posté(e)

Merci Krikroff, j'ai utilisé ceci "%d/%m/%y %H:%M" (pour avoir 24/01/14 10:22), car avec "%x %H:%M" j'avais 01/24/14 10:22.

 

Voici donc la dernière version de la VD de Berale24 :

Posté(e)

 Je viens de l'installer et comme turlututu74, ça tourne nickel.

Ca casse peut-être pas quatre pattes à  un canard mais bien deux.

Merci Berale24!!! :74:

Posté(e)

Je viens de découvrir quelque chose de super :

Il est possible d'afficher un label sur le premier écran  :D (malheureusement on ne sait pas en afficher plusieurs)

Pour cela, il suffit de cocher le label que vous voulez afficher comme "main"

 

Du coup, j'ai fait un module par sonde de température, qui m'affiche en continu le min/max

Posté(e)

Je voulais masquer la scene de l'interface, j'ai donc mis sur "no" le show the scene in the interface, mais la petite est tjs là, une idée ?

Posté(e)

Sakkhho,

Je n'ai jamais réussi àmasquer la scène de l'interface.

Mais j'ai fais la même chose sans scènes :

Posté(e)

Je ne suis pas trop pour masquer les choses. Après on les oublie, on ne sais plus qu'elles existent, on en fait de nouvelles ou aussi on cherche la raison de nos problèmes.

Je préfère créer des pièces fictives dans lesquelles je mets ce genre de scène.

  • Upvote 1
×
×
  • Créer...