Aller au contenu

Messages recommandés

Posté(e)
il y a 8 minutes, Steven a dit :

C'est vieux cela :-)

 

 

Zibase_Script.vfib

Merci Steven, Oui c'est vieux lol mais je crois que c'est le script pour créer les variables ça (c'est ok cette partie) moi c'est le LUA pour faire un VD le dernier lien ou alors j'ai pas compris le tuto ptre

Posté(e)

Dis moi simplement ce que tu souhaites faire car ce tuto date du moyen age et je m'en souviens même plus.

 

Si tu veux juste créer un VD qui affiche le contenu d'une variable, tu fais ainsi :

 

  1. Créer un VD
  2. Ajouter un label au VD "Label1"
  3. Ajouter dans le main loop le code suivant

local val = fibaro:getGlobalValue("OSXXXXXX_V2")

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val)

 

J'ai pas testé mais cela devrait fonctionner.

Posté(e)

Whaou super ça fonctionne il me reste plus qu'a diviser par 10 et rajouter " °c "

 

Merci tu es au top 

Posté(e)

Ah, oui, en effet, il y a ce petit détail propre à la Zibase :-)

 

J'ai encore ma Zibase qui fonctionne donc si tu as besoin d'autre chose, hésite pas.

 

local val = (tonumber(fibaro:getGlobalValue("OSXXXXXX_V2")) / 10) .. " °C"

 

Posté(e)

Mon sauveur, tout fonctionne en 5 min lol ! 

 

Aurais tu par hasard des sondes Oregon je pense que le fonctionnement est pareil, surtout pour l'anémomètre WGR800 il y a sans doute un calcule étrange a faire 

 

mais encore une fois merci

Posté(e)

J'ai eu des Oregon et oui le fonctionnement est exactement le même.

 

Pour le WGR800, je l'ai jamais essayé mais je pense qu'il retourne la force (V1) et la direction (V2) donc avec un peu de chance, il n'y a rien à faire comme calcul, à moins que la direction soit en dégré et la force en miles/secondes .. lol, cela reste encore possible.

 

Posté(e)

C'est ça : Received radio ID (433Mhz Oregon Noise=2305 Level=1.6/5 WGR800 Avg.Wind=4.6m/s Dir.=135° Batt=Ok) Vent (OS445197056)

Posté(e)

Allez, pour la direction tu peux utiliser cette méthode si tu en as besoin, elle va te retourner les cardinalités en lieu et place des degrés 

 


function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end

print( getDirection(102) )

 

  • Upvote 1
Posté(e) (modifié)

Whaou que dire heuuu MERCI :)

 

J'en suis là : 

 

local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C"
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val)

 

local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C"
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", val1)


local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %"
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label3.value", val2)


local val3 = (tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600) .. " km/h"
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", val3)


function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end

print( getDirection(102) )

Modifié par Guru
  • Upvote 1
Posté(e) (modifié)

On peut mettre sur une même ligne température ET humidité ?

 

j'ai essayer les formules cote a cote lol ça a pas marché :P 

 

Modifié par Guru
Posté(e)

Pour concaténer (mettre ensemble 2 chaînes de caractères) il faut utiliser .. (deux point).

 

Exemple :

local val1 = "23°C"
local val2 = "47%"
local texte = "Température : " .. val1 .. " / Humidité : " .. val2

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", texte) 

 

  • Upvote 1
Posté(e)

Pour la direction du vent, si je suis la logique de ton code, tu devrais avoir cela : 

 

function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label5.value", getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2"))))

 

Posté(e) (modifié)

J'apprend énormément tu vends du rêve :)

 

Le résultat : 

 

 

Le code : 

local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C"
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val)

local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C "
local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %"
local texte = "Température : " .. val1 .. " Humidité : " .. val2
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", texte) 

local val3 = (tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600) .. " km/h"
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", val3)


function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label5.value", getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2"))))

 

VD.jpeg

Modifié par Guru
Screen
Posté(e)

C'est beau ça .. bien joué. :60:

 

Il y a juste les arrondis qui dérange. Tu pourrais donc coller au début de ton code ceci :

-- arrondi le num avec n décimal --
function round(num, n)
  local mult = 10^(n or 0)
  return math.floor(num * mult + 0.5) / mult
end

puis remplacer :

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", val3)

par

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", round(val3, 2))

 

  • Upvote 1
Posté(e)

Marchera pas car val3 contient déjà "km/h", faut le faire avant.

Envoyé de mon SM-G935F en utilisant Tapatalk

Posté(e)

local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h"

Envoyé de mon SM-G935F en utilisant Tapatalk

Posté(e) (modifié)

Tu es simplement magique ! J'ai pas le temps de penser à faire propre que tu es déjà pro actif sur le sujet mdr ...

 

function round(num, n)
  local mult = 10^(n or 0)
  return math.floor(num * mult + 0.5) / mult
end

function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end

local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C"
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val)

local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C "
local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %"
local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h"
local val4 = getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2"))
  
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", val1 .. val2 .. val3 .. val4) 

J'ai voulu concaténer toutes les données extérieur mais raté 

 


[ERROR] 18:54:07: line 33: ')' expected (to close '(' at line 31) near 'fibaro'

 

 

 

Trouvé il manqué une ) a val4 :):):) je progresse 

Modifié par Guru
Posté(e)
-- arrondi le num avec n décimal --
function round(num, n)
  local mult = 10^(n or 0)
  return math.floor(num * mult + 0.5) / mult
end

function getDirection(degre) 
  local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5}
  local dif = 0
  local min = 1000
  local res = ""
  for k,v in pairs(directions) do
    dif = math.abs(degre - v)
    if (dif <= min) then 
      res = k
      min = dif
    end
  end
  return res
end

local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C"
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val)

local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C "
local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " % "
local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h "
local val4 = getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2")))
local texte = " Température " .. val1 .. " Humidité " .. val2 .. " Vent " .. val3 .. "direction  " .. val4
  
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", texte)
  
  

Je suis pas encore tout a fait content du résultat graphique je vais chercher la disposition (Mettre à la ligne ou revenir à plusieurs label) mais en tout cas ça fonctionne super bien 

VD.jpeg

Posté(e)
Le 03/03/2017 à 10:44, Steven a dit :

C'est vieux cela :-)

 

 

Zibase_Script.vfib

 

La Maj bloque au bout d'un moment et j'ai erreur 1 pareil chez vous ? 

 

j'ai supprimé le module et recrée on verra...

 

Pour les fakes VD des news pour créer ces modules ? 

Posté(e)

L'erreur 1 me rappel quelque chose, mais c'est tellement vieux que je sais plus ce que c'est. Si jamais, envoi moi ton VD et je le ferais tourner chez moi pour essayer de provoquer l'erreur.

 

Pour les fakes VD, je crois qu'il faut vraiment un module z-wave pour l'utiliser comme référence.

  • Upvote 1
Posté(e)

j'ai utilisé le tien, que tu as mis sur ce poste, pour l'instant il fonctionne encore.

 

Ba j'achète un module fibaro si il faut ( il n'est pas condamné ? )

Posté(e)

Je te propose et conseil de modifier les toutes dernières lignes du VD ainsi : 

 

pcall(function() 
	Zibase.putSensorsInMemory()
	local time = os.date("le %d.%m.%Y à  %H:%M:%S")
	if (Zibase.errors > 0) then time = "Erreur : " .. Zibase.errors end
	fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value",time)
end)
fibaro:sleep(maj*1000)

Le fait d'entourer le code par "pcall" évite le module de planter. Si une erreur survient, il sera relancé les prochaines 30 secondes.

 

 

Pour le fake device, le seul module z-wave qui vaut vraiment la peine serait l'oeil de sauron (FGMS)

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