Forum KNX francophone / English KNX forum
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 Smile

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 Smile


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.
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 Smile
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,
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.
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 Wink )


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 Smile

@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 Smile


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 Smile

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)
clientConfusedend(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)
clientConfusedend(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)
clientConfusedend(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)
clientConfusedend(squeezeDevice .. " mode ?\n")
result = client:receive()
play = result:find("play")
if play == nil then
set(onOff_obj,"off");
else
set(onOff_obj,"on");
end;
clientConfusedend(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 Smile

Si jamais vous avez des idées de fonctionnalité Smile


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)
Cree automatiquement la / les rules de fonctionnement, et faire le widget correspondant.

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.