1 2 3 4 5 6 7 8 9 10 9.5/10 9,74оценок: 35

Автоматизация инженерных систем в доме или как я обучал Дом уму-разуму

Тема в разделе "Умный дом", создана пользователем Smith2007, 09.01.15.

  1. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Близятся холода и уличные работы практически прекращены. Наступает пора программирования :)
    В свободное время изучаю возможности openhab и FreePBX. Так же отказался от гугловского синтеза речи в пользу SpeechKit
    Более четкий синтез. Возможность менять голоса и интонации.
    Научился передавать параметры между openhab, freepbx и ПЛК110.
    Кроме того отказался от идеи звукового оповещения через специальные устройства. В качестве звуковых (речевых) извещателей будут использоваться установленные SIP телефоны. Последние имеют режим интеркома. Т. е. все необходимое у них уже на борту.
    Такой подход мне показался более правильным. Питание PoE, дизайн самих устройств, место установки и т. д. все вопросы разом отпали.
     
    Последнее редактирование: 20.09.15
  2. DiaZoN
    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250

    DiaZoN

    Живу здесь

    DiaZoN

    Живу здесь

    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250
    Адрес:
    Казань
    @Smith2007, что за sip телефоны?
     
  3. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Yealink T-38G достались по хорошей цене. Но в принципе подходит любой, который поддерживает режим paging/intercom
    yealink t38g.jpg
     
  4. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    В общем доделал первую часть по звуковому оповещению.
    Получилась универсальная система при помощи которой можно озвучивать любые действия системы на подключенных 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 телефонов.

    Собственно и все. Дальше все зависит только от фантазии. Думаю, что не помешает информировать об ошибках в системе контроля но необходимо учесть время суток, что бы не получилось среди ночи услышать сообщение о низком давлении в магистрали водоснабжения :)
     
    Последнее редактирование: 20.09.15
  5. trushlya
    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10

    trushlya

    Участник

    trushlya

    Участник

    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10
    Адрес:
    Красноярск
    @Smith2007, а можно попросить хотя бы блок схему подключения компонентов системы и применение миникомпьютера обусловлено только применением голосового оповещения или он выполняет и другие функции. Спасибо.
     
  6. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    @trushlya, рисовать особенно нечего. Контроллер (ПЛК110) управляет режимами работы системы отоплениия (контуры полов, радиаторов), ГВС. Управление секционными воротами, а так же контролирует около десятка различных датчиков охраны и других параметров (давления, тепературы, уровни ...)
    К контроллеру подключены несколько модулей ввода-вывода (аналоговые и дискретные сигналы).
    В принципе для работы системы более ничего не нужно. Система постоена таким образом, что в случае выхода электроники из строя все легко переключается в ручной режим как будто ни какой автоматики более нет. Котлы работать будут сами по себе и пр. жизненно важные элементы так же будут работать. Не будет "слаженности".
    В доме стоит круглосуточный сервер на котором размещены файловые шары и на нем же установлен сервис openhab, который умеет связываться с ПЛК110 по modbus tcp. Через интерфейс опенхаб получил удобную и простую визуализацию через браузер или через приложение на смартфоне.
    Openhab дополнительно умеет взаимодействовать с внешним миром это электронная почта или еще чего посредством штатных bindings (более 50 различных протоколов понимает) или посредством банальных скриптов.
    На отдельном микрокомпе (Intel Atom) запущена FreePBX (IP телефонная станция). На другом таком же микро - система видеонаблюдения. Openhab умеет взаимодействовать с FreePBX и с сервером видеонаблюдения Avreg.
    Т. е. все системы вполне себе могут существовать автономно, просто не будет взаимодействия и корректировки работы.
    FreePBX (Asterisk) используется по прямому назначению. Подключена городская тлф. линия, подключен домофон, телефоны в доме и несколько аккаунтов у различных провайдеров ip телефонии. В принципе позволяет несколько сэкономить на телефонных переговорах. Знакомый в Москве установил на комп софт-телефон и зарегистрировался на моем сервере freepbx. Теперь домашние могут свободно разговаривать с ним без оплаты. Понятно, что есть скайпы и пр... но бывает гораздо проще поднять трубку и нажать одну кнопку как связь уже есть :)
     
  7. trushlya
    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10

    trushlya

    Участник

    trushlya

    Участник

    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10
    Адрес:
    Красноярск
    @Smith2007, Огромное спасибо за ответ, а то я запутался в элементах, подбираю систему под свои нужды, но видеонаблюдение и телефония пока в планы не входят, а вот визуализация процессов в доме это да.
     
  8. DiaZoN
    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250

    DiaZoN

    Живу здесь

    DiaZoN

    Живу здесь

    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250
    Адрес:
    Казань
    Можете про это рассказать подробнее? Родная автоматика ворот купировалась или осталась на месте, и была ли она вообще?
     
  9. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    @DiaZoN, штатная автоматика ворот на месте. Но у этой автоматики имеется возможность:
    - получить информацию о состоянии ворот
    - внешнее управление воротами.
    У меня несколько раз получалось, что заезжаю домой, брелком открываю ворота. Потом брелком закрываю и уходя кладу брелок в карман и случайно вновь кнопку нажимаю. Несколько ночей с открытми воротами спал :) теперь исключено. Система при переходе в ночной режим позаботиться о воротах и если чего не получится даст знать.
    Ну еще пару раз детишки открывали ворота. В общем человеческий фактор постарался исключить.
    Но это актуально только для одних ворот, которые не настроены на автоматическое закрытие по истечении времени. Летом, когда шашлычек на улице - ворота эти открыты. На других, распашных, штатная автоматика закрывает по времени.
    Кроме того мне частенько, что-либо доставляют домой автотранспортом, а я в это время на работе. Удаленно открываю нужные ворота, разгружают машину. Я могу в реальном времени наблюдать по видео. Жена порой даже не знает, что во дворе машина разгружается :)
     
  10. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Хотел добавить и забыл :)
    В принципе openhab может вовсе подменить контроллер. Т. е. он легко может выступить в качестве Мастера для сети модулей ввода-вывода. Время реакции может быть снижено, но какая скорость необходима в автоматизированных системах дома?
    Если не сложный проект то можно смело его создать полностью на основе openhab + нужное кол-во модулей ввода-вывода без использования каких либо контроллеров.
     
  11. trushlya
    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10

    trushlya

    Участник

    trushlya

    Участник

    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10
    Адрес:
    Красноярск
    @Smith2007, я прошу прощения за свою безграмотность в вопросах электроники, я по специальности технарь и пока только учусь всем примудростям электроного мира. Вопрос в следующем если использовать овеновские модули ввода/вывода + RPi + openhab, то сервер Lectus от Овен не нужен, я правильно понял? Заранее огромное Вам спасибо, что возитесь со мной.
     
  12. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    @trushlya, В принципе Вы правы. openhab должно быть достаточно. Он будет выступать в качестве мастера сети. На usb порты (rpi) нужно будет в таком случае докупать преобразователи интерфейса usb-rs485, что бы обеспечить физическое соединение с модулями ввода-вывода.
    На я все же рекомендовал бы более надежный вариант - установку полноценного контроллера. Все же гораздо более гибко можно будет все настраивать. ПЛК - это проверенно временем и реально работающие проекты, а на основе rpi + openhab опыта очень мало. Единичные инсталляции не дают статистики.
     
  13. Stigory
    Регистрация:
    12.06.13
    Сообщения:
    4
    Благодарности:
    5

    Stigory

    Новичок

    Stigory

    Новичок

    Регистрация:
    12.06.13
    Сообщения:
    4
    Благодарности:
    5
    Адрес:
    Владивосток
    Я бы еще добавил в копилку размышлений следующее - цена отказа. Где на одной чаше весов контроллер промышленного исполнения (худо-бедно зарекомендовавший свою репутацию, если речь о продукции ОВЕН), а на другой чаше одноплатник за 30 баксов и бесплатный софт на джаве. И от всего этого, допустим, зависит логика отопления дома в зимний период. Или какие-то другие критичные процессы. Пусть даже полив редких растений.
    Я не говорю, что контроллер это панацея. "Умелыми" руками его можно превосходно поставить раком. Но если логика отработана, то шансов на глюки и зависания гораздо меньше.

    Но в целом, если денюжков нету или просто жалко тратить, то можно все и на openhub завязать. Тем более что никто не мешает в последствии в эту систему встроить нормальный ПЛК, если появится понимание его необходимости.
     
  14. trushlya
    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10

    trushlya

    Участник

    trushlya

    Участник

    Регистрация:
    13.11.13
    Сообщения:
    49
    Благодарности:
    10
    Адрес:
    Красноярск
    @Smith2007, но в паре с ПЛК всё равно необходим мини компьютер?
     
  15. DiaZoN
    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250

    DiaZoN

    Живу здесь

    DiaZoN

    Живу здесь

    Регистрация:
    01.11.10
    Сообщения:
    8.806
    Благодарности:
    10.250
    Адрес:
    Казань
    Нет.