РЕКЛАМА НА ФОРУМХАУС Близятся холода и уличные работы практически прекращены. Наступает пора программирования В свободное время изучаю возможности openhab и FreePBX. Так же отказался от гугловского синтеза речи в пользу SpeechKit Более четкий синтез. Возможность менять голоса и интонации. Научился передавать параметры между openhab, freepbx и ПЛК110. Кроме того отказался от идеи звукового оповещения через специальные устройства. В качестве звуковых (речевых) извещателей будут использоваться установленные SIP телефоны. Последние имеют режим интеркома. Т. е. все необходимое у них уже на борту. Такой подход мне показался более правильным. Питание PoE, дизайн самих устройств, место установки и т. д. все вопросы разом отпали.
Yealink T-38G достались по хорошей цене. Но в принципе подходит любой, который поддерживает режим paging/intercom
В общем доделал первую часть по звуковому оповещению. Получилась универсальная система при помощи которой можно озвучивать любые действия системы на подключенных SIP телефонах. Можно так же организовать подобное оповещение при помощи софтовых телефонов с включенной опцией автоответ. Для работы системы оповещения синтезированным сообщением требуется: 1. Openhab - собственно он инициализирует запуск скрипта, который формирует текст и в дальнейшем синтезирует текст в речь. Далее передает его в asterisk (freepbx) для оповещения на телефонах. 2. FreePBX - IP атс развернутая в доме на базе платформы Intel Atom. Напомню, что на данную АТС заведен городской телефонный номер (аналоговый) при помощи Voip шлюза Grandstream HT-503, порт FXO. На порт FXS подключен аналоговый домофон (самый обыкновенный) домофон через телефонный адаптер Паскаль. Таким образом АТС обрабатывает все речевые соединения как внутри дома так и во вне. В том числе и домофон. Все переговоры могут быть легко записаны средствами самой станции freepbx. При желании легко перенаправить вызов с домофона на мобильный телефон. 3. SIP телефоны с поддержкой режима paging/intercom (либо как писал выше софтовые телефоны с включенным режимом автоответ) 4. Зарегистрированный ключ Yandex SpeechKit для работы скрипта синтеза речи. 5. Пара скриптов и некоторые настройки в указанных выше пакетах. В openhab - rules Добавляем вызов скрипта с передачей ему параметра в виде строки текста, которую необходимо синтезировать в речь. Обращаю внимание на символы %2b в строке. В яндексе описано, что это ударение. Можно и без этих спецсимволов синтезировать речь но иной раз ударение получается не там где нужно. Код: rule "Protect" when Item PCode_0 changed from CLOSED to OPEN or Item PCode_1 changed from CLOSED to OPEN or Item PCode_2 changed from CLOSED to OPEN or Item PCode_3 changed from CLOSED to OPEN or Item PCode_4 changed from CLOSED to OPEN or Item PCode_5 changed from CLOSED to OPEN or Item PCode_6 changed from CLOSED to OPEN or Item PCode_7 changed from CLOSED to OPEN or Item PCode_8 changed from CLOSED to OPEN or Item PCode_9 changed from CLOSED to OPEN or Item PCode_10 changed from CLOSED to OPEN or Item PCode_11 changed from CLOSED to OPEN or Item PCode_12 changed from CLOSED to OPEN or Item PCode_13 changed from CLOSED to OPEN or Item Test_Protect changed from OFF to ON then var int PCode_id var String SpeechTxt = "Вним%2bание! Обнар%2bужено наруш%2bение пер%2bиметра безоп%2bасности!" if (PCode_0.state == OPEN) {PCode_id = 0 } if (PCode_1.state == OPEN) {PCode_id = 1 } if (PCode_2.state == OPEN) {PCode_id = 2 } if (PCode_3.state == OPEN) {PCode_id = 3 } if (PCode_4.state == OPEN) {PCode_id = 4 } if (PCode_5.state == OPEN) {PCode_id = 5 } if (PCode_6.state == OPEN) {PCode_id = 6 } if (PCode_7.state == OPEN) {PCode_id = 7 } if (PCode_8.state == OPEN) {PCode_id = 8 } if (PCode_9.state == OPEN) {PCode_id = 9 } if (PCode_10.state == OPEN) {PCode_id = 10 } if (PCode_11.state == OPEN) {PCode_id = 11 } if (PCode_12.state == OPEN) {PCode_id = 12 } if (PCode_13.state == OPEN) {PCode_id = 13 } var String SendMailCmd = "/opt/openhab/cmd/protect.sh " + PCode_id logInfo("Protect", "SendMailCmd=" + SendMailCmd) executeCommandLine(SendMailCmd) var String SpeechCmd = "/opt/openhab/cmd/intercom.sh " + SpeechTxt logInfo("Protect", "SpeechCmd=" + SpeechCmd) executeCommandLine(SpeechCmd) Test_Protect.sendCommand(OFF) Test_Protect.postUpdate(OFF) end Из скрипта видно, что мы вызываем скрипт intercom. sh в предварительно созданном каталоге cmd Не забываем про права к папке и файлу. intercom. sh Код: #!/bin/bash # #====================================================================================== # Скрипт получает текстовую строку, которую синтезирует в речь # mp3 Файл с синтезированной речью передается на удаленный хост # freepbx при помощи scp (из пакета openssh) # Предварительно необходимо обеспечить подключение по ssh # по ключу http://www.shellhacks.com/ru/Podklyucheniya-po-SSH-bez-Vvoda-Parolya-3-Shaga # Важно! Настройка входа по ключу должна производиться от имени пользователя openhab # От имени которого работает сервис openhab # Подключение к asterisk производится из скрипта astami.sh при помощи Asterisk AMI #====================================================================================== # # 1-ый параметр - имя файла в который будет запись синтеза речи # В настоящее время передача имени файла в первом параметре не реализована # voicefile=$1 voicefile="speech" # 2-ой параметр текстовой сообщение кторое необходимо синтезировать Message=$* # log-файл logfile="/opt/openhab/cmd/intercom.log" #key Яндекса на распознавание. https://developer.tech.yandex.ru/ KeyCode="2a4c42ce-b445-43d8-b5a5-88f6cee9c11a" # Вход на удаленный хост с установленной freepbx freepbx="root@192.168.1.11" # Имя каталога где будут создаваться mp3 файлы с синтезированной речью # каталог необходимо предварительно создать и сделать владельцем сервис openhab Speech="/opt/openhab/cmd/speech/" # Каталог (по умолчанию) в котором asterisk (freepbx) содержит # звуковые файлы # astsound="/var/lib/asterisk/sounds/" # Тестовая фраза для отладки скрипта. При работе закомментировать. #Message="Поздравл%2bяем! Вы усп%2bешно настр%2bоили синтез%2bатор речи Яндекс!" echo `date` " Starting..." >> $logfile sourcefile=$Speech$voicefile".mp3" echo "sourcefile="$sourcefile >> $logfile destfile=$freepbx:$astsound$voicefile".mp3" echo "destfile="$destfile >> $logfile echo "Message=$Message" >> $logfile wget -O $sourcefile "https://tts.voicetech.yandex.net/generate?text=$Message&emotion=mixed&format=mp3&lang=ru-RU&speaker=omazh&key=$KeyCode" scp $sourcefile $destfile /opt/openhab/cmd/astami.sh $voicefile | telnet exit 0 astami. sh Код: #!/bin/sh # # ./astami.sh | telnet # # Подключение к Asterisk AMI # В первом параметре передается имя файла (без расширения) которое необходимо # воспроизвести на всех телефонах в режиме интеркома # Предварительно на freepbx необходимо создать группу paging # и добавить в нее все необходимые телефоны на которых требуется # воспроизведение звукового файла # # Имя пользователя Asterisk AMI Username="openhab" # Пароль пользователя Username (AMI) Secret="xxxxxxx" # Канал пейджера настроенныый на freepbx Channel="Local/590@from-internal/n" # Контекст добавить в /etc/asterisk/extensions_custom.conf # в котором прописаны инструкции # # [pa-custom] # exten => s,1 (start),Wait(2) # exten => s,n,NoOp(${var1}) # exten => s,n,Set(CHANNEL(language)=ru) # exten => s,n,Playback(/var/lib/asterisk/sounds/${var1})> # exten => s,n,Hangup() # Context="pa-custom" # Имя файла (без расширения) для воспроизведения soundfile=$1 # 192.168.1.11 5038 - адрес сервера и номер порта AMI freepbx echo "open 192.168.1.11 5038" sleep 2 echo "Action: Login" echo "Username: $Username" echo "Secret: $Secret" echo "Events: off" echo sleep 2 echo "Action: Originate" echo "Channel: $Channel" echo "Context: $Context" echo "Exten: 577" echo "Priority: 1" echo "Variable: var1=$soundfile" echo "Callerid: OpenHAB" echo sleep 2 echo "Action: Logoff" echo На Freepbx создаем дефолтную группу пейджинга включив в нее номера наших SIP телефонов. Собственно и все. Дальше все зависит только от фантазии. Думаю, что не помешает информировать об ошибках в системе контроля но необходимо учесть время суток, что бы не получилось среди ночи услышать сообщение о низком давлении в магистрали водоснабжения
@Smith2007, а можно попросить хотя бы блок схему подключения компонентов системы и применение миникомпьютера обусловлено только применением голосового оповещения или он выполняет и другие функции. Спасибо.
@trushlya, рисовать особенно нечего. Контроллер (ПЛК110) управляет режимами работы системы отоплениия (контуры полов, радиаторов), ГВС. Управление секционными воротами, а так же контролирует около десятка различных датчиков охраны и других параметров (давления, тепературы, уровни ...) К контроллеру подключены несколько модулей ввода-вывода (аналоговые и дискретные сигналы). В принципе для работы системы более ничего не нужно. Система постоена таким образом, что в случае выхода электроники из строя все легко переключается в ручной режим как будто ни какой автоматики более нет. Котлы работать будут сами по себе и пр. жизненно важные элементы так же будут работать. Не будет "слаженности". В доме стоит круглосуточный сервер на котором размещены файловые шары и на нем же установлен сервис openhab, который умеет связываться с ПЛК110 по modbus tcp. Через интерфейс опенхаб получил удобную и простую визуализацию через браузер или через приложение на смартфоне. Openhab дополнительно умеет взаимодействовать с внешним миром это электронная почта или еще чего посредством штатных bindings (более 50 различных протоколов понимает) или посредством банальных скриптов. На отдельном микрокомпе (Intel Atom) запущена FreePBX (IP телефонная станция). На другом таком же микро - система видеонаблюдения. Openhab умеет взаимодействовать с FreePBX и с сервером видеонаблюдения Avreg. Т. е. все системы вполне себе могут существовать автономно, просто не будет взаимодействия и корректировки работы. FreePBX (Asterisk) используется по прямому назначению. Подключена городская тлф. линия, подключен домофон, телефоны в доме и несколько аккаунтов у различных провайдеров ip телефонии. В принципе позволяет несколько сэкономить на телефонных переговорах. Знакомый в Москве установил на комп софт-телефон и зарегистрировался на моем сервере freepbx. Теперь домашние могут свободно разговаривать с ним без оплаты. Понятно, что есть скайпы и пр... но бывает гораздо проще поднять трубку и нажать одну кнопку как связь уже есть
@Smith2007, Огромное спасибо за ответ, а то я запутался в элементах, подбираю систему под свои нужды, но видеонаблюдение и телефония пока в планы не входят, а вот визуализация процессов в доме это да.
Можете про это рассказать подробнее? Родная автоматика ворот купировалась или осталась на месте, и была ли она вообще?
@DiaZoN, штатная автоматика ворот на месте. Но у этой автоматики имеется возможность: - получить информацию о состоянии ворот - внешнее управление воротами. У меня несколько раз получалось, что заезжаю домой, брелком открываю ворота. Потом брелком закрываю и уходя кладу брелок в карман и случайно вновь кнопку нажимаю. Несколько ночей с открытми воротами спал теперь исключено. Система при переходе в ночной режим позаботиться о воротах и если чего не получится даст знать. Ну еще пару раз детишки открывали ворота. В общем человеческий фактор постарался исключить. Но это актуально только для одних ворот, которые не настроены на автоматическое закрытие по истечении времени. Летом, когда шашлычек на улице - ворота эти открыты. На других, распашных, штатная автоматика закрывает по времени. Кроме того мне частенько, что-либо доставляют домой автотранспортом, а я в это время на работе. Удаленно открываю нужные ворота, разгружают машину. Я могу в реальном времени наблюдать по видео. Жена порой даже не знает, что во дворе машина разгружается
Хотел добавить и забыл В принципе openhab может вовсе подменить контроллер. Т. е. он легко может выступить в качестве Мастера для сети модулей ввода-вывода. Время реакции может быть снижено, но какая скорость необходима в автоматизированных системах дома? Если не сложный проект то можно смело его создать полностью на основе openhab + нужное кол-во модулей ввода-вывода без использования каких либо контроллеров.
@Smith2007, я прошу прощения за свою безграмотность в вопросах электроники, я по специальности технарь и пока только учусь всем примудростям электроного мира. Вопрос в следующем если использовать овеновские модули ввода/вывода + RPi + openhab, то сервер Lectus от Овен не нужен, я правильно понял? Заранее огромное Вам спасибо, что возитесь со мной.
@trushlya, В принципе Вы правы. openhab должно быть достаточно. Он будет выступать в качестве мастера сети. На usb порты (rpi) нужно будет в таком случае докупать преобразователи интерфейса usb-rs485, что бы обеспечить физическое соединение с модулями ввода-вывода. На я все же рекомендовал бы более надежный вариант - установку полноценного контроллера. Все же гораздо более гибко можно будет все настраивать. ПЛК - это проверенно временем и реально работающие проекты, а на основе rpi + openhab опыта очень мало. Единичные инсталляции не дают статистики.
Я бы еще добавил в копилку размышлений следующее - цена отказа. Где на одной чаше весов контроллер промышленного исполнения (худо-бедно зарекомендовавший свою репутацию, если речь о продукции ОВЕН), а на другой чаше одноплатник за 30 баксов и бесплатный софт на джаве. И от всего этого, допустим, зависит логика отопления дома в зимний период. Или какие-то другие критичные процессы. Пусть даже полив редких растений. Я не говорю, что контроллер это панацея. "Умелыми" руками его можно превосходно поставить раком. Но если логика отработана, то шансов на глюки и зависания гораздо меньше. Но в целом, если денюжков нету или просто жалко тратить, то можно все и на openhub завязать. Тем более что никто не мешает в последствии в эту систему встроить нормальный ПЛК, если появится понимание его необходимости.