Aller au contenu
Krikroff

Fibaro Hc2 Vd Sonos Remote: Télécommande Pour Diffuseur Sonos

Recommended Posts

Ca fleure bon krikroff :-) alors

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Est-ce que ça va changer quelque chose pour nous ?
Ca fait longtemps que l'API de Sonos a été hackée, la preuve, le VD de Krikri, et il en est de même sur les plateformes des copains (eedomus, Jeedom, etc, même Lifedomus qui se veut orientée installateurs Pro)

En fait, j'ai l'impression que la publication officielles de l'API servira pour les solutions elles mêmes fermées.... à commencer par Google Home !

  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Parfaitement résumé


Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah ouais rabat joie, mais je vous évite la déception, pour nous utilisateurs de box domotiques, cela n'apportera rien de plus.

 

Par contre, le gain va être significatifs pour le grand public, utilisateur d'objets connectés (ce que nous sommes aussi en fin de compte), ces objets qui n'ont de connecté que le nom, et ne sont connectés qu'au cloud de leur propre constructeur.

Dans ce cas, ces API permettent une communication entre les uns et les autres, cela n'a rien de nouveau, je lisais déjà le même genre de discours il y a plusieurs années. C'est fou le temps qu'il a fallu attendre pour qu'un constructeur tel que Sonos ouvre enfin ses API publiquement.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

L' API sonos étant sur du standard largement documenté je confirme que cela n'apportera rien de plus pour nous, c'est juste du marketing tout ça...

 

Pour les curieux:

 

UPnP AV The technology basis of DLNA

ContentDirectory:1 Service Template Version 1.01

ContentDirectory:2 Service Template Version 1.01

....

 

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

je ne comprends pas...

J'ai importé ce VD il y a un moment. I marchait nickel.

Puis j'ai désinstallé mes enceintes pour finalement ne les remettre que ce soir.

Mais là, le VD ne fonctionne plus ; j'ai pourtant changé l'IP dans le VD mais rien n'y fait. Voilà l'erreur qui est la même sur chaque bouton...

 

[

[DEBUG] 00:04:26: Unable to process data, check variable
[ERROR] 00:04:26: line 5: attempt to index local 'f' (a nil value)

edit : le bug ligne 5 , c'est avec les boutons radio par exemple; avec le bouton "loudness ON, c'est la ligne 22.

Modifié par ebtjjn
modif

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu peux essayer de supprimer la variable, puis tu retournes dans le VD et un petit click sur la disquette pour enregistrer afin de relancer la création de la variable.


Envoyé de mon iPhone en utilisant Tapatalk

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

C'te star krikroff:13::13:!!!!!! 

J'ai pas eu le temps de fermer l'ordi j'avais la réponse... lol !! bon bein je continue alors...

 

Et :

M-E-R-C-I !!!

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Il semblerait que le VD de notre @Krikroff en mode STREAM ne fonctionne pas en mode ajout à liste de lecture. Si la lecture d'un MP3 n'est pas terminé, la demande de lecture d'un autre MP3 n'est pas pris en compte.

 

Savez-vous s'il est possible de vérifier si la lecture du MP3 précédent n'est pas terminé.

 

Attention, il faut également prévoir le cas où de la musique est en cours d'écoute.

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me suis permis :13:d'apporter quelques petites modifications à la fonction _x qui permet de piloter le VD depuis n'importe quelle scène où VD, pour une utilisation simplifiée :

 

local _x ={root="x_sonos_object",_f=fibaro,sonos=function(b,n)local t,f={},b:load() for i,j in pairs(f)do if j.zpStatus then if n==j.zpStatus.zoneName then return tostring(i) end end end end,load=function(b)local c=b._f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else b._f:debug("Unable to process data, check variable")end else b._f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;b._f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end,btn=function(b,i,n)local c,r=0,api.get("/devices/"..tostring(i))["properties"]["rows"] local x=#r for a=1,x do local y=#r[a].elements for b=1,y do c=c+1 if n==r[a].elements[b].name then return c end end end b._f:debug("Unable to locate button "..n..", check virtual device "..i);return nil end,call=function(b,n,w,x,y,z)local i=b:sonos(n);if w:match("//") then b:set(i,{stream={stream=w,source=x,duration=y,volume=z}})else b:set(i,{tts={message=w,language=x,duration=y,volume=z}}) end b._f:call(tonumber(i),"pressButton",b:btn(i,"Process"))end}

 

La fonction à utiliser est :

--Pour faire un TTS :

	_x:call("Nom du Sonos", message, [language], [duration], [volume])

--Pour faire un stream :

	_x:call("Nom du Sonos", url du stream, [source], [duration], [volume])

Le nom du Sonos à indiquer est le nom du 'vrai' Sonos, pas le nom du VD Sonos Remote.

Partager ce message


Lien à poster
Partager sur d’autres sites

Toujours personne qui serait comment avoir une request pour lancer une Entrée source locale?

Partager ce message


Lien à poster
Partager sur d’autres sites

Mille merci

 

Mais avec le code

 

Citation

---######################
--mHome------------
--------------------------
local ip='192.168.1.18'
---Get Name
sonos = Net.FHttp(ip,1400)
response=sonos:GET('/status/zp')
tensonos=tostring(response:match("<LocalUID>(.+)</LocalUID>")or " ")
fibaro:debug(tensonos)
fibaro:sleep(100)
---*******************************
--         conver to Line In
--******************************
tcpSocket = Net.FTcpSocket(ip, 1400)
payload = [[POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONTENT-LENGTH: 382
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>x-rincon-stream:]]..tensonos..[[</CurrentURI><CurrentURIMetaData></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>0x0D0x0A0x0D0x0A]]
bytes, errorcode = tcpSocket:write(payload)
fibaro:debug(bytes)
tcpSocket:disconnect()
---*******************************
--          Play Line IN
--******************************
fibaro:sleep(100)
tcpSocket = Net.FTcpSocket(ip, 1400)
payload = [[POST /MediaRenderer/AVTransport/Control HTTP/1.1
Content-Length: 266
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>0x0D0x0A0x0D0x0A]]
bytes, errorcode = tcpSocket:write(payload)
fibaro:debug(bytes)

 

je tombe sur "Audio Component" au lieu de " Entrée source locale "

 

ce qui doit etre l'entrée Jack de l'enceinte elle même au lieu de celle d'un autre Play 5 (pour moi celui qui est a coté de la tv de mon salon d'ou je veux récupérer le son)

 

Rappel: Mon but est d'avoir une commande pour ecouter le son de ma TV qui est reliée à un play5 dans ma salle de bain sur un autre play5

 

Quelqu'un aurait une idée ?

Modifié par SimonT

Partager ce message


Lien à poster
Partager sur d’autres sites

@SimonT C'est-à-dire (version application Sonos) d'ajouter le Play:5 de ta salle de bains au groupe du Play:5 relié à la TV ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Actuellement j'utilise ma tablette avec la l'appli sonos je vais sur la sonos de ma Salle de bain et je lance "Entrée ligne source local" et cela reprend le son de la sonos de mon salon qui et relier en jack IN sur ma Box TV

ce qui me permet d'écouter la TV dans la salle de bain

 

Donc ce que je voudrai c'est avoir un bouton virtuel sur ma HC2 pour lancer cette Entrée ligne source local (sans devoir aller moi même sur l'appli sonos)

Partager ce message


Lien à poster
Partager sur d’autres sites

slt a tous, 

bon je viens de me tapez les 46 pages de ce post...

 

g mal au crane lol, 

 

Merci a @Krikroff et les autres pour leurs travails c'est impressionnant.

 

rien a redire sur ce VD, mais sur sonos... 

 

est-ce que quelqu'un sais comment avoir spotify sur sonos sans l'abonnement premium? je ne comprend pas cette entourloupe. depuis mon tel sur des enceinte Bluetooth, depuis mon pc sur des HP, ou mon home cinéma, on a partout acces a la version gratuite avec ses restrictions (pub) mais pas sur sonos. si j'avais lu ca avant... enfin bref, je pense que ca avais besoin de sortir.

 

j'envisage même d'ouvrir le sonos play 1 pour y collé une entrée jack. 

mais heureusement, si j'ai bien compris, grace a ce VD je vais pouvoir acceder a mes playliste spotify sur les sonos

 

merci encore

Partager ce message


Lien à poster
Partager sur d’autres sites

toujours personne qui aurait une idée pour lancer en VD "Entrée ligne source local" (d'un play 5 sur un autre play 5) ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir à tous,

 

Pour ma part j'utilise un simple VD pour lancer la source locale d'un Sonos Connect sur un Play1 de cette façon :

 

Créer un VD, port 1400 et renseigner l'IP du sonos sur le quel on veut écouter la source, ajoutez deux boutons, puis en restant en mode Chaîne ( avec le "vu" dans en attente de la réponse du périphérique ) je mets ceci :

 

POST /MediaRenderer/AVTransport/Control HTTP/1.1
Content-Length: 350
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"

<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>x-rincon-stream:RINCON_B8E93790C16601400</CurrentURI><CurrentURIMetaData/></u:SetAVTransportURI></s:Body></s:Envelope>0x0D0x0A0x0D0x0A

 

Il faut juste changer le RINCON_B8E93790C16601400 par le votre, c'est à dire le RINCON de votre source qui a l'entrée aux

Pour le trouver : IPdevotresonos/support/review  dans un navigateur

 

J'avoue que je n'ai pas cherché comment rajouter cette fonction dans ce superbe VD, merci @Krikroff

 

A oui, j'oublais, le code pour lancer la lecture sur un autre bouton :

 

POST /MediaRenderer/AVTransport/Control HTTP/1.1
Content-Length: 266
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>0x0D0x0A0x0D0x0A

 

Modifié par jeanp

Partager ce message


Lien à poster
Partager sur d’autres sites

Mille merci Jeanp c'est magic ca marche nikel

 

Il me manque juste un truc maintenant pour tous controler avec mon google home

Quelqu'un serait comment lancer un dossier dans la bibliothèque musicale directement?

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout d'abord merci beaucoup pour ce que tu as fais, du très bon travail !

 

Cependant, je viens d'installer le VD et il ne fonctionne pas.

J'ai lancé le mode débugage mais je pense que tu l'as fais avec toolkit parce-qu'il affiche des erreurs dans ce sens.

J'ai bien mis l'adresse IP et le port 1400 mais aucunes commandes ne passent. Peut-être à cause de la nouvelle version qui vient de sortir ?

 

Merci pour votre aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

détruit la variable (xobject... de mémoire), SANS appuyer sur le bouton tave du panneau des variables.

puis fait un save d'une des instances du VD

Partager ce message


Lien à poster
Partager sur d’autres sites

×