Страница 1 из 3

"Типа" мультирум

Добавлено: Пт дек 22, 2017 6:43 pm
shefus
Всем привет!
Начальные данные:
Есть несколько комнат (зон), ну например 5. В каждой зоне встроенная в потолок колонка. 5 усилков (с функциями StandBy и Mute) управляются по SPI с Rasspbery PI. Rasspbery PI принимает от MD команду по TCP в виде Room N и включает усилок для зоны N. На этом уровне все реализовано и работает.
Сценарий в MD:

Код: Выделить всё

$fp = fsockopen("192.168.5.106", 2000, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "Room 1";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

say ('Слушаюсь и повинуюсь, мой господин!',2);

sleep (20);

$fp = fsockopen("192.168.5.106", 2000, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "Room 0";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
Соответственно воспроизводит в комнате 1 ("Room 0" - отключает все УНЧ).
А вот далее.... в PHP не силен, и структуру MD знаю не очень. Хотелось бы сделать всё красиво.
Вариант 1:
Модифицировать функцию say() добавив необязательный параметр "номер зоны" (не уверен смогу ли...). В этом случае все что уже есть с say() будет работать. Где лежит say()? И можно ли как то узнать, что воспроизведение закончилось? Вариант выше в этом виде не будет, т.к. sleep совсем не то. Если на стороне MD узнать о конце воспроизведения фразы нельзя, выключение УНЧ перенесу на Raspberry.
Вариант 2:
Обернуть код (без sleep и выключения) в функцию SayRoom(). Куда её положить и что сделать, чтобы MD её "видел"?
Вариант 3:
Объект SayRoom с методом: код (без sleep и выключения) и свойствами состояния включенных УНЧ (зон).

Что скажите?

Re: "Типа" мильтирум

Добавлено: Пт дек 22, 2017 8:14 pm
Chainik
У вас, видимо, другая идеология построения мультирума, но надеюсь, вот эту ветку вы видели
https://majordomo.smartliving.ru/forum/ ... =18&t=2194

Re: "Типа" мильтирум

Добавлено: Пт дек 22, 2017 8:39 pm
shefus
Ну .... у меня не совсем мультирум в классическом понимании. Поэтому в теме - "Типа" мультирум. Точнее в дальнейшем возможно и буду реализовывать классический вариант. На данный момент стоит задача управления 5-тью УНЧ. Т.е. перевода их из режима StandBy и обратно нужной зоны по команде MD.

У меня на самом деле планируется 8-10 зон. В варианте с звуковыми картами - это 8 каналов. Как я понимаю это 2 карты 5.1 . Т.к. MD запущен на Mini-PC Zotac, то это только USB карты. Это в перспективе, если возникнет потребность. И это не снимает вопрос управления УНЧ.

За ссылку на тему спасибо, смотрел её давно, но в свете новой задачи посмотрю ещё раз.

Re: "Типа" мультирум

Добавлено: Пт дек 22, 2017 9:39 pm
skysilver
shefus писал(а):Вариант 1
say() лежит в lib/common.class.php. Но модифицировать файлы ядра системы нежелательно, т.к. они затрутся при очередном обновлении.
Штатно узнать о конце воспроизведения на стороне МДМ нельзя. Можно попробовать как-то вычислять длительность mp3-файла, получаемого при синтезе речи.
shefus писал(а):Вариант 2
Создать свой файл в папке lib/
php-функции, прописанные в нем, будут доступны везде в МДМ.

Также могут пригодиться обработчики beforeSay и afterSay.

Re: "Типа" мультирум

Добавлено: Пт дек 22, 2017 10:54 pm
Vovix
Вариант 4:

Создаете скрипт - обертку say
т.е. например sayRoom
вызываете его:

Код: Выделить всё

runScript("sayRoom",array("msg"=>"что говорим", "room"=>1, "msgLev"=>1 )); 
в нем все обрабатываете!

Вариант 5:

Использовать в настройках поля: After SAY (code): и Before SAY (code):

Re: "Типа" мультирум

Добавлено: Сб дек 23, 2017 2:08 pm
shefus
Всем спасибо!

Сделал по варианту отдельной функцией SayRoom. Всё работает!
skysilver писал(а): Но модифицировать файлы ядра системы нежелательно, т.к. они затрутся при очередном обновлении.
Спасибо за замечание - сам сразу не допёр.
skysilver писал(а):Штатно узнать о конце воспроизведения на стороне МДМ нельзя.
Сделал аппаратно+Rasspberry - по наличию/отсутствию аудио сигнала (с задержкой).

Остальные варианты оставил на заметке - возможно пригодятся.

Re: "Типа" мультирум

Добавлено: Ср фев 14, 2018 1:03 pm
Alex77
shefus писал(а):Всем привет!
Начальные данные:
Есть несколько комнат (зон), ну например 5. В каждой зоне встроенная в потолок колонка. 5 усилков (с функциями StandBy и Mute) управляются по SPI с Rasspbery PI. Rasspbery PI принимает от MD команду по TCP в виде Room N и включает усилок для зоны N. На этом уровне все реализовано и работает.
Будьте добрый, для чайников укажите, что за 5 усилков и как все это подключить? у меня MD на малинке.

Re: "Типа" мультирум

Добавлено: Ср фев 14, 2018 2:55 pm
evilviva
от еще интересное решение
https://github.com/skalavala/Multi-Room ... o-for-Home

Re: "Типа" мультирум

Добавлено: Ср фев 14, 2018 4:15 pm
tarasfrompir
Огого эт сколько ж надо РПИ,что бы понаставлять в 10 местах????
Наверно не дешевле будет всяких Алексо...

Re: "Типа" мультирум

Добавлено: Ср фев 14, 2018 5:20 pm
Alex77
Прошу помощи. Как я понял самое дешевое и качественное решение - это купить малинку и к ней goo.gl/GsaF5e в моем случае 4 комнаты - значит в каждую комнату по такому модулю. на эти малинки нужно установить клиентскую часть MPD на малинку на которой стоит MD ставим серверную часть MPD . У меня вопрос к понимающим, какая выходная мощность goo.gl/GsaF5e как я понимаю она очень маленькая и нужно к этому всему докупать goo.gl/88R2vj (не понимаю как подключить усилитель - для чего там выходные пины?)
Самый главный вопрос - как из МД управлять каналами и их громкостью? кто в теме - прошу помочь. Спасибо.