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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Пт дек 22, 2017 6:43 pm

Всем привет!
Начальные данные:
Есть несколько комнат (зон), ну например 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 и выключения) и свойствами состояния включенных УНЧ (зон).

Что скажите?
Последний раз редактировалось shefus Пт дек 22, 2017 8:39 pm, всего редактировалось 1 раз.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт дек 22, 2017 8:14 pm

У вас, видимо, другая идеология построения мультирума, но надеюсь, вот эту ветку вы видели
https://majordomo.smartliving.ru/forum/ ... =18&t=2194
За это сообщение автора Chainik поблагодарил:
shefus (Сб дек 23, 2017 2:30 pm)
Рейтинг: 1.16%
shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Пт дек 22, 2017 8:39 pm

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

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

За ссылку на тему спасибо, смотрел её давно, но в свете новой задачи посмотрю ещё раз.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт дек 22, 2017 9:39 pm

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

Также могут пригодиться обработчики beforeSay и afterSay.
За это сообщение автора skysilver поблагодарил:
shefus (Сб дек 23, 2017 2:30 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

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

Сообщение Vovix » Пт дек 22, 2017 10:54 pm

Вариант 4:

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

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

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

Вариант 5:

Использовать в настройках поля: After SAY (code): и Before SAY (code):
За это сообщение автора Vovix поблагодарил:
shefus (Сб дек 23, 2017 2:30 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Сб дек 23, 2017 2:08 pm

Всем спасибо!

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

Остальные варианты оставил на заметке - возможно пригодятся.
Alex77
Сообщения: 215
Зарегистрирован: Вс мар 05, 2017 2:18 pm
Благодарил (а): 21 раз
Поблагодарили: 6 раз

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

Сообщение Alex77 » Ср фев 14, 2018 1:03 pm

shefus писал(а):Всем привет!
Начальные данные:
Есть несколько комнат (зон), ну например 5. В каждой зоне встроенная в потолок колонка. 5 усилков (с функциями StandBy и Mute) управляются по SPI с Rasspbery PI. Rasspbery PI принимает от MD команду по TCP в виде Room N и включает усилок для зоны N. На этом уровне все реализовано и работает.
Будьте добрый, для чайников укажите, что за 5 усилков и как все это подключить? у меня MD на малинке.
evilviva
Сообщения: 39
Зарегистрирован: Пт июл 28, 2017 9:54 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение evilviva » Ср фев 14, 2018 2:55 pm

от еще интересное решение
https://github.com/skalavala/Multi-Room ... o-for-Home
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Ср фев 14, 2018 4:15 pm

Огого эт сколько ж надо РПИ,что бы понаставлять в 10 местах????
Наверно не дешевле будет всяких Алексо...
Спасибо нам ПОМОЖЕТ..!
Alex77
Сообщения: 215
Зарегистрирован: Вс мар 05, 2017 2:18 pm
Благодарил (а): 21 раз
Поблагодарили: 6 раз

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

Сообщение Alex77 » Ср фев 14, 2018 5:20 pm

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