Aller au contenu
Krikroff

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

Recommended Posts

@pepite vous devez ajouter une commande fibaro:sleep(). J'ai eu le même problème, "PLAY" est effectué avant d'ajouter "PLAYLIST"

--stop();
--fibaro:sleep(1000);
sdel();
fibaro:sleep(2000)
spotify_list('xxxxxx');
--playFile(FileVol);
fibaro:sleep(3000);
play();  --play(NN) - play NN seconds

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@drboss

Thanks i will try this. but this will resolve the 30 secs of playing before stop ?

Partager ce message


Lien à poster
Partager sur d’autres sites

For me yes, resolve stop 30sec after start play new playlist. I didn't never problem this problem with play / stop / pause list played before.

When I have pure connection with one of my sonos and process inicialized by spotify_list take long time and no return state I added sseek()

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@drboss

 I will do like you and i will add sseek() after play(). Thank you for the help.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 25/04/2017 à 10:44, Lazer a dit :

Ah non, justement, c'est tout l'inverse ce que je dis : le multiroom ne peut pas, et ne doit pas dépendre, QUE de l'ampli.

Il vaut mieux avec des éléments séparés, je ne suis pas fan des gros amplis à 2k€ qui savent gérer 4 zones, parce que problème de câblage dans toute la maison, l'ampli doit être alimenté pour écouter juste un peu de zik dans la SDB, donc ça consomme un max, l'ampli est énorme et ne rentre pas dans la plupart des meubles de salon, etc

Par contre, l'ampli EN PLUS, en complément d'une installation multiroom, et qui s'intègre nativement dedans, là ça commence à être sympa.

De ce coté là, Yamaha est le plus avancé grâce à leur large catalogue, Denon n'est pas en reste avec une gamme qui commence à s'étoffer (les enceintes HEOS), mais Onkyo est largement à la traine (je crois qu'ils ont prévu de sortir des enceintes aussi, donc ils s'y mettent).

Salut @Lazer, je possède un équipement complet en multiroom HEOS de DENON mais le plugin intégré par Fibaro n'est pas top top. Saurais-tu si quelqu'un aurait développé un VD qui permette de gérer plus précisément chaque enceinte et leur contenu à l'instar du VD SONOS de @Krikroff ?

 

J'aimerais tellement être à votre niveau et pour le développer moi même.

 

Merci

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Non désolé, je ne sais pas... j'ai vu des discussions sur le sujet sur le forum, mais je crois que personne n'a publié de VD utilisable.

 

Perso j'ai fait le choix Yamaha Musccast, avec tuto complet sur le forum..... mais l'API n'a rien à voir (d'ailleurs je ne sais même pas à quoi ressemble l'API Heos....)

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour ta réponse.. je vais attendre qu'une bonne âme se dévoue.

Alors si toi tu ne sais pas à quoi ressemble l'API d'HEOS... qui le pourrait !!

Bonne soirée et bon Week End et bon apéro :icon1010:

Partager ce message


Lien à poster
Partager sur d’autres sites

 Je l'ai supprimé puis ré-importé et rien.

En fait je ne peux même pas piloter le Sonos, l'adresse IP est pourtant bonne, c'est toujours le port 1400?

C'est depuis que mes Sonos sont passés en v9.2 il y a quelques semaine et depuis, plus rien.

Le VD SONOS Play stream de @Krikroff (pour lire les Mp3) ne fonctionne plus non plus.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did

Moi avec Sonos, je fais toutes les mises à jour sans me poser de questions. Et ca fonctionne encore.

 

As tu un retour si tu mets cela dans un navigateur ?

http://IPSONOS:1400/status

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

 Je viens de l'installer sur ma seconde box (en v4.520), renseigner l'adresse IP et le port 1400 et créer la variable non prédéfinie et ça ne marche pas non plus.

J'ai aussi essayer l'IP d'une autre Sonos mais en vain.

La variable "x_sonos_object ", on la laisse à zéro ou il faut lui donner une valeur?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did, mes Sonos sont tous à jour et je n'ai pas de problème. 

 

Tu as des paires ? Si oui tu peux essayer peut-être avec l' IP de l'autre Player...

Partager ce message


Lien à poster
Partager sur d’autres sites

 Salut @Krikroff et merci pour ta réponse.

Le VD que j'utilise sur ma box principale (en v4.180) pilote une seule Play:1 et l'autre que j'ai installé sur ma nouvelle HC2 fraichement mise à jour pilote une paire de Play:5 (j'ai bien sur essayé les deux adresses IP).

La variable "x_sonos_object ", on la laisse à zéro ou il faut lui donner une valeur?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Yannick pour les HEOS, je suis en train de regarder. Je viens de refaire le VD pour mon ampli, j'attaque maintenant la partie HEOS...  faudra juste être patient, je ne serai pas de retour avant fin décembre

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 24/11/2018 à 17:58, Cardane a dit :

@Yannick pour les HEOS, je suis en train de regarder. Je viens de refaire le VD pour mon ampli, j'attaque maintenant la partie HEOS...  faudra juste être patient, je ne serai pas de retour avant fin décembre

Salut @Cardanenickel. Le VD pour quel ampli dis-moi ? tu l'as posté quelque part ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did Bizarre quand même ce qui t'arrive. Mes sonos sont aussi à jour, et pas de souci non plus.

Partager ce message


Lien à poster
Partager sur d’autres sites

 J'ai du progrès maintenant, l'affichage du VD se met à jour quand je modifie le volume ou lance une radio depuis un Sonos Controler mais toujours rien dans le sens HC2 vers Sonos.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Yannick non, je n'ai rien posté, en fait c'est le VD de @sebcbien que j'ai adapté pour mon ampli. A l'origine c'est un VD pour ampli Marantz, mais Marantz et Denon c'est à peu près la même chose. 

j'ai donc adapté son VD pour mon ampli Denon, mais uniquement pour la partie home cinema, pas pour la partie HEOS. Ca de devrait pas être trop difficile, just des commandes différentes et un port différent. Je vais y travailler dès que possible, mais pas avant début janvier

 

Modifié par Cardane
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool merci et pour la liste des fonctions ? pour un AVR-X4300H tu sais où les trouver ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 24/11/2018 à 01:09, Did a dit :

La variable "x_sonos_object ", on la laisse à zéro ou il faut lui donner une valeur?

tous les soucis rencontrés jusqu'à présent sont liés à cette vairable.

Donc il faut la supprimer.

Et puis resauver le VD, qui créera automatiquement la variable

Partager ce message


Lien à poster
Partager sur d’autres sites

 Je n'ai rien compris, j'ai supprimé la variable puis sauvegarder le VD et la variable "x_sonos_object " s'est créée toute seule. Le Sonos Remote refonctionne, youpi et  merci @jojo! :bravo:

J'avais pourtant déjà fait ça mais j'avais dû la créer à la main en v4.180, et sans succès.

Donc la partie TTS refonctionne aussi mais pas encore la lecture d'un mp3, le mp3 sélectionné dans le VD ne se lance pas sur le Sonos.

Je ne sais plus si ce VD a un nom (SONOS Play stream) mais ce sont ces lignes:

------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- SONOS Play stream...
-- Copyright © 2014 Jean-Christophe Vermandé
-- Appel interphone
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
 
selfId = fibaro:getSelfId();    
ip = fibaro:get(selfId, 'IPAddress');
port = fibaro:get(selfId, 'TCPPort') or 1400;
currentTransportState = "";
lastTransportState = "";
currentVolume = 0;
lastVolume = 0;
ttsVolumeIsDifferent = false;
 
urlencode = function(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n");
    str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end);
    str = string.gsub (str, " ", "+");
  end
  return str;
end
 
createRequestBody = function(action, schema, data)
  return string.format("<u:%s xmlns:u=\"%s\">%s</u:%s>", action, schema, data, action);
end
 
reponseCallback = function(fnc, args)
  if (fnc == nil) then
    return nil;
  end
  return fnc(args);
end
 
createSocket = function()
    -- Check IP and PORT before
  if (ip == nil or port == nil) then
    fibaro:debug("You must configure IPAddress and TCPPort first");
    return;
  end
  local socket;
  local status, err = pcall(function()
      socket = Net.FTcpSocket(ip, port);
      socket:setReadTimeout(1000);
    end);  
  if (status ~= nil and status ~= true) then
    fibaro:debug("socket status: " .. tostring(status or ''));
  end  
  if (err ~= nil) then
    fibaro:debug("socket err: " .. tostring(err or ''));
    return;
  end
  return socket;
end
 
disposeSocket = function(socket)
  if (socket ~= nil) then
    socket:disconnect();
    socket = nil;
    return true;
  end
  return false;
end
 
sendSoapMessage = function(url, service, action, args, callback, retry)
 
  local socket = createSocket();
  if (socket == nil) then
    return;
  end
  retry = retry or 0
  -- prepare data
  local url = "POST " .. url .. " HTTP/1.1";
  local soapaction = "SOAPACTION: \"" .. service .. "#" .. action.name .. "\"";
  local body = createRequestBody(action.name, action.service, tostring(args or ""));
  local envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body>" .. body .. "</s:Body></s:Envelope>";
  local ctl = "Content-Length: " .. string.len(envelope);
  local payload = url .. "\r\n" .. ctl .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope;
  -- write data
  local bytes, errorcode = socket:write(payload);
  if (errorcode == 0) then
    local state, errorcode = socket:read();
    if (errorcode == 0) then
      if (string.len(state or "") > 0) then
        -- callback
        if (callback ~= nil) then
          reponseCallback(callback, state);
        end
        -- dispose ...
        disposeSocket(socket);
        return true;
      else
        fibaro:debug("Error: Invalid response. response length: " .. string.len(state or ""));
      end
    else      
      if (retry < 5) then
        fibaro:debug("retry #"..retry.." action: " .. action.name);
        return sendSoapMessage(url, service, action, args, callback, (retry + 1));
      else
        fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
      end
    end
  elseif (errorcode == 2) then
    fibaro:debug("Error: You must check your IP and PORT settings.");
  else
    if (retry < 5) then
      fibaro:debug("retry #"..retry.." action: " .. action.name);
      return sendSoapMessage(url, service, action, args, callback, (retry + 1));
    else
      fibaro:debug("Error: Code returned "..tostring(errorcode or ""));
    end
  end  
  -- dispose ...
  disposeSocket(socket);
  -- default response
  return false;
end
 
-- stop = function()
--   return sendSoapMessage(
--     -- control url
--     "/MediaRenderer/AVTransport/Control",
--     -- service type
--     "urn:schemas-upnp-org:service:AVTransport:1",
--     -- action
--     { name = "Stop", service = "urn:schemas-upnp-org:service:AVTransport:1" },
--     -- soap body data (options)
--     "<InstanceID>0</InstanceID><Speed>1</Speed>",
--       -- callback (options)
--     function(response)
--       fibaro:debug("stop sent");
--     end);    
-- end
 
unMute = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetMute", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute>",
      -- callback (options)
    function(response)
      fibaro:debug("unMute sent");
    end);
end
 
play = function(duration)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "Play", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Speed>1</Speed>",
      -- callback (options)
    function(response)   
      if (duration ~= nil) then
        fibaro:debug("play sent for " .. duration .. " seconds");
        fibaro:sleep(duration);
        stop();
      else
        fibaro:debug("play sent");
        local n = 0;
        currentTransportState = "TRANSITIONING";
        while (currentTransportState == "TRANSITIONING") do
          if (n > 10) then break end;
          getTransportState();
          fibaro:debug(currentTransportState);
          fibaro:sleep(5000);
          n = n + 1;
        end        
        local i = 0;
        currentTransportState = "PLAYING";
        while (currentTransportState == "PLAYING") do
          if (i > 10) then break end;
          getTransportState();
          fibaro:debug(currentTransportState);
          fibaro:sleep(2000);
          i = i + 1;
        end
        fibaro:sleep(1000);
        stop();
      end
      -- update volume with value before tts if different
      if (ttsVolumeIsDifferent == true) then
        setVolume(lastVolume);
        ttsVolumeIsDifferent = false;
      end
    end);    
end
 
setVolume = function(value)
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:RenderingControl:1",
    -- action
    { name = "SetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" .. tostring(value) .. "</DesiredVolume>",
    -- callback (options)
    function(response)      
      fibaro:debug("Volume set: " .. value);
    end);
end
 
getVolume = function()
  fibaro:log("Get volume, please wait...");
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/RenderingControl/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" },
    -- soap body data (options)    
    "<InstanceID>0</InstanceID><Channel>Master</Channel>",
    -- callback (options)
    function(response)
      currentVolume = tonumber(response:match("<CurrentVolume>(.+)</CurrentVolume>") or 0);    
    end);
end
 
getTransportState = function()
  return sendSoapMessage(
    -- control url
    "/MediaRenderer/AVTransport/Control",
    -- service type
    "urn:schemas-upnp-org:service:AVTransport:1",
    -- action
    { name = "GetTransportInfo", service = "urn:schemas-upnp-org:service:AVTransport:1" },
    -- soap body data (options)
    "<InstanceID>0</InstanceID>",
    -- callback (options)
    function(response)      
      currentTransportState = response:match("<CurrentTransportState>(.+)</CurrentTransportState>") or "";
    end);
end
 
playFile= function(file, volume)
return sendSoapMessage(
-- control url
"/MediaRenderer/AVTransport/Control",
-- service type
"urn:schemas-upnp-org:service:AVTransport:1",
-- action
{ name = "SetAVTransportURI", service = "urn:schemas-upnp-org:service:AVTransport:1" },
-- soap body data (options)
"<InstanceID>0</InstanceID>,<CurrentURI>x-file-cifs:" .. file .. "</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>",
-- callback (options)
function(response)
-- retrieve current transport state
getTransportState();
lastTransportState = currentTransportState;
-- unmute before
unMute();
-- retrieve volume
getVolume();
lastVolume = currentVolume;
-- set tts volume if <> with current
if (volume ~= nil and volume ~= currentVolume) then
setVolume(volume);
ttsVolumeIsDifferent = true;
end
 
play();
 
end);
end

playFile("//DISKSTATION/home/Sons_mp3/zzÿ-Appel interphone.mp3", 40);

J'ai retapé l'adresse IP et le port 1400, refais le copier/coller et toujours rien, je continu mes recherches.

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 27/11/2018 à 15:15, Yannick a dit :

Cool merci et pour la liste des fonctions ? pour un AVR-X4300H tu sais où les trouver ?

tu en as déjà plein dans le xls attaché, ça devrait déjà convenir pour beaucoup de fonctions.

Sinon fais une recherche google avec des codes et ton numéro d'ampli, y'a peut être un fichier similaire.

 

2013 Marantz_AV_SR_NR_PROTOCOL_V07.xls

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à tous,

J'ai parcouru quasiment toutes les réponses de ce post pour trouver une éventuelle réponse à ma question, mais il semble que non.

J'utilise la fonction de streaming de fichier mp3, cela fonctionne parfaitement, mais je regrette cependant un certain délai.

J'ai pu voir qu'il était possible de mettre en cache le ou les fichier(s) en question afin de pouvoir les lire quasiment instantanément.

J'ai un NAS Synology et j'aimerais mettre cela en place, mais je ne vois pas comment. Est-il possible de me mettre sur la voie svp?

Merci d'avance :)

Partager ce message


Lien à poster
Partager sur d’autres sites

×