Aller au contenu
gorn

Support LUA

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Bonne idée pour le sujet, pour aller plus loin ce serait bien qu'il soit épinglé par les admins/modérateurs ;-)

 

Quelle est ta ligne 19 ??

Partager ce message


Lien à poster
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...

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens aussi de tester avec la variable "position", même combat, bug ligne 15

Partager ce message


Lien à poster
Partager sur d’autres sites

Commente ta ligne de debug pour voir si tu as une autre erreur ?

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bien joue@gorn

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×