Начальные данные:
Есть несколько комнат (зон), ну например 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);
}
А вот далее.... в PHP не силен, и структуру MD знаю не очень. Хотелось бы сделать всё красиво.
Вариант 1:
Модифицировать функцию say() добавив необязательный параметр "номер зоны" (не уверен смогу ли...). В этом случае все что уже есть с say() будет работать. Где лежит say()? И можно ли как то узнать, что воспроизведение закончилось? Вариант выше в этом виде не будет, т.к. sleep совсем не то. Если на стороне MD узнать о конце воспроизведения фразы нельзя, выключение УНЧ перенесу на Raspberry.
Вариант 2:
Обернуть код (без sleep и выключения) в функцию SayRoom(). Куда её положить и что сделать, чтобы MD её "видел"?
Вариант 3:
Объект SayRoom с методом: код (без sleep и выключения) и свойствами состояния включенных УНЧ (зон).
Что скажите?