Aller au contenu

Ampli Onkyo Et Hc2


BenjyNet

Messages recommandés

Bon j'ai pas utilisé ce que tu m'as indiqué, j'ai fais à  ma sauce. J'ai allègrement pompé sur ce que t'as fait mais par contre je rencontre un soucis sur le mute.

J'ai comme affichage pour le powerstatus : ON ou OFF et si c'est avec mute ça devient : ON - Mutting ou OFF - Mutting

Alors pour virer le " - Mutting" j'ai fait ça :

-- Refresh UI
    	local label = fibaro:getValue(fibaro:getSelfId(), "ui.lblPowerStatus.value");
    	local labelUpdated = label:gsub(" - Mutting", "");
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblPowerStatus.value", labelUpdated); 

Mais ça ne marche pas, ça me retire Mutting mais ça me laisse " - ".

Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

Elle ne te plaisait pas ma fonction parsePowerState :lol: ... C'est quoi ta sauce ?

 

Il manque le pattern qui va bien dans le gsub: label:gsub("%s[-]%sMutting", "") :)

 

Le pattern matching c'est très pratique cf.http://www.lua.org/pil/20.2.html

 

le - est réservé donc il faut utiliser par convention le couple [] pour crée un char-set, le %s c'est pour matcher un espace.

 

Bientôt un super device pour ONKYO, cool :)

JC.

Lien vers le commentaire
Partager sur d’autres sites

Oh punaise, cette page je l'ai lue je ne sais pas combien de fois et c'était sous mes yeux.

Pour ma sauce je finis un truc sur le mainloop et je post le VD 1.0.2 en pièce jointe dès que c'est fait. Si tu peux j'aimerai bien que tu regardes le code, histoire de voir si ça tiens la route ou pas.

En tout cas merci d'avance pour tes renseignements et pour ton VD qui a permis de développer celui là.

Lien vers le commentaire
Partager sur d’autres sites

Hop, modification du premier post. Le VD est en ligne et fonctionne pas mal. Merci pour tout JC... ton nom est dans le VD bien entendu ;)

 

Bon mais c'est pas tout, maintenant que la base est là , je vais pouvoir agrémenter un peu et utiliser les fonctions de la source NET pour écouter ma radio internet préférée quand je me lève. Pffiou encore du codage  :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à  tous,

 

J'avais tenté a l'époque d'intégrer mon OnKyo, mais dans le tuto il fallait rentrer une chaine de caractère bizarre, j'avais été jusqu'au bout de la démarche mais il n'a jamais fonctionné.

Il est connectable, reseau etc...

 

Je vais essayer avec ce VD car le but est d'allumer l'ampli avec la TV (le contraire ça fonctionne avec le protocole ARP, mais pas pour l'allumage).

 

PS : c'etait justement cette chaine : ISCP\0\0\0\16\0\0\0\9\1\0\0\0!1PWR01\r

que j'avais adapté pour mon ampli d'après le doc qu'ils expliquait.

 

Bernie

Lien vers le commentaire
Partager sur d’autres sites

Bah test Domodial. Tu me diras si ça marche, je rajouterai la référence de ton ampli dans le VD si ça fonctionne.

Ici avec une TV SONY de 2010, pas du tout "smart", mais "CRC capable", l'ampli allume la TV et si je choisis la source BD/DVD il me positionne sur l'entrée HDMI qui va bien. Si je choisis TV/CD il se met sur la TV (il faut d'ailleurs que j'améliore ça, si c'est possible).

 

Bon j'ai un peu réfléchis cette nuit et il y a des choses qui me dérangent dans le code. Je vais scinder tout ça pour avoir des sous-fonctions plus simples à  utiliser ou gérer ou tout simplement comprendre pour réutiliser le code pour créer d'autres boutons (pour ceux que ça intéresse).

 

Par contre les vacances c'est à  la fin de la semaine et je pars direct au ski, je serais moins présent mais je vous suivrai là  haut de la montagne :D

Lien vers le commentaire
Partager sur d’autres sites

Ah j'ai une option pour ça moi, il faut activer le HYBRID STANDBY avec HDMI Through àON (laisse passer le signal HDMI de ta freeplayer par exemple sans allumer l'ampli, idéal pour juste mater la TV par exemple) et NETWORK STANDBY àON (pour écouter/envoyer sur le réseau).

Si ton NETWORK STANDBY n'est pas allumé, l'ampli ne répond pas aux commandes réseaux.

Pour ce qui est de la commande envoyée par le VD pour l'allumer, c'est une commande qui date des tout premiers modèles INTEGRA commandable par liaison série, elle devrait donc fonctionner !

Lien vers le commentaire
Partager sur d’autres sites

Bon je suis coincé sur un truc débile de newbie je pense.

 

J'en appelle au grand Krikroff... oh grand maitre jedi du codage, grand gourou du virtual device et prophète du lua (c'est un dieu ce gars.. non ??  :) )

Enfin si quelqu'un d'autre veut s'exprimer il peut hein !

local function _toto(command, retry)
  local retry = retry or 0;
  blablabla
  local result = _parceMessage()
if ok then
return true
else
return _toto(command, retry + 1 );
end

local function _parceMessage()
blablabla
return true
end

Dans ma fonction _parceMessage, est-ce que je peux utiliser les variables passée à  la fonction _toto et les variables locales comme retry, crée dans _toto ?

Ou alors faut-il repasser à  _parceMessage un argument qui sera identique à  command par exemple.

 

Autre chose, est-ce que la ligne return _toto(command, retry + 1 ); est correcte sachant que command a été passé en parametre au 1er lancement de la fonction.

 

Hum.. fonction, variables, imbrication.. c'est la m*****  :mellow:

Lien vers le commentaire
Partager sur d’autres sites

Oui Benjy, la ligne return _toto(command, retry + 1 ); semble bonne ;) . Pour le reste, je suis pas sur de bien tout comprendre... Le meilleur moyen encore d’accéder à  une variable de partout c'est d'utiliser une variable Globale: c.a.d crée sans le "local" devant.

 

:)

Lien vers le commentaire
Partager sur d’autres sites

Si je peux te donner un conseil pour la compréhension et facilité à  maintenir ton code. Tu devrais éviter d'imbriquer plusieurs fonctions dans une.

Rends les toutes "indépendantes", et à  chaque fois que tu appelles une fonction du passe les variables que tu veux dedans. Sa t'éviteras pas mal de casse tête.

 

En cas d'évolution tu n'auras pas à  toucher a toutes tes fonctions pour faire fonctionner ton code. De plus, justement l'intérêt d'une fonction est de la sortir de ton code pour l'appeler en cas de besoin.

 

 

Sinon oui, ton return toto me parait bon.

Lien vers le commentaire
Partager sur d’autres sites

Bon ok, je vais laisser comme c'était. Je vais juste modifier pour utiliser une seule et unique fonction pour envoyer une commande pour faire une action ou pour obtenir un statut.

En fait actuellement j'ai créé plusieurs fonctions pour chaque bouton. Si c'est un bouton qui doit faire une action, par exemple allumer l'ampli, j'ai une fonction avec test de retour de consigne qui repond true or false. Alors que pour le bouton qui check si l'ampli est allumé j'ai une réponse également true or false mais si c'est pour connaitre l'entrée, j'ai encore une autre fonction qui me retourne le nom de l'entrée.

 

Je vais me pencher sur la question et voir ce que je pourrais obtenir pour justement simplifier la chose et mieux comprendre le code. J'ai pas encore l'esprit logique là  dessus. Le codage c'est un métier, c'est clair !

Lien vers le commentaire
Partager sur d’autres sites

Verdict !

 

C'est de la bombe !!

 

Je n'ai essayé que le bouton On/Off :) mais ça fonctionne.

 

Mon modèle est le TX-NR509

Fayot !

tout ça pour gagner le sondage  ;)

 

 

Lionel, merci de ne pas citer le message précédent.

Modifié par moicphil
Modération
Lien vers le commentaire
Partager sur d’autres sites

Oui Toggle ça veut dire basculer. Tu peux de cette façon changer l'état de ton ampli à  l'aide d'un seul bouton pour allumer/éteindre. Et comme il n'y a qu'un bouton dans le home c'est pratique.

 

gallery_11_7_7441.jpg

 

De là  tu peux allumer/éteindre et régler le volume...  :74:, ça évite de rentrer dans le VirtualDevice juste pour ça.

Lien vers le commentaire
Partager sur d’autres sites

Nope j'ai pas fait encore, je suis sur le développement d'une version un peu plus poussée 1.1.0

En plus je ne suis pas graphiste donc les idées/coups de main pour faire quelque chose de joli, je ne les ais pas forcément. 

Lien vers le commentaire
Partager sur d’autres sites

Bon je suis en train de recoder tout ça pour pouvoir développer de nouveaux boutons sans tout retoucher mais j'ai un soucis. Voici le code (attention c'est long) :

-------------------------------------------------------------------
-- This code works for any connectable ONKYO receiver whith eISCP
-- Code tested on ONKYO TX-NR626
-- Version 1.1.0 by BenjyNet
-------------------------------------------------------------------

-- Edit code below to send command (if you know it !) -------------
local command = "PWRQSTN";				-- command to PowerOn receiver
local msg_cmd = "PowerOn receiver";		-- What should the command do ?
local flag_debug = true;				-- activate/deactivate debug messages
-------------------------------------------------------------------

fibaro:debug("Start process v1.1.0");
fibaro:log("Try to " .. msg_cmd);

local _deviceIp = fibaro:get(fibaro:getSelfId(), "IPAddress");
local _devicePort = fibaro:get(fibaro:getSelfId(), "TCPPort");
local _maxRetryProcess = 5;

local function _sendCommand(cmd, retry)
	local retry = retry or 0;
	-- notify user
	if (flag_debug == true) then fibaro:debug("Try to send command " .. cmd .. ", #" .. retry .. " please wait..."); end
	-- send packet
	local cmd_length = tostring(string.len(cmd) + 3);
	bytes, errorCode = _tcpSocket:write(string.format("ISCP\0\0\0\16\0\0\0\%s\1\0\0\0!1%s\r", cmd_length, cmd));
	-- check for error
	if errorCode == 0 then
		if (flag_debug == true) then fibaro:debug("Command " .. cmd .. " successufully transmited."); end
		return true;
	else
		if retry < _maxRetryPorcess then
			if (flag_debug == true) then fibaro:debug("Retry process, please wait..."); end
			fibaro:sleep(1000);
			return _sendCommand(cmd, retry +1);
		end
		return false;
	end
end

local function _resultCommand(cmd, retry)
	local retry = retry or 0;
	local result_cmd = nil;
	-- receiver should return the command sent if success
	while (result_cmd ~= string.sub(cmd, 1, 3) and retry < _maxRetryProcess) do
		-- notify user
		if (flag_debug == true) then fibaro:debug("Try to analize result, #" .. retry .. " please wait..."); end
		fibaro:sleep(60);
		local result = _tcpSocket:read();
		-- check if result is equal than command to confirm sucess
		result_cmd = string.sub(result, 19, 21);
		if (flag_debug == true) then fibaro:debug("Result of command : " .. result_cmd); end
		if (result_cmd ~= string.sub(cmd, 1, 3)) then
			if (flag_debug == true) then fibaro:debug("Result failed, retry process, please wait..."); end
			retry = retry + 1;
		else
			return result;
		end
	end
	return false;
end

--open a local socket
_tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort);
--set the read timeout
_tcpSocket:setReadTimeout(250);

local sC = _sendCommand(command);
if (sC == true) then
	local rC = _resultCommand(command);
	-- close socket
	_tcpSocket:disconnect();
	-- destroy object
	_tcpSocket = nil;
	if (rC == false) then
		fibaro:debug("Command " .. command .. " transmited but not confirmed, result ok on receiver ?");
	else
		fibaro:debug("Command " .. command .. " transmited and " .. msg_cmd .. " confirmed");
		local cmd_type = command:match("QSTN");
		if (cmd_type ~= nil) then
			fibaro:debug("Retour info àtraiter");
		else
			fibaro:debug("Process terminated !");
		end
	end
else
	fibaro:debug("TCP socket error, Connection failed !");
end

Je ne sais pas pourquoi, la commande n'est pas envoyée. On dirait que le message n'est pas formé. Alors que si je demande la commande PWR01 par exemple, ça marche sans problème. Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...