Aller au contenu

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


Krikroff

Messages recommandés

Coucou !!

J'en suis super content, j'avais un système Boose 3.2.1 ( 2 enceintes + caisson), le truc c'est que finalement je m'en servait peu car il fallait l'allumer, ou alors il le restait et cela consommait.

Avec la playbar, elle se branche en spdif, le son bascule automatiquement quand je me sers de la Tv. La consommation de la playbar est faible, et elle s'allume ou se mets en veille toute seul.

Très honnêtement, je trouvais le son meilleur sur mon système Boose, certes par habitude, mais je suis aussi Dj depuis 25 ans (àmes heures perdues!!!, et j'adore la qualité et le matos bien réglé)

Finalement sonos est très harmonieux et il m'a fallu quelques reglages entre le caisson et l'equaliseur.

Avant AirPlay, décalage énorme, avec une seule source

Sonsos, est beaucoup plus harmonieux, et intuitif àaffiner d'une piece a l'autre. D'ailleurs toutes les enceintes au même niveau est souvent le meilleur équilibre

Je l'ai fixé au mur .... Merde une platine de fixation a 50€ pour un entre axes de 74, 5 cm ....!! J'ai donc mis 2 chevilles au mur et ai utilisé leur trous "ogive" pour accrocher la belle

Au départ je pensai la poser sur le meuble en dessous, vu qu'il y a finalement que 2 ou 3 cables en tout, cela reste assez discret (elle n'est pas haute, et sous la TV, pour le coup je l'ai accroché au mur aussi)

Sur la TV, le hdmi freebox + alim tv

Sur la playbar, son alim et le câble spdif, connecte àla freebox.

Le tout étant à10 cm de hauteur de mon meuble TV qui a la hauteur de 50 cm

Suis sur iPad, si vous voulez j'essaierai de mettre une photo (cela dit rien d'extraordinaire)

Bonne journée àtous

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Je me permet de revenir vers vos lumières concernant la demande suivante :

je possède plus Enceinte SONOS et parfois elle ne sont plus groupées pour jouer la même musique partout

Y a t-il une solution , par exemple en rajoutant un bouton en Lua ou une scène pour regrouper toutes les pièces ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

pardon je n'ai pas répondu au bon post, c’était pour un autre forum MDR

ceci dit au lit il y a mieux àfaire que de regarder la tele lol

C'est clair si on va au lit c'est pour dormir.

Ah moins que les jeunes manquent d'imagination MDR

Envoyé de mon SM-G900F en utilisant Tapatalk

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Merci pour le lien, j'avais déjà  vu ce module virtuel mais ce qui m'intéresserai c'est de passer en argument le fichier à  lire...

et ne pas avoir 36 modules Sonos.

 

J'ai installé celui de krikroof mais le TTS rame qd même pas mal.... et c'est pour cela que je cherche a diffusé des message pré-enregistré.

n'y a t'il pas une fonction pour lancer la lecture d'un mp3 ?

 

D'avance merci

Lien vers le commentaire
Partager sur d’autres sites

Voici une petite modif du player (je j'ai déjà  partagée, je ne sais plus où) et qui joue donc un MP3. La modif permet de ne pas interrompre après environ 30s.

 

tu verras la variable locale (FilePath) avec le chemin d'accès vers le fichier mp3 à  jouer en début de script.

rien ne t’empêche  de mettre cette info dans une variable globale, et de la rappeler.

 
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- SONOS Play stream...
-- Copyright © 2014 Jean-Christophe Vermandé
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
----------------------------------
-- User Settings
----------------------------------

ip = "192.168.xxx.xxx"
port = 1400
FilePath = "//HPDS3615xs/music/iTunes/Sons/PoliceInformee.mp3"
FileVol = 100
-- le fichier mp3 doit être dans la bibliothèque Sonos
-- pour générer des MP3 : http://text2speech.us/#
PlayUnlimited = "Yes" -- si <> Yes, arrêt après 30s environ

----------------------------------
-- DO not change bellow this line
---------------------------------- 
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 and PlayUnlimited ~= "Yes") 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
 
-- en paramètres: le fichier, puis le volume...
playFile(FilePath, FileVol);
Lien vers le commentaire
Partager sur d’autres sites

avant de te chopper une remarque des admin, ne cite pas le message juste au dessus.

 

pour appeler un device en lua :

fibaro:call(<ID Device>, "pressButton", "<# bouton>")

 

tu retrouves l'ID du device dans l'url lorque tu es en mode edit du device.

Pour retrouver le n° du bouton, suis l'explication de Did dans la section "HC pour les nuls"

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

salut jojo,

depuis la mise a jour, j'ai un module qui ne fonctionne une fois sur 5 et avec un temps de latence d'au moins 15 sec...

lorsque j'appuie sur le bouton de la radio 1 par ex, elle démarre 15 sec plus tard et parfois cela ne fonctionne pas. Par contre, la commande stop reste réactive.

Plus haut dans ce tuto, il est dit qu'il faut modifier le code... mais comment?

merci

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...