![]() |
![]() |
|||||||||||||||
Серьезный "Умный Дом" или проект ComDev
Автор: Arhar Мяу, уважаемые коты! Хочу поделиться с вами результатами трудов. Разрабатывал изначально сей труд для себя, но постепенно понял что труды могут кануть в лету. А по сему, почему бы не поделиться с правильными котами. Сразу оговорюсь: данный проект не совсем "умный дом" в его современном понимании. Я бы назвал это Программно - аппаратным комплексом. И данный программно-аппаратный комплекс предназначен для автоматизации управления и взаимодействия персонального компьютера с любым электрооборудованием или электроприборами. При разработке, стояли несколько основных концепций: "Так чего ж оно тогда вообще умеет?" спросит меня кот. Ну что ж давайте пройдемся по функциям. Их я разделил на 2 категории: 1. автономные (без ПК). 2. зависимые от ПК. 1. Автономные:
Весьма ограничено и скучно, не так ли? А чего вы хотели? Я же говорил - суровая реальность. Но всё становится интересней, когда мы подключаемся к компьютеру по USB. 2. Функции через ПК:
Подробнее о всех этих функциях мы поговорим позже, в разделе о програмной части. Пока же начнем с железки. Принципиальная схемка ниже: Железка может работать автономно или в составе с компьютером по USB порту (некоторые функции работают только через ЭВМ). В системе питания предусмотрен дополнительный вход. Резервный блок питания для функционирования системы не обязателен, но рекомендован для предотвращения обесточивания управляемых электроприборов и оборудования. В основе лежит процессор PIC18F4550. Более пояснений к схеме в теории не требуется. Единственное замечание, то что плата, сделанная мной, двухстороняя. В остальном, как видите, не особо она и сложна: Микроконтроллер в моей плате используется DIP исполнения. И установлен на панельку по причине упрощения ремонта и для подъема его над платой, что бы можно было под него разместить кварцевый резонатор и конденсатор C5. Так же в панельки ставим все оптопары и драйвера Дарлингтона, все по той же причине: проще менять, если что то пойдет не так. Диодная пара VD1, как и 7805, для пущей надежности можно положить на алюминиевый плоский радиатор. Уделим внимание прошивке. Для облегчения жизни нам, котам, было принято решение прошить программатором в железяку бутлодер. Прошивается он в режиме LVP. А далее прошивки мы "жуем" прямо по USB порту, с помощью отдельной программы для обновления прошивок. Положить в статью ее не получилось, а по тому вот USB HID Bootloader ссылка на нее. Это стандартная утилита от компании Microchip. Должна быть так же доступна на их сайте. Для обновления прошивки достаточно подать питание на устройство с зажатой кнопкой BTL (она же PTT) и устройство перейдет в режим прошивки. Далее работаем с программой USB HID Bootloader. Перейдем пожалуй в описанию программной части: 1 Конфигуратор Общие сведения Системные требования:
Запуск приложения Конфигуратора останавливает основной сервис для предотвращения конфликтов. Строка состояния указывает подключено ли устройство к компьютеру и его идентификационный номер. Кнопка «очистить» - удаляет файл конфигурации (settings.xml) и перезапускает приложение для возврата к начальным предустановкам. Кнопка «сохранить» - сохраняет все изменения, произведенные во всех вкладках. Если попытаться закрыть приложение без сохранения, выйдет сообщение о произведенных изменениях и предложение их сохранить. Кнопка «Перечитать» - заново считывает все настройки из файла конфигурации, отменяя все произведенные, но не сохраненные изменения. Все поля тревожных фраз имеют ограничения по 50 символов. Если фраза не требуется, ее можно просто удалить, оставив поле пустым. система Имя системы – название, отображаемое в «шапке» веб-интерфейса и произносимое при запуске основного сервиса. Размер логов – значение в килобайтах, при достижении которого, файлы логов будут автоматически удаляться. Порт сервера – порт на котором будет доступен веб-интерфейс. По умолчанию 8888. это означает, что веб-интерфейс будет доступен, например, по адресу https://127.0.0.1:8888 Кол-во подкл. – максимально допустимое количество одновременных подключений к веб-интерфейсу. Пароль User Moder Admin – пароли к учетным записям. Порт модема – номер СОМ порта, на котором подключен GSM-модем. № телефона – номер телефона, на который будут приходить настроенные сообщения. СМС будут отправляться в режиме охраны (замкнут охранный контакт AUX). Голос – Выбор голоса синтеза речи из списка установленных в системе. Работает как с х64, так и с х86 голосовыми движками. GoogleAPIkey – ключ, необходимый для доступа к Google Speech. Необходим для системы распознавания голосовых команд. Подробнее о ключах на сайте https://www.chromium.org/developers/how-tos/api-keys RSS погоды – адрес RSS рассылки, из которой система может читать прогнозы погоды. Например https://rp5.ru/rss/5483/ru RSSновостей – адрес RSS рассылки, из которой система может читать новости. Например https://lenta.ru/rss/top7 Включить звук и голос – галочка включает или выключает все звуки в системе. Так же можно указать с какого и по какое время звуки будут разрешены. Ниже (см. скриншот) можно указать дежурные фразы на то или иное событие. Вместо фраз, во всех случаях, можно указать имя текстового файла (например hello.txt) созданного в папке «ext» (в папке с приложением). Тогда система каждый раз при том или ином событии будет произносить фразы из строк указанного файла в случайном порядке. Так же в некоторых строках можно использовать ключ %n. Он подменяется автоматически на значение, зависимое от конкретного поля.
Входы Выходы и Термометры Идентификаторы – названия входов выходов и термометров. Отображаются в веб-интерфейсе, произносятся в тревожных фразах. Так же любой ярлык, созданный в папке «ext» с аналогичным идентификатору названием, будет выполняться при срабатывании. Во вкладке термометров эти поля по умолчнию заполняются адресами найденных датчиков. о/з – (открыт/закрыт) галочки во вкладках входов и выходом, имеющие 3 состояния. Указывают нормальное состояние входов или выходов. При изменении состояния на отличное от нормального, срабатывает тревога. В состоянии неопределенности, тревожные фразы отрабатывают при любой смене состояния, а поля «автотаймер» и «таймаут опроса» недоступны. Это сделано для предотвращения конфликтов в логике. В отмеченном состоянии тревога срабатывает при замыкании входа (или включении выхода). В не отмеченном состоянии тревога срабатывает при размыкании входа (или выключении выхода) соответственно. Тревожные фразы – фразы, произносимые системой при срабатывании. Имеют возможность использовать ключ %n для подмены на название (идентификатор) входа выхода термометра. Во вкладке термометров эти поля так же предусматривают использование ключа %t для подмены на текущие температуры. Вместо фраз, во всех случаях, можно указать имя текстового файла (словаря) созданного в папке «ext». г/с – (голос/смс) галочки, имеющие 3 состояния и задающие необходимость голосовых сообщений, отправки СМС сообщений или оба варианта при срабатывании. В отмеченном состоянии будет отправлено СМС сообщение. В не отмеченном состоянии система выдаст голосовое сообщение. В неопределенном состоянии выдается и голосовое сообщение и отправляется СМС. СМС будут отправляться только в режиме охраны (замкнут охранный контакт). Для отключения тревожных сообщений достаточно удалить текст сообщения из нужной строки тревожных фраз. Таймаут опроса – время в секундах, по истечению которого срабатывание тревоги повториться. Автотаймер – время в минутах, по истечению которого выход вернется в нормальное состояние автоматически. Нормальная температура – указанный диапазон температур, являющийся нормальным для того или иного термометра. Выход за пределы указанного диапазона инициирует тревогу.
Планировщик Планировщик позволяет программировать задания поведения основного сервиса во временных рамках. Составленный список заданий сохраняется в файл “scheduler.xml”. Все задания, сохраняемые тут, будут выполняться вне зависимости от того, подключено ли устройство к компьютеру или нет (если задание не связано с устройством). Условие – указывает, как часто должно срабатывать задание. Варианты:
Дата и время – открывает календарь, в котором указывается число, месяц, год старта выполнения задания. Время выбирается кликом мыши в нужное поле и стрелками вверх вниз, или цифрами с клавиатуры. Тип – указывает, что именно система должна сделать в указанное время. Варианты:
Объект – указывает, с чем именно производятся действия. Данное поле работает в двух режимах: В режиме «Сказать» поле работает как текстовая строка. В ней пишется фраза, произносимая при срабатывании задания. В режиме «Выполнить» поле работает как выпадающий список, в котором отображаются объекты, доступные для манипуляций. В их число входят:
Кнопка «Добавить» - добавляет сформированное задание в список планировщика. Если не был выбраны все условия (не заполнены все выпадающие списки), появится сообщение "Не выбраны все условия". Кнопка «Удалить» - удаляет выбранное в списке планировщика задание. Кнопка «Перечитать» - заново считывает список заданий в список планировщика. Кнопка «Очистить» - очищает все задания и перечитывает его для контроля. Кнопка «Сохранить» - сохраняет все задания из списка планировщика в файл “scheduler.xml”.
Программатор Программатор позволяет программировать задания поведения во встроенную память устройства. В устройство можно прошить до пятидесяти заданий. Все задания, прошиваемые в устройство, будут выполняться вне зависимости от того, подключено ли устройство к компьютеру или нет. Входы – выбирает вход, участвующий в условии. Условия – выбирает условие («замкнут» или «разомкнут» указанный вход) для задания. Выходы – выбирает выход, участвующий в задании. Кроме десяти идентификаторов выходов, если возможность управлять звуковым сигналом («пищалкой» на устройстве). Поведения – выбирает тип поведения выхода при срабатывании задания. Варианты:
Кнопка «Добавить» - добавляет сформированное задание в список. Если не был выбраны все условия (не заполнены все выпадающие списки), появится сообщение "Не выбраны все условия". Кнопка «Удалить» - удаляет выбранное в списке задание. Кнопка «Загрузить» - позволяет загрузить список заданий из файла формата .bin. Кнопка «Сохранить» - позволяет сохранить составленный список заданий в файл формата .bin. Кнопка «Считать» - считывает список заданий из устройства в список. Кнопка «Стереть» - очищает все задания из устройства и перечитывает его для контроля. Кнопка «Прошить» - прошивает все задания из списка в устройство.
2 Основной сервис (ComDev Сервер) Общие сведения Системные требования:
Основной сервис представляет собой консольное приложение. Реализует взаимодействие компьютера и устройства. Логирует всё, что происходит с устройством. Организует веб-интерфейс. Может сворачиваться в значок в системном трее. Имеет несколько ключевых объектов в файловой системе: Папка «ext» - папка для внешнего взаимодействия. В папку можно поместить:
Файл cmd.wav – файл с записью последней голосовой команды. Некое подобие логирования. Файл settings.xml – файл с настройками системы. Для резервирования настроек достаточно скопировать этот файл. Файл scheduler.xml – файл с заданиями планировщика. Для резервирования заданий достаточно скопировать этот файл. Файл wwwlogs.txt – файл логов. Внимание! При запуске сервис пытается обнаружить устройство и сверить серийный номер. Если этого не удается, сервис переходит в демо режим. В этом режиме сохраняется весь функционал, не зависящий от устройства, но время работы сервиса ограничено десятью минутами. Консоль В консоли приложения отображаются проходящие события и возможен ввод команд: Help – вывод списка доступных команд. Sw – переключает состояние выходов по их номеру. (Пример – sw 5 – переключает выход 5). Clr – очищает файлы логов. (Пример – clr 1 – очищает логи температуры. clr 2 – логи системы). Bl – переключает состояние блокировки управления выходом. (Пример – bl 0 – блокируетразблокирует управление звуками и голосовыми командами по веб-интерфейсу. Bl 3 - блокируетразблокирует управление выходом 3.) Vcc – симулирует голосовую команду. (Пример – vcc время – симулирует голосовой запрос времени.) Sms – позволяет отправлять смс на указанный в настройках номер. (Пример – sms Привет мир – отправит сообщение с текстом «Примет мир»). St – позволяет запускать и останавливать таймер переключения выхода. (Пример – st 5&time=1440 – запустит таймер на выходе 5 на 1440 минут (24 часа). st 5&time=0 – выключит таймер на выходе 5.) Webptt – активирует систему распознания голосовых команд на три секунды. (Пример – webptt 1 – активирует голосовых команд на три секунды. webptt 0 – останавливает запись команды досрочно). Thermal – запрашивает температуру со всех термометров. i2ctext – позволяет выводить заданное сообщение на ЖК дисплей устройства. (Пример – i2ctext Hello world – выводит на дисплей сообщение «Hello world»). Mute – останавливает все воспроизведения звуков в системе. (Пример – mute 0 ).
Веб – интефейс | Главная - кнопка включения выключения выхода. В процессе переключения кнопка мигает красным цветом. Во включенном состоянии – горит зеленым цветом. При активной блокировке горит красным цветом. Максимальное значение 1440 минут (24 часа). По истечению таймера, выход поменяет свое состояние на противоположное от начального. При активном таймере кнопка мигает желтым цветом. - Кнопка выключения звука. Прерывает все фразы и звуки в системе до перезагрузки сервиса или до отмены команды. - Кнопка активации голосовых команд. Активирует систему распознания голосовых команд на три секунды. После чего происходит процесс опознания и выполнения команды. Ну а остальные вкладки интерфейса еще проще и понятней. Думаю описывать и скринить их нет смысла. Должен же быть хоть какой то сюрприз. Хотя вот вам сюрприз: Не уверен, что все вот прям бросились, обжигая лапы и выкручивая хвост, повторять это безобразие. По сему предлагаю сделать интересней. Я не положу сюда основную прошивку устройства (пишу я ее еще. долизываю.), но без проблем готов поделиться и поддерживать её в обмен на фото вашего изготовленого устройства. А если наберется несколько таких котов, то и сюда прошивку не грех положить. Помидорами закидывать прошу, только свежими и шерстью не плеваться. Статья моя первая и косяки могут быть. Всем тепла.
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |