Welcome to Domotique-fibaro

 

Inscrivez-vous maintenant pour accéder à toutes nos fonctionnalités. Une fois inscrit et connecté, vous serez en mesure de contribuer à ce site en soumettant votre propre contenu ou en répondant au contenu existant. Vous serez en mesure de personnaliser votre profil, de recevoir des points de réputation comme une récompense pour la soumission de contenu, tout en communiquant avec d'autres membres via votre boîte de réception privée, et bien plus encore! Ce message sera supprimé une fois que vous vous êtes connecté.

 

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

gorn

Support LUA

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

0

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 ??

0

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...

0

Partager ce message


Lien à poster
Partager sur d’autres sites

bien vu @PdB ;-)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié)

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
0

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

0

Partager ce message


Lien à poster
Partager sur d’autres sites

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

0

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
1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bien joue@gorn

Envoyé de mon Nexus 5X en utilisant Tapatalk

0

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.

0

Partager ce message


Lien à poster
Partager sur d’autres sites