Guru Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 Qui aurait le script LUA ou tuto pour faire l'équivalent du VD proposé dans ce tuto ? http://www.domotique-info.fr/2014/02/utiliser-zibase-passerelle-enocean-pour-le-home-center-2/# le lien de téléchargement ne fonctionne plus
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 C'est vieux cela :-) Zibase_Script.vfib 1
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 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
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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 : Créer un VD Ajouter un label au VD "Label1" 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.
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 Whaou super ça fonctionne il me reste plus qu'a diviser par 10 et rajouter " °c " Merci tu es au top
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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"
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 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
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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.
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 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)
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 4.6 m/s = 4.6 * 1000 / 3600 = 16.56 Km/h Pour la direction c'est moins drôle 135° = SE:
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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) ) 1
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 (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é le 3 mars 2017 par Guru 1
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 (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é Modifié le 3 mars 2017 par Guru
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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) 1
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 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"))))
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 (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")))) Modifié le 3 mars 2017 par Guru Screen
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 C'est beau ça .. bien joué. 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)) 1
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 Marchera pas car val3 contient déjà "km/h", faut le faire avant. Envoyé de mon SM-G935F en utilisant Tapatalk
Steven Posté(e) le 3 mars 2017 Signaler Posté(e) le 3 mars 2017 local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h"Envoyé de mon SM-G935F en utilisant Tapatalk
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 (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é le 3 mars 2017 par Guru
Guru Posté(e) le 3 mars 2017 Auteur Signaler Posté(e) le 3 mars 2017 -- 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
Guru Posté(e) le 9 mars 2017 Auteur Signaler Posté(e) le 9 mars 2017 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 ?
Steven Posté(e) le 9 mars 2017 Signaler Posté(e) le 9 mars 2017 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. 1
Guru Posté(e) le 10 mars 2017 Auteur Signaler Posté(e) le 10 mars 2017 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é ? )
Steven Posté(e) le 10 mars 2017 Signaler Posté(e) le 10 mars 2017 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) 1
Messages recommandés