gorn Posté(e) le 9 août 2017 Signaler Posté(e) le 9 août 2017 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.
pepite Posté(e) le 10 août 2017 Signaler Posté(e) le 10 août 2017 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 ??
PdB Posté(e) le 10 août 2017 Signaler Posté(e) le 10 août 2017 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...
gorn Posté(e) le 10 août 2017 Auteur Signaler Posté(e) le 10 août 2017 (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é le 10 août 2017 par gorn
gorn Posté(e) le 10 août 2017 Auteur Signaler Posté(e) le 10 août 2017 Je viens aussi de tester avec la variable "position", même combat, bug ligne 15
pepite Posté(e) le 11 août 2017 Signaler Posté(e) le 11 août 2017 Commente ta ligne de debug pour voir si tu as une autre erreur ?
gorn Posté(e) le 12 août 2017 Auteur Signaler Posté(e) le 12 août 2017 (modifié) 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é le 12 août 2017 par gorn 1
pepite Posté(e) le 12 août 2017 Signaler Posté(e) le 12 août 2017 Bien joue@gornEnvoyé de mon Nexus 5X en utilisant Tapatalk
gorn Posté(e) le 12 août 2017 Auteur Signaler Posté(e) le 12 août 2017 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 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.
Messages recommandés