Krikroff Posté(e) le 21 février 2014 Signaler Posté(e) le 21 février 2014 Et c'est moi le couche tard ! Mdr... Beau travail Benjy :-)
cedriclocqueneux Posté(e) le 21 février 2014 Signaler Posté(e) le 21 février 2014 elseif (src_value == 04) then input = "CEDRIC - STOP TO PLAY !"; LOL ! Je teste ce soir chez moi.
BenjyNet Posté(e) le 21 février 2014 Auteur Signaler Posté(e) le 21 février 2014 Allez je suis bon prince, avant de partir en vacance je vous file la version 1.0.3 en PJ Attention ce n'est pas un VD. Mettez les scripts LUA sur les bons boutons. Si ça marche chez vous, j'updaterai le 1er post et je passerai à la v1.1.0 pour développer de nouvelles fonctionnalités. Je rappelle le change log : -- Update refresh data : set to 2 min -- Improved sending commands and receiving status -- Improved questions results -- Added source -- All scripts are updated Onkyo_TX-NR626_v1.0.3_scripts_lua_only.zip
Domodial Posté(e) le 21 février 2014 Signaler Posté(e) le 21 février 2014 Merci bc Ben ! super boulot !
BenjyNet Posté(e) le 21 février 2014 Auteur Signaler Posté(e) le 21 février 2014 Bon vous n'êtes pas perspicace, je viens de trouver un bug ! Celui qui trouve il a toute mon estime
Domodial Posté(e) le 21 février 2014 Signaler Posté(e) le 21 février 2014 j'install ce soir la nouvelle version
cedriclocqueneux Posté(e) le 21 février 2014 Signaler Posté(e) le 21 février 2014 Installé, l'état est correctement remonté une fois, j'avais bien le status de l'ampli à On et le son correctement remonté, puis d'un seul coup c'est retombé à Off alors que l'ampli est toujours allumé et sur BD :/ Quand je debug, j'ai: [DEBUG] 23:53:28: Start process #8, please wait...[DEBUG] 23:53:28: Request POWER status, #0 please wait...[DEBUG] 23:53:28: POWER status command successufully transmited.[DEBUG] 23:53:28: Result's lenght : 27 string[DEBUG] 23:53:28: Result fail, retry process, #0 please wait...[DEBUG] 23:53:28: Result's lenght : 48 string[DEBUG] 23:53:28: Result fail, retry process, #1 please wait...[DEBUG] 23:53:28: Result's lenght : 27 string[DEBUG] 23:53:28: Result fail, retry process, #2 please wait...[DEBUG] 23:53:28: Result's lenght : 48 string[DEBUG] 23:53:28: Result fail, retry process, #3 please wait...[DEBUG] 23:53:28: Result's lenght : 49 string[DEBUG] 23:53:28: Result fail, retry process, #4 please wait...[DEBUG] 23:53:28: Power is OFF[DEBUG] 23:53:29: Process #8 is finish!
BenjyNet Posté(e) le 22 février 2014 Auteur Signaler Posté(e) le 22 février 2014 Roh punaise, prêt à partir au ski et cédric qui me dit.. "ça marche pas" !! Rrrrrr Bon tu vas me modifier cette partie dans le main loop : function getPowerState(retry) local retry = retry or 0; local cmd = nil; --notify user fibaro:debug("Request POWER status, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1PWRQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then fibaro:debug("POWER status command successufully transmited."); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do fibaro:sleep(60); local result = _tcpSocket:read(); -- check if result is equal than command to confirm success fibaro:debug("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "PWR%d%d"); if (cmd ~= nil) then fibaro:debug(cmd); local pwr_value = tonumber(cmd:sub(4,5)); fibaro:debug("Result OK : PWR" .. pwr_value); return pwr_value; else fibaro:debug("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then fibaro:debug("Retry process, please wait..."); fibaro:sleep(2000); return getPowerState(retry + 1); end return nil; end end en ça function getPowerState(retry) local retry = retry or 0; local cmd = nil; --notify user fibaro:debug("Request POWER status, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1PWRQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then fibaro:debug("POWER status command successufully transmited."); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do fibaro:sleep(60); local result = _tcpSocket:read(); -- check if result is equal than command to confirm success fibaro:debug("Result's lenght : " .. result:len() .. " " .. type(result)); local test = string.find(result, "!1"); local aff_test = fibaro:debug(result:sub(test,test + 4)); cmd = string.match(result, "PWR%d%d"); if (cmd ~= nil) then fibaro:debug(cmd); local pwr_value = tonumber(cmd:sub(4,5)); fibaro:debug("Result OK : PWR" .. pwr_value); return pwr_value; else fibaro:debug("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then fibaro:debug("Retry process, please wait..."); fibaro:sleep(2000); return getPowerState(retry + 1); end return nil; end end Tu regardes le debug et tu pastes ici pour voir ce qui cloche. Sinon je serais sur Orleans vers 8h si tout va bien Allez les gars To SHUSSS on y crois, on va trouver
cedriclocqueneux Posté(e) le 22 février 2014 Signaler Posté(e) le 22 février 2014 Bon, j'ai modifié le code, allumé mon ampli manuellement, et au bout de quelques secondes l'état est correctement remonté: [DEBUG] 13:40:45: Start process #2, please wait...[DEBUG] 13:40:45: Request POWER status, #0 please wait...[DEBUG] 13:40:45: POWER status command successufully transmited.[DEBUG] 13:40:45: Result's lenght : 27 string[DEBUG] 13:40:45: !1NLS[DEBUG] 13:40:45: Result fail, retry process, #0 please wait...[DEBUG] 13:40:45: Result's lenght : 26 string[DEBUG] 13:40:45: !1PWR[DEBUG] 13:40:45: PWR01[DEBUG] 13:40:45: Result OK : PWR1[DEBUG] 13:40:45: Power is ON[DEBUG] 13:40:45: Request Volume level, #0 please wait...[DEBUG] 13:40:45: Request VOLUME level command successufully transmited.[DEBUG] 13:40:46: Result's lenght : 0 string[DEBUG] 13:40:46: Result fail, retry process, #0 please wait...[DEBUG] 13:40:46: Result's lenght : 0 string[DEBUG] 13:40:46: Result fail, retry process, #1 please wait...[DEBUG] 13:40:47: Result's lenght : 0 string[DEBUG] 13:40:47: Result fail, retry process, #2 please wait...[DEBUG] 13:40:47: Result's lenght : 0 string[DEBUG] 13:40:47: Result fail, retry process, #3 please wait...[DEBUG] 13:40:47: Result's lenght : 26 string[DEBUG] 13:40:47: Result OK : MVL10MVL0A[DEBUG] 13:40:47: Volume is 10[DEBUG] 13:40:47: Request Source, #0 please wait...[DEBUG] 13:40:47: Request SOURCE command successufully transmited.[DEBUG] 13:40:48: Result's lenght : 26 string[DEBUG] 13:40:48: Result OK : SLI16SLI10[DEBUG] 13:40:48: Source selected is BD/DVD[DEBUG] 13:40:48: Process #2 is finish! Par contre ensuite j'ai passé l'ampli sur GAME manuellement et changé le volume, toujours manuellement, pour voir si l'état remontait correctement. Là par contre l'état passe à Off et j'ai ça dans le debug: [DEBUG] 13:44:54: Start process #4, please wait...[DEBUG] 13:44:54: Request POWER status, #0 please wait...[DEBUG] 13:44:54: POWER status command successufully transmited.[DEBUG] 13:44:54: Result's lenght : 27 string[DEBUG] 13:44:54: !1NLS[DEBUG] 13:44:54: Result fail, retry process, #0 please wait...[DEBUG] 13:44:54: Result's lenght : 48 string[DEBUG] 13:44:54: !1NLT[DEBUG] 13:44:54: Result fail, retry process, #1 please wait...[DEBUG] 13:44:54: Result's lenght : 27 string[DEBUG] 13:44:54: !1NLS[DEBUG] 13:44:54: Result fail, retry process, #2 please wait...[DEBUG] 13:44:54: Result's lenght : 48 string[DEBUG] 13:44:54: !1NLS[DEBUG] 13:44:54: Result fail, retry process, #3 please wait...[DEBUG] 13:44:54: Result's lenght : 49 string[DEBUG] 13:44:54: !1NLS[DEBUG] 13:44:54: Result fail, retry process, #4 please wait...[DEBUG] 13:44:54: Power is OFF[DEBUG] 13:44:54: Process #4 is finish! Mais bon, profites de tes vacances, y'a pas urgence ;-)
BenjyNet Posté(e) le 2 mars 2014 Auteur Signaler Posté(e) le 2 mars 2014 Bon, pas encore rentré àla maison mais de retour sur les ondes... Je réfléchis àune amélioration possible et te propose ça fin de semaine. @Domodial Ça marche chez toi cette version ?
Domodial Posté(e) le 2 mars 2014 Signaler Posté(e) le 2 mars 2014 Hello, Heu...l'autre fonctionnait bien du coup je n'est pas fait de mise a jour...
Maximin Posté(e) le 4 mars 2014 Signaler Posté(e) le 4 mars 2014 Bonjour, Code testé avec un TX-NR525, fonctionne niquel! Par contre lorsque l'on éteint l'ampli, la carte réseau n'est plus alimenté, donc impossible de le rallumer via l'application... Il faudra regarder si dans les réglages de l'ampli il y a possibilité de modifier cela pour ce modèle. Domadoo à fait une vidéo de présentation: Et un article devrait bientôt sortir sur le blog. Merci beaucoup pour le partage en tout cas! C'est vraiment du bon boulot!
BenjyNet Posté(e) le 4 mars 2014 Auteur Signaler Posté(e) le 4 mars 2014 Oh con ! Domadoo qui publie un billet sur mon VD ! Mais bon c'est con, ça marche pas chez cédric... mais je suis de retour devant mon ordi, héhéhéhé ! Pour le TX NR525 il faut dans les paramètres activer le Hybrid standby, tu mets dans Network Setup , Network Standby à ON. Normalement tu dois pouvoir le commander, même éteint !
Maximin Posté(e) le 4 mars 2014 Signaler Posté(e) le 4 mars 2014 Paramètre modifié, sa fonctionne, parfait!
BenjyNet Posté(e) le 5 mars 2014 Auteur Signaler Posté(e) le 5 mars 2014 Tiens cédric, testes ça dans le main loop ce soir si t'as le temps : ------------------------------------------------------------- -- Plugin for Onkyo TX-NR626 receiver -- Use port 60128 -- Version 1.0.3 (02-21-2014) -- Author : Jean-christophe Vermandé modified by BenjyNet ------------------------------------------------------------- -- Change log 1.0.2 to 1.0.3 : -- Update refresh data : set to 2 min -- Improved sending commands and receiving status -- Improved questions results -- Added source --------------------------------------------------------c[_]- fibaro:debug('Start process Main Loop v1.0.3'); local _deviceIp = fibaro:get(fibaro:getSelfId(), "IPAddress"); local _devicePort = fibaro:get(fibaro:getSelfId(), "TCPPort"); local _maxRetryProcess = 5; -- Polling time (value in milliseconds) local _polling = 2*60*1000; local _trace = true; device = device or { id = fibaro:getSelfId(), name = "Onkyo TX-NR626", power = 0, volume = 0, source = "unknow", }; function trace(value) if (_trace) then return fibaro:debug(tostring(value)); end end function getPowerState(retry) local retry = retry or 0; local cmd = nil; --notify user fibaro:debug("Request POWER status, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1PWRQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then fibaro:debug("POWER status command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success fibaro:debug("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "PWR%d%d"); if (cmd ~= nil) then fibaro:debug(cmd); local pwr_value = tonumber(cmd:sub(4,5)); fibaro:debug("Result OK : PWR" .. pwr_value); return pwr_value; else fibaro:debug("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then fibaro:debug("Retry process, please wait..."); fibaro:sleep(2000); return getPowerState(retry + 1); end return nil; end end function getVolumeLevel(retry) local retry = retry or 0; local cmd = nil; --notify user fibaro:debug("Request Volume level, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1MVLQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then fibaro:debug("Request VOLUME level command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success fibaro:debug("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "MVL.."); if (cmd ~= nil) then local vol_value = tonumber(cmd:sub(4, 5), 16); fibaro:debug("Result OK : MVL" .. vol_value .. cmd); return vol_value; else fibaro:debug("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then fibaro:debug("Retry process, please wait..."); fibaro:sleep(2000); return getVolumeLevel(retry + 1); end return nil; end end function getSource(retry) local retry = retry or 0; local cmd = nil; --notify user fibaro:debug("Request Source, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1SLIQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then fibaro:debug("Request SOURCE command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success fibaro:debug("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "SLI.."); if (cmd ~= nil) then local src_value = tonumber(cmd:sub(4, 5), 16); fibaro:debug("Result OK : SLI" .. src_value .. cmd); local input = nil; if (src_value == 01) then input = "CBL/SAT"; elseif (src_value == 02) then input = "GAME"; elseif (src_value == 03) then input = "AUX"; elseif (src_value == 04) then input = "CEDRIC - STOP TO PLAY !"; elseif (src_value == 05) then input = "PC"; elseif (src_value == 16) then input = "BD/DVD"; elseif (src_value == 34) then input = "PHONO"; elseif (src_value == 35) then input = "TV/CD"; elseif (src_value == 36) then input = "TUNER - FM"; elseif (src_value == 37) then input = "TUNER - AM"; elseif (src_value == 41) then input = "FRONT USB"; elseif (src_value == 43) then input = "NET"; end return (input); else fibaro:debug("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then fibaro:debug("Retry process, please wait..."); fibaro:sleep(2000); return getSource(retry + 1); end return nil; end end function refreshInterface() if (device.power == true) then fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", "ON"); -- update UI volume if (device.volume ~= nil) then fibaro:call(device.id, "setProperty", "ui.VolumeSlider.value", device.volume); end -- update UI input if (device.source ~= nil) then fibaro:call(device.id, "setProperty", "ui.lblInput.value", device.source); end else fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", "OFF"); fibaro:call(device.id, "setProperty", "ui.lblInput.value", "unknown"); fibaro:call(device.id, "setProperty", "ui.VolumeSlider.value", "0"); end return true; end function main() -- prepare a global counter if (_count == nil) then trace("HC2 start script at " .. os.date()); _count = 0; end --notify begin of process trace("Start process #".._count..", please wait..."); --open the socket if (_tcpSocket == nil) then _tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort); --set the read timeout _tcpSocket:setReadTimeout(500); end -- Query power status local power = getPowerState(); if (power == 1) then device.power = true; trace("Power is ON"); -- Query volume device.volume = getVolumeLevel(); trace("Volume is "..device.volume); -- Query source device.source = getSource(); trace("Source selected is "..device.source); else device.power = false; trace("Power is OFF"); end -- call refresh interface to repaint UI refreshInterface(); -- dispose socket if (_tcpSocket ~= nil) then -- close socket _tcpSocket:disconnect(); -- destroy object _tcpSocket = nil; end --notify end of process trace("Process #".._count.." is finish!"); -- increment global counter _count = _count + 1; end -- Start main loop process main(); -- Sleep fibaro:sleep(_polling); -- EOF Main loop Si ça ne fonctionne pas, il faudra faire un petit teamviewer que je vois exactement ce qu'il se passe ! Ici ça marche impeccable, du 1er coup.
cedriclocqueneux Posté(e) le 6 mars 2014 Signaler Posté(e) le 6 mars 2014 Je teste ce soir, pas eu le temps hier soir, trop occupé àtester la HCL ;-)
BenjyNet Posté(e) le 6 mars 2014 Auteur Signaler Posté(e) le 6 mars 2014 Je m'en doutais très fortement ! N'oublie pas de manger et bisouter femme et enfants
BenjyNet Posté(e) le 6 mars 2014 Auteur Signaler Posté(e) le 6 mars 2014 Allez, un peu de teasing à la sauce FIBARO COMING SOON - V 1.1.0
BenjyNet Posté(e) le 6 mars 2014 Auteur Signaler Posté(e) le 6 mars 2014 @ Krikroff J'ai besoin de ton aide sur un truc. Je récupère les infos audio avec une commande qui me retourne une phrase : "HDMI 2,DTS,48 kHz,5.1 ch,DTS,5.1 ch,\0x1A\r\n" Comment je peux faire pour récupérer tout ce qui est entre la avant-avant dernière virgule et la dernière virgule. Bien sur l'ensemble des textes peut changer mais ils sont toujours séparé par des virgules et j'ai toujours àla fin \0x1A\r\n.
Shad Posté(e) le 6 mars 2014 Signaler Posté(e) le 6 mars 2014 Benjy penche toi sur les regex . Mais je te préviens que c'est la merde ^^. Ou alors la solution la plus simple tu l'appelle dans une fonction genre et tu peux récupérer chaque résultat. Mais pour moi le mieux est le regex: http://lua-users.org/wiki/PatternsTutorial https://www.easyuo.com/openeuo/wiki/index.php/Lua_Patterns_and_Captures_%28Regular_Expressions%29 http://www.wellho.net/mouth/2383_Lua-Regular-Expressions.html http://www.lua.org/pil/20.2.html http://www.computercraft.info/forums2/index.php?/topic/13621-patterns-regex-in-lua-tutorial/
BenjyNet Posté(e) le 6 mars 2014 Auteur Signaler Posté(e) le 6 mars 2014 Arf Shad, je connais tout ça déjàmais justement je cherchais une façon simple de traiter la réponse sans fonction compliquée.
Shad Posté(e) le 6 mars 2014 Signaler Posté(e) le 6 mars 2014 Mais c'est très simple. Tu te sers de la virgule pour splitter tes données http://lua-users.org/wiki/SplitJoin
BenjyNet Posté(e) le 6 mars 2014 Auteur Signaler Posté(e) le 6 mars 2014 Bah voilàquand tu veux Pil poil ce qu'il me fallait, je cherchais justement àfaire un tableau avec une boucle for.. .mais si c'est tout fait alors autant l'utiliser
Messages recommandés