Aller au contenu

Température Min / Max


Berale64

Messages recommandés

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
Lien vers le commentaire
Partager sur d’autres sites

@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 !!!!

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...