Корзина  (пустая) 0 руб.
Корзина  (пустая) 0 руб.
Корзина  (пустая) 0 руб.
Корзина  (пустая) 0 руб.

+7 495 204-27-80

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: z-wave и звуковые колонки

z-wave и звуковые колонки 10 Май 2015 21:22 #12222

  • homedist
  • homedist аватар
  • Вне сайта
  • Завсегдатай
  • Сообщений: 171
  • Спасибо получено: 19
  • Репутация: 2
По поводу PC надо уточнять у более опытных пользователей, тут не подскажу, у меня vera
Из того что знаю:
Колонка может существовать обособленно, без подключения к смартфону и тд, работает как интернет радио например, нужен лишь интернет соотвественно
Если есть несколько колонок, то их можно объединить в одну систему, например колонка в каждой комнате может играть одно и тоже
Думаю этим функционал не ограничивается, особо колонку не изучал
Vera Lite UI7+Remotec zxt-120 + Sonos Play 1 + Fibaro FGMS-001 + Logitech Ultimate Hub + Netatmo Weather Station

z-wave и звуковые колонки 11 Май 2015 19:13 #12224

  • TazMan
  • TazMan аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 13
  • Репутация: 0
а кто нибудь пробовал fibaro + sonos + русский язык ( кириллица) сделать ?
Последнее редактирование: 11 Май 2015 19:14 от TazMan.

z-wave и звуковые колонки 11 Май 2015 21:23 #12226

  • Acute
  • Acute аватар
  • Вне сайта
  • Администратор
  • Сообщений: 3104
  • Спасибо получено: 459
  • Репутация: 70
vit34 пишет:
А в чем принципиальное отличие в плане функционала?

Отличие в том, что Sonos это толстый бренд, дающий и приложения для всех платформ, и поддержку с обновлениями, и высокое качество звука, и кучу плюшек в виде мультирумов, радио, Text-to-Speech, и т.д. Ну а приведенная колонка от Sony может и скрестится по DLNA с той же Vera, но придется с большой вероятностью протопать путь самурая по скрещиванию.
Группа форума в Telegram t.me/zwaveforum

z-wave и звуковые колонки 28 Июнь 2015 16:15 #12661

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
Похоже, два Play:1 звучат лучше, чем один Play:5. :)

z-wave и звуковые колонки 28 Июнь 2015 16:28 #12662

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
У меня Sonos Play:1, Play:3, и Play:5 связаны с контроллером Smartthings и говорят погоду. Настойка через приложение Smartthings. Когда я просыпаюсь и в комнате обнаружено движение (датчик), Sonos проговаривает варианты прогнозов погоды (как настроишь - сейчас, сегодня, позже, завтра). Есть возможность настроить при событии (движение, дверь открыта, кнопка нажата, и пр.) или по времени/режиму, и пр.
Спасибо сказали: allmoney.ws

z-wave и звуковые колонки 28 Июнь 2015 16:39 #12663

  • Acute
  • Acute аватар
  • Вне сайта
  • Администратор
  • Сообщений: 3104
  • Спасибо получено: 459
  • Репутация: 70
Рассказали бы чем так крут Smartthings, лучше в отдельной теме. А то мне один пользователь говорил, то этот контроллер рвет всех вместе взятых (Vera, Fibaro), а в чем конкретно преимущество я так и не понял). Вот возможно второй живой пользователь ).
Группа форума в Telegram t.me/zwaveforum
Спасибо сказали: allmoney.ws

z-wave и звуковые колонки 28 Июнь 2015 17:16 #12665

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
Трудно сказать лучше или хуже, т.к. у меня не было других контроллеров. Я сделал свое "домашнее задание" и решил выбрать Smartthings. Дешево и все работает (z-wave, zigbee, Sonos, Dropcam, Philips Hue). Где-то читал, что у Vera серьезные проблемы с безопасностью. Знакомый занимается установкой - сказал, что Vera больше не будет устанавливать. Fibaro, похоже намного дороже, хоть и выглядит лучше. Но сколько раз вы смотрели на свой контроллер после его установки? :)
Samsung купил Smartthings. Обещали оставить все "открытой платформой", чтоб все другие могли интегрироваться. Теперь туда вольют кучу денег и сделают, надеюсь, что-то интересное.
Кстати, многие пишут, что Sonos это очень дорого и не знают, что можно покупать намного дешевле розничной цены - есть ликвидационные компании, которые продают с большой скидкой "open box" Sonos юниты, которые были куплены и возвращены (в течение месяца) назад в магазин. Открытая коробка уже не выглядит привлекательно, пока ее хранят она обычно повреждается, и ее убирают со складов таких сетей как BestBuy. Я так все свои Sonos-ы купил.

z-wave и звуковые колонки 28 Июнь 2015 17:17 #12666

  • allmoney.ws
  • allmoney.ws аватар
  • Вне сайта
  • Гуру
  • Сообщений: 101
  • Спасибо получено: 8
  • Репутация: 0
SmartStuff пишет:
с контроллером Smartthings
Он с Z-Wave EU и RU частотами совместим?
SmartStuff пишет:
Когда я просыпаюсь и в комнате обнаружено движение (датчик), Sonos проговаривает варианты прогнозов погоды
А как контроллер понимает во сне вы ворочаетесь или проснулись?
SmartStuff пишет:
Sonos проговаривает
На русском? Какая TTS используется? Редактирование текста есть?

z-wave и звуковые колонки 28 Июнь 2015 17:19 #12667

  • allmoney.ws
  • allmoney.ws аватар
  • Вне сайта
  • Гуру
  • Сообщений: 101
  • Спасибо получено: 8
  • Репутация: 0
SmartStuff пишет:
Я так все свои Sonos-ы купил
На сайте бестбая? Скольки скидка за open box?

z-wave и звуковые колонки 28 Июнь 2015 17:27 #12668

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
Нет. BestBuy сбагривает open box из тысяч своих магазинов нескольким компаниям оптом. Те делают свою наценку и продают чуть дороже. Я покупал Play:1 за $160, Play:3 за $190, и Play:5 за $300. Я живу в Канде, поэтому цены в канадских долларах. US$1 сейчас где-то CAD$1.30. Если покупаешь наличными, то и налог не нужно платить, как в магазине.

z-wave и звуковые колонки 28 Июнь 2015 17:43 #12669

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
На английском. Меня это устраивает. Я не знаю что такое ТТС. :) Текст впечатывается в строку сообщения, которое нужно. Я обычно печатаю что-то типа "Attention: water leak is detected in the upstairs bathroom". Добавляю "Attention" в начале сообщения, чтоб не пропустить основное сообщение, когда музыка играет.

z-wave и звуковые колонки 28 Июнь 2015 17:47 #12670

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
Я обычно просыпаюсь с 6:30 до 7:15, поэтому указываю в приложении, что прогноз погоды нужно проговаривать только один раз в день в любом режиме (все дома, ночь, один дома, ...) только в это время.
Последнее редактирование: 28 Июнь 2015 17:54 от SmartStuff.

z-wave и звуковые колонки 28 Июнь 2015 17:50 #12671

  • SmartStuff
  • SmartStuff аватар
  • Вне сайта
  • Давно я тут
  • Сообщений: 50
  • Спасибо получено: 7
  • Репутация: 0
На счет частот я не в курсе. У нас одна US частота здесь - 908.42MHZ.

z-wave и звуковые колонки 28 Июль 2015 22:48 #12951

  • novos
  • novos аватар
  • Вне сайта
  • Гуру
  • HC2
  • Сообщений: 84
  • Спасибо получено: 4
  • Репутация: 0
Добрый вечер, перестал вдруг работать TTS от гугла :(

<CurrentURI>x-rincon-mp3radio://translate.google.com/translate_tts?tl=".. lng .. "&a" .. "mp;q=" .. urlencode(message) .. "</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>",

Не производит речь, попробовал зайти напрямую в браузере так он запросил капчу возможно ввели ее недавно. И так как сонос много говорил видимо она срабатывает.

Подскажите пожалуйста как обойти? И еще вопрос как задать в коде Lua чтоб SONOS производил файл по ссылке скажем site.com/file.mp3 ?

Пробую вставить между <CurrentURI>x-rincon-mp3radio: вместо этого не помогает. Как должен быть путь подскажите верный? Вот мой код с TTS работал раньше на ура. Как сделать просто при вызове чтоб он кушал какойто файл с веба производил? Подскажите пожалуйста. P.S Смогу записать туже речь в файле mp3 и дать ему ссылку прямую чтоб не обращаться к гуглу с их защитами и капчами.
------------------------------------------------------------------------------------------- 
------------------------------------------------------------------------------------------- 
-- SONOS Text To Speech (TTS) - Give voice to your HC2 with SONOS wireless speakers 
-- Version 0.0.4 pre-release 
-- Copyright © 2014 Jean-Christophe Vermandé 
------------------------------------------------------------------------------------------- 
------------------------------------------------------------------------------------------- 
 
selfId = fibaro:getSelfId();    
ip = fibaro:get(selfId, 'IPAddress'); 
port = fibaro:get(selfId, 'TCPPort'); 
currentTransportState = ""; 
lastTransportState = ""; 
currentVolume = 1; 
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 
 
playTTS = function(lng, message, duration, 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-rincon-mp3radio://translate.google.com/translate_tts?tl=".. lng .. "&a" .. "mp;q=" .. urlencode(message) .. "</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 tts 
      fibaro:debug("tts: " .. message); 
      if (duration ~= nil) then 
        play(duration); 
      else 
        play(); 
      end 
    end);  
end 
 
playTTS("en", "Attention, Attention, No Power in House, Enabled power supply", nil, 40); 

z-wave и звуковые колонки 30 Июль 2015 22:18 #13000

  • homedist
  • homedist аватар
  • Вне сайта
  • Завсегдатай
  • Сообщений: 171
  • Спасибо получено: 19
  • Репутация: 2
Такая же проблема, Сонос перестал говоритьnovos пишет:
Добрый вечер, перестал вдруг работать TTS от гугла :(

<CurrentURI>x-rincon-mp3radio://translate.google.com/translate_tts?tl=".. lng .. "&a" .. "mp;q=" .. urlencode(message) .. "</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>",

Не производит речь, попробовал зайти напрямую в браузере так он запросил капчу возможно ввели ее недавно. И так как сонос много говорил видимо она срабатывает.

Подскажите пожалуйста как обойти? И еще вопрос как задать в коде Lua чтоб SONOS производил файл по ссылке скажем site.com/file.mp3 ?

Пробую вставить между <CurrentURI>x-rincon-mp3radio: вместо этого не помогает. Как должен быть путь подскажите верный? Вот мой код с TTS работал раньше на ура. Как сделать просто при вызове чтоб он кушал какойто файл с веба производил? Подскажите пожалуйста. P.S Смогу записать туже речь в файле mp3 и дать ему ссылку прямую чтоб не обращаться к гуглу с их защитами и капчами.
------------------------------------------------------------------------------------------- 
------------------------------------------------------------------------------------------- 
-- SONOS Text To Speech (TTS) - Give voice to your HC2 with SONOS wireless speakers 
-- Version 0.0.4 pre-release 
-- Copyright © 2014 Jean-Christophe Vermandé 
------------------------------------------------------------------------------------------- 
------------------------------------------------------------------------------------------- 
 
selfId = fibaro:getSelfId();    
ip = fibaro:get(selfId, 'IPAddress'); 
port = fibaro:get(selfId, 'TCPPort'); 
currentTransportState = ""; 
lastTransportState = ""; 
currentVolume = 1; 
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 
 
playTTS = function(lng, message, duration, 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-rincon-mp3radio://translate.google.com/translate_tts?tl=".. lng .. "&a" .. "mp;q=" .. urlencode(message) .. "</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 tts 
      fibaro:debug("tts: " .. message); 
      if (duration ~= nil) then 
        play(duration); 
      else 
        play(); 
      end 
    end);  
end 
 
playTTS("en", "Attention, Attention, No Power in House, Enabled power supply", nil, 40); 
Vera Lite UI7+Remotec zxt-120 + Sonos Play 1 + Fibaro FGMS-001 + Logitech Ultimate Hub + Netatmo Weather Station

z-wave и звуковые колонки 30 Июль 2015 22:48 #13002

  • novos
  • novos аватар
  • Вне сайта
  • Гуру
  • HC2
  • Сообщений: 84
  • Спасибо получено: 4
  • Репутация: 0
Я думаю гугл ввел капчу на днях, пока проблему никто не поднимал. Я вижу один выход отказаться от гугла и производить заготовленные минусовки-речи с своего сервера.
Просто пока не знаю как вставить ссылку чтоб сонос ее производил. Возможно кто подскажет кусок кода. Спасибо

z-wave и звуковые колонки 30 Июль 2015 23:49 #13009

  • novos
  • novos аватар
  • Вне сайта
  • Гуру
  • HC2
  • Сообщений: 84
  • Спасибо получено: 4
  • Репутация: 0
Я решил проблему через свой сервер вот тут решение есть www.domotique-fibaro.fr/index.php/topic/5096-chien-électronique-à-base-de-sonos/ код можно взять только подставить свой NAS сервак playFile("//SERV_DOMESTIK/Music/Sons/chien_2.mp3", 30);

Главное работает и Гугл теперь не нужен с интернет подключением. Все по локалке работает, а звуки можно нарезать любые от гугла взять и через мозилу сохранить файл .mp3 голосовой.

Так что решение есть! B)

z-wave и звуковые колонки 01 Авг 2015 20:32 #13046

  • homedist
  • homedist аватар
  • Вне сайта
  • Завсегдатай
  • Сообщений: 171
  • Спасибо получено: 19
  • Репутация: 2
Google ввел капчу на свой ттвот решение другое

forum.micasaverde.com/index.php/topic,33223.0.html
TTS сервер от майкрософт
Сегодня буду тестить, отпишусь по результатам
Update
Настроил, всё работает прекрасно
Почему-то плагин задваивает слова и фразы, произносит 2 раза подряд одно и тоже , не понимаю, что можно сделать
Vera Lite UI7+Remotec zxt-120 + Sonos Play 1 + Fibaro FGMS-001 + Logitech Ultimate Hub + Netatmo Weather Station
Последнее редактирование: 01 Авг 2015 23:34 от homedist.

z-wave и звуковые колонки 27 Нояб 2015 12:04 #14381

  • datalink
  • datalink аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 8
  • Репутация: 0
novos пишет:
Я решил проблему через свой сервер вот тут решение есть www.domotique-fibaro.fr/index.php/topic/5096-chien-électronique-à-base-de-sonos/ код можно взять только подставить свой NAS сервак playFile("//SERV_DOMESTIK/Music/Sons/chien_2.mp3", 30);

Главное работает и Гугл теперь не нужен с интернет подключением. Все по локалке работает, а звуки можно нарезать любые от гугла взять и через мозилу сохранить файл .mp3 голосовой.

Так что решение есть! B)

не могли бы выложить это виртуальное устройство, если у вас оно работает ?
у меня выдает ошибку "attempt to call global 'stop' (a nil value)" и соответственно не хочет проигрывать фал.
спасибо.
Время создания страницы: 0.336 секунд