Aller au contenu

Messages recommandés

Posté(e)

Salut à  tous, 

 

j'adapte le virtual device pour contrôler une squeezebox, pour le cas c'est plus une squeezeplug.

J'ai réussi à  pas mal rendre le code plus simple d'utilisation, mais je cherche une fonctionnalité.

En effet je voudrais pouvoir recevoir le résultat d'une commande envoyer avec la fonction Net.FTcpSocket.

En gros je voudrais récupérer le titre de la piste en cours pour l'afficher dans mon label.

En telnet lorsque je tape la requête 192.168.1.10 current_title ? le serveur me retourne 3c%3A99%3A25%3A8b%3B27%3A3f current_title Adrenaline%20Rush

et idem pour le volume(192.168.1.10 mixer volume ?, le serveur me retourne 3c%3A99%3A25%3A8b%3B27%3A3f mixer volume 65

 

Merci

Posté(e)

Yep c'est ce device que j'adapte et du coup je cherche comment avoir le retour d'etat. je crois qu'il cherche aussi :)

Posté(e)

Tu peux faire un truc comme cela pour traiter la réponse...

local result = string.upper(_tcpSocket:read() or string.char());
local data= result:match("mixer volume %d") or "n/a";
fibaro:debug(data);
--etc..
Posté(e)

ok merci je vais essayer de comprendre tous ça.

Mais où trouves tu toutes ces fonctionnalités?

Posté(e)

Super cool Krikroff de m'avoir mis sur le chemin j'ai trouvé ce que je souhaitais faire.

 

Pour rappel la commande passé en telnet est : 192.168.1.10 mixer volume ? et le serveur retourne 3c%3A99%3A25%3A8b%3B27%3A3f mixer volume 65

Voici le code pour ne récupérer seulement que le 65

Bon c'est peut être pas très optimisé, je suis pas dev!! mais s'il y 'en a qui peuvent alléger je suis preneur.

J'ai détaillé le code pour bien comprendre les étapes pour ceux qui auront besoin.

 

local result = tcpSocket:read() or string.char();
-- Transforme "result" en chaine de caractere
local data = string.format("%s", result);
fibaro:debug("le resultat 1 est " ..data)
-- Recherche l'index de caractere ou il trouve la chaine "MIXER VOLUME"
index = string.find(data, "mixer volume %d");
fibaro:debug("le resultat 2 est " ..index)
-- Recupere la chaine la chaine de caractere apres l'index
data = string.sub(data, index)
fibaro:debug("le resultat 3 est " ..data)
-- Recherche l'index de caractere ou il trouve le caractere numerique dans la chaine
index = string.find(data, "%d");
fibaro:debug("le resultat 4 est " ..index)
-- Recupere la chaine la chaine de caractere apres l'index
data = string.sub(data, index)
fibaro:debug("le resultat 5 est " ..data)
 
Allé maintenant je m'occupe du titre et je vous post ça.
Posté(e)

Super !

 

Je pense que tu peux faire plus court:

-- Transforme "result" en chaine de caractere
loca data = string.upper(tcpSocket:read() or string.char());
-- Recupere le volume...
local cmd = data:match("mixer volume %d");
local cmd_value = cmd:match("%d") or "NaN";
fibaro:debug("le volume est " .. cmd_value)
Posté(e)

ah ouai effectivement bien plus court.

 

]-- Transforme "result" en chaine de caractere
local data = string.upper(tcpSocket:read() or string.char());
fibaro:debug(data);
-- Recupere le volume...
local cmd = string.match(data, "MIXER VOLUME %d%d");
fibaro:debug(cmd);
local cmd_value = cmd:match("%d%d") or "NaN";
fibaro:debug("le volume est " .. cmd_value)
 
1) comme tu passes la commande en Majuscule, dans la commande "MATCH" il faut respecter la casse
 
Voila j’espère que ça aidera les autres aussi
 
Encore merci
Posté(e)

yes merci!! je vais mettre ça précieusement de coté!

 

A la base je voulais faire comme toi du script dans un main loop, mais je sais pas comment réagit le main loop.

Si trop de main loop dans les device virtuel, ça peut saturé la box ou alors ils sont exécuté seulement lorsqu'on utilise le virtuel device?

Et aussi pour pas faire des requête toutes les secondes à  mon serveur NAS, mais j'avais pas pensé au fibaro:sleep.

×
×
  • Créer...