Описания способов решения такой задачи я не нашел. По этому предлагаю собственный вариант.Lerych писал(а): ↑Вт ноя 06, 2018 10:05 pmГоспода, помогите реализовать шаблон поведения:
Я: "Покажи сцену ..."
Алиса: "Как пожелаете" и открывает созданную ранее сцену (например, с видео с камеры наблюдения), желательно во всплывающем окне.
Как реализовать через элемент интерфейса нашёл, а вот как скриптом не нашел.
Спасибо!
Предвосхищая комментарии типа «фу... да кто так делает», поясню, что в теме программирования я не имею ни навыков ни достаточно глубоких знаний. И лишь благодаря творению Сергея и карантину мне удалось приобщиться к темам за которые я ранее не брался. Однако, в процессе автоматизации квартиры, возникла проблема: вызова сцен голосом.
Когда я добрался до нужных разделов справочника по PHP - первым позывом было использовать сценарий: header( "Location: http://192.168.1.101/popup/scenes/14.html" ); но в сценах это не работает. На мой не искушенный взгляд, не может работать т. к. скрипт PHP выполняется на сервере (и здесь тесты работают), а запрос приходит с браузера терминала. По этому PHP понятия не имеет на какой машине, в каком браузере и в какой вкладке нужно открывать прописанную страницу.
Поскрипев мозгой, я нашел решение работающее для моей конфигурации, но оно корявое. Уверен, что приличные люди предложат, что то более приличное. Постараюсь описать ситуацию на максимально конкретном примере.
Итак задача: при помощи голосовой команды вызывать на экран заданную HTML сцену (при этом не плодить в браузере неактивные вкладки, а открывать новую страницу в замен ранее открытой).
Конфигурация оборудования: в прихожей расположен ящик с коммуникациями, в нем же установлен сервер (образ MajorDomo установлен на Raspberry pi+колонки +микрофон +дисплей). Этот же компьютер выполняет роль терминала– картинка и общение выводится по средствам браузера Cromium.
Решение задачи:
1. Создаем класс — [Display], со свойством [Address]. (в моем случае есть еще свойство [Status] — отвечающее за подсветку монитора, но к этой теме оно не относится).
2. Создаем объект этого класса, что бы не изобретать оригинальное имя, объект то же будет [Display]. Свойство [Address] делаем = 0.
3. Создаем шаблон поведения — [покажи], в шаблоне пишем (покажи), на против (использовать как контекст) ставим галочку.
4. Создаем шаблон запроса требуемой сцены — на пример шаблон [часы], (Доступно в контексте [покажи]), в шаблоне пишем (часы|будильник|время). Прописываем код:
setGlobal('Display.Address',"http://192.168.1.101/popup/scenes/14.html");//адресная строка сцены часов
//setGlobal('Display.Status',1);// у меня это свойство отвечает за подсветку монитора
say("Сцена с часами",2);
5. Во всех сценах из которых мы планируем переходить по ссылке на другие страницы нужно создать элемент [Транзит] тип — HTML, создаем состояние [default] и прописываем в коде скрипт:
<script>
var addr='%Display.Address%';
if (addr!=0) {
setGlobal('Display.Address',0);
location.href=addr;
}
</script>
Теперь при голосовой команде «Алиа: покажи часы» браузер вместо страници содержащей элемент [Транзит] откроет страницу прописанную в шаблоне поведения.
Недостатков у такого решения масса. Самый очевидный — это отсутствие избирательности: меняются все открытые страницы на всех терминалах (на ПК и на смартфоне). Кроме того, смущает необходимость создания на всех сценах «костыля» в виде элемента [Транзит]. Так что есть о чем подумать.