c-lol Posté(e) le 10 juin 2014 Signaler Posté(e) le 10 juin 2014 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
Krikroff Posté(e) le 10 juin 2014 Signaler Posté(e) le 10 juin 2014 bonsoir, sur le forum officiel il y a robert aka robmac qui a fait un vd pour Squeezebox. c'est par ici http://forum.fibaro.com/viewtopic.php?t=3685 Robert code très bien pas de soucis
c-lol Posté(e) le 10 juin 2014 Auteur Signaler Posté(e) le 10 juin 2014 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
Krikroff Posté(e) le 10 juin 2014 Signaler Posté(e) le 10 juin 2014 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..
c-lol Posté(e) le 11 juin 2014 Auteur Signaler Posté(e) le 11 juin 2014 ok merci je vais essayer de comprendre tous ça. Mais où trouves tu toutes ces fonctionnalités?
c-lol Posté(e) le 11 juin 2014 Auteur Signaler Posté(e) le 11 juin 2014 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.
Krikroff Posté(e) le 11 juin 2014 Signaler Posté(e) le 11 juin 2014 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)
c-lol Posté(e) le 12 juin 2014 Auteur Signaler Posté(e) le 12 juin 2014 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
Shyrka973 Posté(e) le 13 juin 2014 Signaler Posté(e) le 13 juin 2014 Salut, Sur ce sujet, j'ai ouvert ce post. Cela peut t'intéressé.
c-lol Posté(e) le 13 juin 2014 Auteur Signaler Posté(e) le 13 juin 2014 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.
Messages recommandés