linknx et squeeServeur - Version imprimable +- Forum KNX francophone / English KNX forum (https://www.knx-fr.com) +-- Forum : Français (https://www.knx-fr.com/forumdisplay.php?fid=3) +--- Forum : Logiciels libres (linknx, knxweb, pKNyX,...) (https://www.knx-fr.com/forumdisplay.php?fid=10) +--- Sujet : linknx et squeeServeur (/showthread.php?tid=3634) |
linknx et squeeServeur - brinbois - 23/01/2015 Bonjour, tout le monde Alors voila, je suis en train de voir ce que je pourrait comme visu. Et je voulait pouvoir commander mon système multiroom via knx. Mon système multiroom, n'est autre qu'un synology avec logitech media server, et des raspberry, avec des sueezeplayer. J'ai essayer de m'inspirer du wiki : http://www.knx-fr.com/wiki/commander_squeezecenter_avec_un_z38i , mais je n'ai pas compris comment fonctionnait les IOPorts. Voici donc ma solution. Nous allons commencer par récupérer le status du lecteur que l'on cherche. On crée deux objet : audio_cuisine_onoff_status : 8/1/0 : 1.0001 audio_cuisine_vol_status : 8/3/0 : 5.0001 Pour la mise a jour de ces valeur j'utilise une règle : <rule id="audio_cuisine_getStatus" init="true"> <condition type="timer" trigger="true"> <every>5</every> </condition> <actionlist> <action type="script"> <![CDATA[ http = require("socket.http") c = http.request("http://192.168.0.22:9002/status.html") r = c:find("Lecture en cours") status = obj("audio_cuisine_onoff_status"); if r == nil then set("audio_cuisine_onoff_status","off"); else set("audio_cuisine_onoff_status","on"); end; c0 = string.sub(c,c:find("Volume :"),c:find("playList")) rVolume= (tonumber(string.sub(c0,c0:find("<b>")+3,c0:find("</b>")-1))-1) * 10 set("audio_cuisine_vol_status",rVolume); ]]> </action> </actionlist> </rule> Cela fonctionne correctement, cependant, ca me dérange d'avoir une regle executer toute les 5 secondes. Pouvez vous me dire si cela peut poser problème ? Faut'il mieux que je fasse fonctionné le ioport ? Avez vous des idée ou je peut trouver des information, pour comprendre comment cela fonctionne ? merci de votre lecture. Pour ceux que ça intéresse, j'ai aussi via script lua, programmer le play/stop et le changement de volume via knx. RE: linknx et squeeServeur - Energy01 - 23/01/2015 Salut, pas mal l'idée avec les script lua en fait la version actuel sur le cvs de linknx il y a un bug avec les ioport pour la partie connect et récupération des données dans les actions il y a semble-t-il quelque qui regarde le problème pour proposer une solution mais suis pas sur que l'ioport seul réponde à tous les cas dont tu as besoin quels infos voudrais-tu exactement ? @+ Anthony. RE: linknx et squeeServeur - brinbois - 23/01/2015 Bah j'avoue ne pas trop savoir les besoin encore. Mais j'aimerai pouvoir jouer sur mes squeeezebox pour mes scenario. Par exemple, un scenario que j'aimerai faire : Si on est un jour de semaine, et que aucune entre dans mon calendrier corespond a CP (congée) Alors, les volet de la chambre et de la cuisine ce releve, la radio est allumée a la cuisine, et le son monte progressivement. C'est un exemple, mais j'ai par exemple, d'autre idee, via des detecteur de mouvement, allumer les squeezebox juste des pieces occupée. Donc pour le moment je cherche surtout a me cree les objets KNX pour gerer cela. Concernant la visu, j'aimerai la total, quel artiste/morceau, le pourcentage de lecture sur la musique, .... l'image de la pochette.... Mais je suis en train de sérieusement de me demander, si ca vaut le coup de faire passer sur le bus knx. Pourquoi pas juste faire un plugin knxweb ? Il faut par contre le retour d'etat des elements controlable par knx, sinon a chaque fois qu'on touche au lecteur on est plus en phase. Donc pour le moment je pense 1 etat on ou off, 2 volume, 3 radio ou playlist1 ou playlist2, 4 syncro ? Avec ces objets il y as déjà de quoi s'ammuser avec les regles RE: linknx et squeeServeur - domotiqa - 27/01/2015 (23/01/2015, 22:00:44)brinbois a écrit : Bah j'avoue ne pas trop savoir les besoin encore.tu devrais essayé smartvisu avec smarthome en backend http://mknx.github.io/smarthome/plugins/squeezebox.html RE: linknx et squeeServeur - brinbois - 27/01/2015 Merci, pour les infos, Pour le moment, je reste sur knxweb, car justement, même si je doit coder un peu, j'arrive a faire ce que je veut. Et j'aimerai garder cette modularité. Si j'amais je trouve un point bloquant, alors j'etudierai autre chose. Pour le moment, rien a dire, ca marche tres bien ce petit trio. RE: linknx et squeeServeur - domotiqa - 27/01/2015 (27/01/2015, 14:18:23)brinbois a écrit : Merci, pour les infos,je sais pas si t as vu ce sujet http://www.knx-fr.com/wiki/commander_squeezecenter_avec_un_z38i RE: linknx et squeeServeur - brinbois - 27/01/2015 Si justement j'en parle dans mon premier post, Et a priori les IO-ports sont bogué dans les derniers version de linknx, et c'est justement parce-que je n'ai pas réussi a les faire fonctionner que je j'ai poster ma solution ici (en me demandant si elle était la bonne ) RE: linknx et squeeServeur - lolo666666 - 27/01/2015 Bonsoir, Je suis très intéressé par ta solution, j'ai fait pas mal de tests et je suis également bloqué avec l'ioport. Je sais qu'il devait y avoir une demande de modification de l'ioport pour que cela fonctionne: https://groups.google.com/forum/?hl=fr#!topic/eibd-linknx-knxweb/VgmFfEjo-0U Laurent RE: linknx et squeeServeur - jjay - 28/01/2015 Hello, Je suis aussi super intéressé par squeeServeur, mais pour le moment j'en suis au tout debut de mon installation (en fait j'en suis encore à démolir les murs/plafonds/planchers). Je garde ce sujet sous le coude pour le moment opportun. JJay RE: linknx et squeeServeur - brinbois - 28/01/2015 Hello, Contant de trouver du public @lolo666666 : a tu essayer la règles pour récupérer les informations ? Je veut bien que tu me fasse des retours, sur ce qui ne fonctionne pas chez toi, si il te manques des infos. RE: linknx et squeeServeur - Ziki - 28/01/2015 Voila, le bug est corrigé sur le CVS de linknx, le retour d'information de squeezecenter vers linknx devrait fonctionner comme décrit dans le tuto http://www.knx-fr.com/wiki/commander_squeezecenter_avec_un_z38i Attention de bien prendre la version du CVS et pas la dernière version 0.0.1.30. RE: linknx et squeeServeur - brinbois - 29/01/2015 Bonjour, merci de ta réactivité. Mais j'avoue ne pas trop être sur de comment faire la mise a jour, Je suis sous archlinux (sur raspberry), et j'ai installer le paquet via les depots AUR qui va chercher ici : http://downloads.sourceforge.net/project/linknx/linknx/linknx-${pkgver}/linknx-${pkgver}.tar.gz avec pkgver = 0.0.1.32 il me suffit de changer la version du packet ? ou dois-je désinstaller cette version en installer une autre ? Dans ce cas ou aller la chercher ? Merci RE: linknx et squeeServeur - Ziki - 29/01/2015 Effectivement la c'est plus embêtant. Il faudrait modifier le packet existant pour l'adapter mais je n'ai jamais utilisé archlinux et je n'ai pas de possibilité de tester. RE: linknx et squeeServeur - brinbois - 29/01/2015 Ce n'est pas un probleme, archlinux est tres bien fait, et te permet de changer les fichier avant l'installation des paquet, de meme on trouve les adresse email de ceux qui cree les paquet, il y as aussi un systeme de commentaire sur les paquets, qui permet a ceux qui trouve des solution (quand un paquet ne marche plus) de la diffuser au autres ..... Mais, pourrais tu me dire comment allez chercher la nouvelle version, si on ne peut pas le faire via un download sur le sourceforge ? quelle est l'adresse du cvs ? peut on y accéder en anonyme ? RE: linknx et squeeServeur - Ziki - 29/01/2015 http://linknx.cvs.sourceforge.net/viewvc/linknx/linknx/linknx/?view=tar RE: linknx et squeeServeur - brinbois - 30/01/2015 Merci Bon j'ai fait la mise a jour, (enfin je croit) Je m'explique, quand j'ai fait un linknx --version j'avvais 0.0.1.32 appres mise a jour, j'ai 0.0.1.32 ?? c'est normal ? J'ai essayer de mettre en place ce qui est decrit sur le wiki, Et la c'est le drame, A partir de la regle sur le listen 1 linknx ce met a ne plus repondre, et si je fait un tail -f knxweb2.log j'obtient en boucle : 3007 DEBUG TcpClientIOPort : Out of read 0 J'ai louper quelque chose ? RE: linknx et squeeServeur - Ziki - 30/01/2015 Et si tu enlèves ta rule avec le ioport-onconnect? RE: linknx et squeeServeur - brinbois - 30/01/2015 Oui dans ce cas la, appres un kill du linknx, et restart ca remarche correctement. RE: linknx et squeeServeur - Ziki - 30/01/2015 Tu pourrais m'envoyer ta config linknx? RE: linknx et squeeServeur - brinbois - 12/02/2015 Oups désolez, j'ai pas vue passer ton message, tu la veut avant ou appres la configuration du io-port ? Pour ceux qui sont interesser pour le faire en LUA, voici les script que j'ai mis en place est qui fonctionne pour le moment : Pour la lecture : (il faut bien entendu mettre les bon parametres sur les trois premiere ligne.) ip = '192.168.0.22' port = 9090 squeezeDevice = "b8:27:eb:b9:97:56" socket = require("socket") client = socket.connect(ip,port) clientend(squeezeDevice .. " play\n") client:close() Pour mettre pause (meme chose pour les parametres) ip = '192.168.0.22' port = 9090 squeezeDevice = "b8:27:eb:b9:97:56" socket = require("socket") client = socket.connect(ip,port) clientend(squeezeDevice .. " pause\n") client:close() Pour changer le volume (il faut en plus des trois premier parametre, donner l'objet de commande du volume) ip = '192.168.0.22' port = 9090 squeezeDevice = "b8:27:eb:b9:97:56" vol_obj = "audio_cuisine_vol_cmd" socket = require("socket") client = socket.connect(ip,port) volume = obj(vol_obj) clientend(squeezeDevice .. " mixer volume " .. volume .. " \n") client:close() Et script qui recupere à la fois l'etat de lecture de la squeezebox, ainsi que le volume) il faut donc donnée les objet a mettre a jour en paramettre ip = '192.168.0.22' port = 9090 squeezeDevice = "b8:27:eb:b9:97:56" onOff_obj = "audio_cuisine_onoff_status" vol_obj = "audio_cuisine_vol_status" socket = require("socket") client = socket.connect(ip,port) clientend(squeezeDevice .. " mode ?\n") result = client:receive() play = result:find("play") if play == nil then set(onOff_obj,"off"); else set(onOff_obj,"on"); end; clientend(squeezeDevice .. " mixer volume ?\n") result = client:receive() volume = tonumber(string.sub(result,result:find("volume")+6,string.len(result))) set(vol_obj,volume); client:close() Voila, j'obtiens donc un controlleur tres basique play/pause et gestion du volume, par n'importe quel élément capable de gérer du knx. Si vous voulez plus de detail, d'autre script pour recuperer d'autre etat ? agir sur d'autre chose, je peut ecrire d'autre script. @Energy01, je suis interesser pour faire un plugin pour knxweb2 qui gererai le squeezebox de cette maniere (et simplifier la vie de l'utilisateur), tu peut dire si je peut trouver un peu de doc pour la realisation de ce genre de plugin ? RE: linknx et squeeServeur - Energy01 - 16/02/2015 Salut, @brinbois intérressant merci pour le partage de tes bouts de code lua as-tu installé des libs lua spécifiques en plus sur ta machine pour pouvoir utiliser le socket ou c'est en "standard" ? la notion de plugin j'y refléchi dans knxweb, ça prend du temps à développer/tester/valider ... j'ai commencé à faire un widget pour le moment il me fait play/pause c'est tout !! il faut que je continue à l'améliorer .... pour la doc euh ben y a pas ... j'avoue avoir un peu la flemme d'écrire la doc, c'est très long et l'idéale le faire en anglais donc encore plus chaud ... le "mieux" est de s'inspirer d'un élément qui existe et le dupliquer, pour les widgets la logique est a mon avis simple 3 fichiers manifest.xml widget.html et widget.js ( possible d'ajouter aussi widget.css si besoin) ou d'autres en fonction des besoins du widget lui-même il y a sinon une solution "simple" pour intégrer un lecteur squeezebox dans knxweb avec un widget html et dedans le code suivant : <iframe src="http://IP_DU_SERVEUR_SQUEEZE:9000/status_header.html?player=00:00:00:00:00:01" width="500"></iframe> par contre cela ne marchera que en local sauf si tu ouvre le port sur le net et mettre l'ip publique du serveur squeeze @+ Anthony. RE: linknx et squeeServeur - brinbois - 16/02/2015 Il as en effet fallut que j'installe le package lua-socket Enfin c'est comme ça qu'il ce nomme sur archlinux il semblerait que sous debian c'est : luasocket. Pour ce qui est du lecteur squeezebox, j'ai pensé au coup de l'iframe, mais ca ne va clairement pas assez loin pour mes besoins. J'ai vraiment (envie/besoin) de pouvoir gérer mes lecteur via le reste des éléments knx de la maison, par exemple, éteindre la musique quand y'a plus personne dans la pièce. Pour ce qui est du plugin, je penssait justement a un truc qui va cree les object avec les GA (via un formulaire demander a l'utilisateur) Cree automatiquement la / les rules de fonctionnement, et faire le widget correspondant. Pour le widget, je vais essayer de vous proposer quelquechose par la suite. Pour info, j'ai des petit souci avec mes bout de script lua, en effet quand j'essaye d'eteindre la music via un autre endroit que sur la visu knx, il se rallume tout seul ( un probleme de gestion d'événement) Pour regler ca, et simplifier la configuration, je pense ecrire un seul script lua qui sera executer toute les secondes. Je reviens vers vous des que j'ai quelques chose de plus neuf et mieux Si jamais vous avez des idées de fonctionnalité RE: linknx et squeeServeur - Energy01 - 16/02/2015 brinbois a écrit :Pour ce qui est du plugin, je penssait justement a un truc qui va cree les object avec les GA (via un formulaire demander a l'utilisateur) oui c'est l'idée des plugins que cela puisse inter-agir à tous les niveaux, objects, ioports, rules (rule complete ou juste actions/conditions), widgets et donc comme c'est transversal c'est pas "simple" ... le plus gros inconvénient que je vois c'est qu'il faudra stocker des infos au niveau de knxweb pour les rules/objects/ioport et donc lié de façon complete linknx et knxweb ce que si on modifie manuellement le fichier linknx.xml à la main ça pourrais poser problème ensuite dans knxweb ... @+ Anthony. |