Aller au contenu

Support LUA


gorn

Messages recommandés

Bonsoir, j'aurais besoin d'un oeil extérieur pour un code en LUA. Aussi je me suis dis que l'on pourrait peut-être centraliser ici les demandes diverses et variées sur de l'aide en codage...?

 

Bon, pour ma part j'ai ce code :

local selfId = fibaro:getSelfId();
local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort")
YAM = Net.FHttp(ip_module, port);

-- Récupération valeur slider
position = tonumber(fibaro:getValue(selfId, "ui.Slider1.value"));
-- Formatage valeur
function map_range( a1, a2, b1, b2, s )
return b1 + (s-a1)*(b2-b1)/(a2-a1)
end
local V_Slider = map_range(0, 100, -40, 20, _sliderValue_ );
SVol = tonumber(math.ceil(V_Slider/10)
-- Envoi commande  
payload = '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Lvl><Val>' .. SVol .. '</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume></Main_Zone></YAMAHA_AV>'
-- Récupération valeur pour Label
fibaro:call(selfId, 'setProperty', 'ui.Label1.value', SVol.."dB");
-- Lignes de déboguage
fibaro:debug('---------------------')
fibaro:debug('Position Slider :')
fibaro:debug(position)
fibaro:debug('Convert range :')
fibaro:debug(V_Slider)
fibaro:debug('Formatage :')
fibaro:debug(SVol)
fibaro:debug('---------------------')
-- Retour yamh
response ,status, errorCode = YAM:POST('/YamahaRemoteControl/ctrl', payload) 
fibaro:sleep(100)
if errorCode == 0
   then
     fibaro:log('status'..status)
   else
     fibaro:log("error")
end

J'ai une erreur -> line getSelfId();...]:19

J'ai les yeux qui commencent a fourcher et je ne trouve plus d'où ça vient.

 

rBPqMsR.png

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Dans ta ligne:

local V_Slider = map_range(0, 100, -40, 20, _sliderValue_ );

_sliderValue_ est une variable non déclarée antérieurement d'ou le bug à mon avis car elle doit avoir la valeur nil. 

N'est-ce pas plutôt ta variable "position" qu'il faut mettre à la place?

Courage...

Lien vers le commentaire
Partager sur d’autres sites

Bon, en fait,  c'est pas ma ligne 19 (mais la 15 - j'ai viré des commentaires).

C'est cette ligne :

fibaro:debug('---------------------')

 

J'ai remplacé le _sliderValue_ par "ui.Slider.value" et j'ai toujours un bug sur la première ligne de debug o_O

position = tonumber(fibaro:getValue(selfId, "ui.Slider1.value"));
-- Formatage valeur
function map_range( a1, a2, b1, b2, s )
return b1 + (s-a1)*(b2-b1)/(a2-a1)
end
local V_Slider = map_range(0, 100, -40, 20, "ui.Slider1.value" );

 

Edit : ça ira peut-être mieux si j'explique ce que je veux faire...

Je voudrais que mon slider 0-100 me sorte un -40+20. Idéalement il faudrait que ça monte de 0.5 en 0.5 mais je n'en suis pas là encore.

Modifié par gorn
Lien vers le commentaire
Partager sur d’autres sites

Bon, je suis repartit de 0 sur ce Slider, parce que copier/coller des bouts de codes récupérés a droite a gauche ne me faisait pas comprendre le fonctionnement de tout.

Du coup ça fonctionne et c'est beaucoup plus propre (et compréhensible pour moi^^):

local SelfId = fibaro:getSelfId()
local Slider = fibaro:get(SelfId,"ui.Slider1.value")
local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress");
local port = fibaro:get(fibaro:getSelfId(), "TCPPort");
YAM = Net.FHttp(ip_module, port);

function map_range( Slider_min, Slider_max, Scale_min, Scale_max, Val_slider )
	return Scale_min + (Val_slider-Slider_min)*(Scale_max-Scale_min)/(Slider_max-Slider_min)
end

local V_Slider = map_range(0, 100, -400, 200, Slider)
local Vol_dmd = math.floor(V_Slider/10)
local VolYam = math.floor(V_Slider /10)*10
fibaro:debug('Volume demandé :'..Vol_dmd..'dB')

payload = '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Lvl><Val>'..VolYam..'</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume></Main_Zone></YAMAHA_AV>'
response ,status, errorCode = YAM:POST('/YamahaRemoteControl/ctrl', payload) 
fibaro:sleep(100)

if errorCode == 0
   then
     fibaro:log('status'..status);
     fibaro:debug('status'..status);
   else
     fibaro:log("error");
     fibaro:debug('error');
end

Maintenant je cherche à faire du step de 0.5 au lieu du 1. Je l'ai écris en pseudo code maintenant reste à l'intégrer dans mon code ^^

Merci a ceux qui se sont penchés sur mon soucis :)

Modifié par gorn
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Merci @pepite!

Je vois que je peux améliorer le truc. Je me colle un fibaro:getSelfId dans une variable et je ne l'utilise pas :D

Du coup, je vois aussi que je peux le faire dans la main loop et ne plus avoir a rentrer le numéro du VD pour le démarrer. Il n'y aura plus que l@IP et le port.

C'est pour, je me doute pas que tu le savais déjà, pour une nouvelle mouture de mon VD yamaha.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...