ComDev – Система диспетчеризации

Предисловие

Любого инженера (или просто любителя электроники) когда-либо посещала мысль подключить свой дом, офис, серверную или рабочее место к компьютеру. Это тёплая ламповая мысль заложена в наши мозги со времен первых компьютеров. Больших и ламповых! Стремление к роботизации, облегчению существования себя любимого, комфорт за счет автоматизации. Или, говоря проще, «лень – двигатель прогресса!». Меня такие мысли конечно же стороной не обошли. И не обходили они меня долгие годы. И все вот эти годы воплотились в данном устройстве.

И так, ComDev представляет собой относительно простую систему диспетчеризации и управления. Ты, дорогой мой любитель роботизации, спросишь «управления чем именно?». Да хоть протезом головного мозга! Всё что питается от электричества, можно включить / выключить / переключить. Такова философия данного устройства. Если рассмотреть любое устройство с точки зрения «черного ящика» с входами и выходами, то данная философия станет очевидной. Область применения конечно промышленная, но, если включить воображение, можно и «умный дом» себе организовать. И так по порядку.

Глава 1. Hardware

Аппаратно наш девайс состоит из центрального блока управления и исполнительных устройств, соединяющихся 3х проводной линией по принципу «звезда». Ну и что бы было веселей, конечно имеем связь с компьютером по USB, шину 1-wire, шину I2C и много ещё чего. В общем концепция следующая:

схема подключения контроллера ComDev

Мозгом тут выступает простой контроллер PIC18F4550. Выбрал я его потому, что на тот момент это был один из самых доступных мне контроллеров с аппаратным USB и количеством портов, позволяющим подключать до 10 устройств по входу и выходу параллельно. А поддержка этим контроллером бутлодера, вообще решала кучу проблем с перепрошивкой и отладкой устройства. Контроллер довольно «нежный» и не любит перегрузки по портам и грязного питания. Именно поэтому в схеме можно обнаружить такие сложности в схеме питания и кучу защитных элементов типа блокировочных конденсаторов и защитных диодов. Поверь, я сжег ни один такой контроллер, чтобы понимать о чём говорю. Кстати! Схема:

принципиальная схема ComDev

Но если ты думаешь «на кой чёрт мне устаревший нежный контроллер?», ты ошибаешься. Контроллер по сей день есть в продаже, а схема за столько лет отлажена и отточена на столько, что можно, к примеру, подключить компьютер к 25 метровому USB и не переживать, что девайс глюкнет или отвалится. Ну а в качестве исполнительных устройств можно использовать кнопки, реле, датчики. В общем всё что имеет принцип «сухой контакт» и толерантно (модное нынче слово) к напряжению 12 вольт. Все эти пироги подключаются через оптроны и сборки дарлингтона, для развязки и защиты портов.

Не используй дешевые и поддельные микросхемы ULN2003. Они имеют свойство не выдерживать заявленный ток и сгорать, прихватывая соседние ключи, а иногда и порты контроллера. Об этих ключах можно было бы написать целый трактат, но тут ограничимся тезисом «ищи фирменные ULN2003».

Исходя из выше описанной концепции, получаем систему простую и надежную, как велосипед. Итого, аппаратные возможности:

  • Два входа питания, развязанных через сдвоенный диод. У нас тут промышленный девайс, помним? Резервироваться нужно.
  • Надёжное проверенное подключение по USB, на расстоянии до 25 метров.
  • 10 входов и 10 выходов. Управляются вручную или автономно. Как те или иные входы и выходы должны взаимодействовать, программируется заранее с помощью программы Конфигуратора, а после мы полностью самостоятельны.
  • 1wire для подключения до 10 датчиков температуры типа DS18B20. Замер 10 температур и вывод их на компьютер с построением суточных графиков.
  • Порт AUX. Например, для взаимодействия с охранными системами. Железяка позволяет взаимодействовать с любыми охранными, пожарными, инженерными системами. Для этого необходимо подключить вход AUX к релейному выходу типа «сухой контакт». В этом случае, при замыкании релейного выхода мы можем принимать решения о включении выключении выходов и можем попищать для порядка и т.д.
  • I2c интерфейс, на который можно подвесить дисплей типа LCD2004 с интерфейсом PCF8574T. Пока мы можем выводить на него тревоги, но эту часть можно развивать.

Если вдуматься, то по аппаратным возможностям в общем то и всё. Так что пихаем всё это в печатную плату, долго курим книги по помехозащищенным устройствам и т.д. в итоге получаем следующее:

ComDev PCB back ComDev PCB front

Отдельно нужно поговорить про PCB. Версий за много лет было невероятное множество, но именно эта версия первая, прошедшая этап сериализации. Т.е. переход от прототипа к серийному выпуску. Это версия адаптирована под производство где ни будь в промышленном масштабе, но не утратила возможности собрать устройство при помощи ЛУТ. В исходниках проекта ты, дорогой читатель, можешь найти уже сформированные и проверенные файлы Gerber. Так что если по каким-то причинам, тебе не хочется или не можется возиться с двух сторонней печатной платой и «лазерным утюгом», ты всегда можешь отправить gerber файлы в Китай
(например, я заказывал в JLCPCB) и тебе пришлют вот такую плату:

ComDev печатная плата спереди ComDev печатная плата сзади

Глава 2. Firmware

Прошивка контроллера в нашем случае начинается с бутлодера. Если ты, мой дорогой изобретатель, собрал устройство и готов уже включать свет с ноутбука, то не торопись. Для начала потребуется программатор для нашего контроллера. Сразу скажу, что программатор потребуется 1 раз и бежать покупать из-за этого PicKit 3 совсем не обязательно. Можно воспользоваться самодельным простым программатором. Схем в этих ваших интернетах полно. Я начинал с программатора ART2003 и программы к нему WinPic800. При наличии в компьютере LPT порта, этого вполне достаточно, но в современном компьютере такой порт отыскать сегодня сложно. Но, допустим ты нашел чем и как прошить наш микроконтроллер. В архиве проекта ты найдешь файл прошивки бутлодера «bootloader.hex». Вот его нам и нужно прошить в контроллер в режиме LVP. После прошивки, если всё исправно и правильно прошито, наш девайс должен весело заморгать поочередно красным и зеленым цветом. Это означает, что наш контроллер ожил, вошел в режим бутлодера и готов прожевать основную прошивку уже через USB. С этого момента и далее программатор не нужен. Любая перепрошивка контроллера осуществляется через USB программой HIDBootloader (она так же лежит в папке проекта). Достаточно подать питание на контроллер с зажатой кнопкой “BTL” и он перейдет в режим программирования. И так, ты лезешь в эту папку, запускаешь HIDBootloader и с удивлением обнаруживаешь, что самой прошивки ComDev_v5.4 там нет…
Тут я должен извиниться перед тобой, мой маленький любитель контроллеров, и прояснить ситуацию. С учетом вложенных в этот проект трудов и занятых в нём людей, я опасаюсь бесконтрольного клонирования данного устройства. Поэтому каждая прошивка имеет свой внутренний ID и работает с конкретным экземпляром программы, имеющей тот же ID. Но не переживай!

Я не собираюсь брать с тебя деньги или предлагать чего-либо еще «без регистрации и смс». Просто напиши мне на support@unicaster.ru, что ты собрал устройство (можно приложить фото) и я вышлю тебе прошивку и ПО с твоим собственным ID.

Пожалуй, это самая сложная часть в сборке. Если ты справился, то дальше начинается веселье и магия автоматизации…

Глава 3. Software – Config

Основная концепция программной части, это консольный сервис, реализующий WEB-интерфейс и связь с устройством. С довольно большим функционалом программной части я предлагаю знакомиться по мере настройки системы при помощи утилиты ComDevConfig.

Вкладка «Система»:

ComDev вкладка системы

Из основных настроек видим следующие:

  • Имя системы – Это имя, которое будет отображаться в WEB-интерфейсе и произноситься синтезатором речи, если нужно.
  • Размер логов – это размер текстового файла журнала, в который пишется всё что происходит в системе. Размер указывается в килобайтах.
  • Порт сервера – порт на котором будет работать WEB-интерфейс. По умочанию это порт 8888. Т.е. что бы попасть в управление, нужно набрать в браузере http://127.0.0.1:8888
  • Кол-во подкл. – количество одновременных подключений к WEB-интерфейсу.
  • Пароль user – это пароль для входа в WEB-интерфейс под именем user. Данный пользователь может только просматривать происходящее, выключать/включать звук, таймеры и выходы.
  • Пароль moder – это пароль для входа в WEB-интерфейс под именем moder. Данный пользователь может то же что и user, а так же включать/выключать блокировки.
  • Пароль admin – это пароль для входа в WEB-интерфейс под именем admin. Данный пользователь имеет полные права.
    *пароли пользователей по умолчанию такие же как и имена.
    *если зайти на WEB-интерфейс с локального адреса, логин/пароль не требуется.
  • Порт модема – это номер COM порта, на который можно подключить GSM модем, для рассылки СМС оповещений.
  • № телефона – как раз номер, на который будут приходить СМС с оповещением.
  • Голос – список установленных в системе движков синтеза голоса. Выбранным голосом система будет говорить с тобой. Из проверенных мной, рекомендую Nuance Vocalizer Milena или Yuri. Да, понимаю, что они платные, но на момент публикации, это наиболее правильные по произношению локальные синтезаторы голоса.
  • Google API key – система может распознавать твои голосовые команды. Но что бы она это делала, нужно завести себе ключ Google Speech API. Как это сделать, можно спросить в том же Google. Процедура не сложная. Можно найти в интенетах и уже сгенерированные ключи, но Google накладывает ограничения на них в 50 распознаваний в сутки. И сколько пользователей висит на таких ключах и сколько команд ты сможешь дать системе в день, неизвестно.
  • RSS погода – это адрес RSS рассылки погоды. Существует для того, чтобы ты мог по голосовой команде «погода» услышать текущее положение дел на улице. Не плохо работает RSS от RP5.ru
  • RSS новости – это адрес RSS рассылки новостей. Принцип тот же: говоришь «новости» и синтезатор голоса читает тебе новости по ссылке. Не плохо работает с https://lenta.ru/rss/top7

Заглянем в следующий столбец «голос»:

  • Галочка «включить» – понятное дело, включает или выключает голосовые функции.
  • Выход – это номер выхода, который можно задействовать для включения колонок во время синтеза речи. Помогает бороться с раздражающим шумом и помехами в звуковых картах и колонках. Но нужно понимать, что колонки за частую включаются не сразу и можно пропустить слова.
  • Время «с» и «по» – указывает, когда можно говорить, а когда лучше помолчать.
  • Запуск системы – это фраза которую будет проговаривать синтезатор при каждой загрузки приложения.
  • Отключение mute – это фраза которую будет проговаривать синтезатор при активации голоса, после разрешения ему говорить. (при наступлении времени или при нажатии кнопки в WEB-интерфейсе.
  • Отработка таймера – это фраза которую будет проговаривать синтезатор при срабатывании таймеров.
  • Ошибка термометра – это фраза которую будет проговаривать синтезатор если с датчиком температуры что-то пошло не так.
  • Ошибка управления – это фраза которую будет проговаривать синтезатор если по каким-то причинам система не смогла выполнить команду.
  • Ошибка internet – думаю понятно и так. Нет интернета – нет распознавания речи.
  • Неизвестная команда – это фраза которую будет проговаривать синтезатор если ты сказал не существующую команду.
  • Включение и отключение охраны – это фразы которые будет проговаривать синтезатор при срабатывании контакта AUX.
    * все голосовые фразы имеют ограничение в 50 символов.
    * некоторые фразы имеют ключи %n или %t (описание в подсказках).
    * вместо голосовых фраз можно указать текстовый файл словаря (*.txt) сохранённый в папке ext (находится внутри папки с программой). В этом случае, при каждом срабатывании такой фразы, система будет читать произвольно выбранную фразу из указанного словаря. (фразы пишутся каждая с новой строки). Это придает более осознанный вид и подобие искусственного интеллекта.

Вкладка «Входы», «Выходы» и «Термометры»:

ComDev вкладка входов ComDev вкладка выходов ComDev вкладка термометров

  • Идентификаторы – Это названия входов. Они будут отображаться в WEB-интерфейсе, журнале, проговариваться синтезатором и т.д.
  • Нормальное состояние – эта галка определяет нормальное состояние входа замкнут или разомкнут. Противоположное состояние, естественно, будет считаться тревогой.
  • Таймер повтора (для входов) – это время, через которое тревога будет повторяться, пока состояние не перейдёт в норму. Если установлен 0, то повторов не будет. Тревога срабатывает только один раз.
  • Авто Таймер (для выходов) – это время в минутах. Если установлено, то после переключения выхода из нормального состояния в состояние тревоги (не важно каким образом), автоматически запускается таймер на указанное число минут, по истечении которого система вернёт выход в нормальное состояние.
  • Нормальная температура (для термометров) – это температура, выход за пределы которой будет означать тревогу.

Вкладка «SNMP»

ComDev вкладка snmp

Система умеет общаться с внешними устройствами по протоколу SNMP и собирать с них те или иные показатели (например, напряжения с ИБП) и строить суточные графики.

  • Идентификаторы – имена, под которыми будут отображаться показатели в WEB-интерфейсе.
  • IP адреса – думаю понятно. Адрес устройства в сети, на котором работает сервис SNMP
  • OID параметров – это адрес параметра внутри протокола SNMP.
  • Тесты – при нажатии кнопки тест, если OID и IP были введены верно, в окне теста появится считанное значение.
  • Нормальные значения – значения, выход за пределы которых будет означать тревогу.*Во всех вые указанных вкладках есть кнопки Открыть / Сохранить. Так можно открыть ранее созданный файл с настройками и сохранить его в текущую конфигурацию.

Вкладка «тревоги»

ComDev вкладка тревог

В данной вкладке создается список реакций на состояния тревоги и нормальных состояний всех входов, выходов, термометров и параметров SNMP.

  • Объект – выбор из списка входов, выходов, термометров и параметров SNMP для обработки
  • Состояние – реакция на тревогу или норму.
  • Тип тревоги – это вид реакции. СМС, голос или Ярлык. Если с первыми двумя всё понятно, то про ярлыки нужно пояснить. Если вы положите в папку ext любой ярлык (*.lnk), то его можно будет использовать как реакцию на тревоги.
  • Сообщение – Собственно текст который будет отправляться в СМС или проговариваться синтезатором речи. А в случае выбора в предыдущем списке типа «ярлык», тут открывается выпадающее меню со списком ярлыков, найденных в папке ext.
  • Добавить / удалить – кнопки, добавляющие тревогу в список или удаляющие выделенную тревогу из списка.
  • Открыть / очистить / сохранить – соответственно открывают файл ранее созданных тревог, очищают список и сохраняют список в текущий файл.

Вкладка «планировщик»

ComDev вкладка планировщика

В данной вкладке можно запланировать некоторые действия по времени. Принцип тот же, что и в тревогах, но с небольшими отличиями в интерфейсе.

  • Условие – периодичность, с которой будет выполняться задание.
  • Дата и время – тут всё и так понятно.
  • Тип – выполнить (голосовую команду или ярлык из папки ext) или сказать (просто указанную фразу).
  • Объект – список доступных для выполнения команд и ярлыков или просто текст голосового сообщения.
  • Открыть / очистить / сохранить – соответственно открывают файл ранее созданных задач, очищают список и сохраняют список в текущий файл.

Вкладка «Программатор»

ComDev вкладка программатора

Это по сути тот же планировщик, но для устройства. Задачи, указанные тут, будут работать не зависимо от компьютера, т.к. они прошиваются в память контроллера.

  • Входы – выбор входа устройства.
  • Условия – должен быть замкнут или разомкнут выбранный вход.
  • Выходы – выбор выхода который будет связан с указанным входом.
  • Поведения – что именно должен сделать выход при срабатывании выбранного входа.
    * выход можно включить, выключить, переключить, включить на время (включится на секунду) или включить при включенной охране (вход AUX).
  • Добавить / удалить – кнопки, добавляющие реакцию в список или удаляющие выделенную реакцию из списка.
  • Загрузить / сохранить – загрузить и сохранить реакции из файла или в файл.
  • Считать / стереть / прошить – кнопки, управляющие памятью устройства.

Глава 4. Software – Console & WEB

И так, мы прошлись с тобой по всем настройкам, можно сохранить их и запускать сам сервис WebComDev.

ComDev вид консоли

Первое, что можно увидеть при запуске, это порт на котором подвешен наш WEB-интерфейс. Если программа при запуске не обнаружила устройство (или устройство не с тем ID что у нее), то ты увидишь сообщение в консоли про демо режим. В этом режиме программа полнофункциональна, но закроется через 10 мин. Всё что отображается в консоли пишется в файл журнала. При желании из этой консоли можно и управлять устройством. Полный список команд можно получить командой help.

  • sw – переключает выбранный выход (например sw 1 – переключит состояние первого выхода).
  • clr – очищает журналы (например clr 1 – очистка журнала, clr 2 – очистка суточных графиков).
  • bl – переключает состояние блокировки выходов (bl 0 – переключает состояние блокировки управления звуком и очистки).
  • vcc – симуляция голосовой команды (например «vcc погода» – равнозначна произнесению команды «погода» голосом).
  • sms – отправка сообщения на указанный в настройках номер (например «sms привет» – отправит сообщение «привет»).
  • st – установка таймера на выход (например st1=5 установит таймер на первом выходе на 5 минут).
  • help – отображает все возможные команды в консоли.
  • webptt – симулирует состояние клавиши PTT (например webptt 1 – нажмёт клавишу PTT на 2 секунды, а webptt 0 – немедленно отпустит её).
  • thermal – выдает показания термометров.
  • i2ctext – отправляет текст на дисплей устройства, если он подключен.
  • mute – переключает состояние звука.

И раз уж речь зашла о командах, не плохо было бы рассказать про полный список голосовых комманд. В качестве голосовой команды можно использовать:

  • указанное в настройках название любого входа – ответит состоянием данного входа
  • указанное в настройках название любого выхода – переключит состояние выхода
  • указанное в настройках название любого термометра – ответит температурой на данном термометре
  • «температура» – расскажет о всех термометрах и температурах
  • указанное в настройках название любого датчика snmp – ответит параметром данного датчика
  • название любого ярлыка (*.lnk), лежащего в папке ext – запускает требуемый ярлык (название должно быть на русском языке)
  • «звук» – включит / выключит звук системы
  • «дата» – сообщит текущую дату
  • «время» – сообщит текущее время
  • «погода» – прочитает RSS погоды
  • «новости» – прочитает новостной RSS

Ну что, подходим к десерту. Давай заглянем наконец то в WEB-интерфейс:

ComDev главная страница

Тут мы увидим несколько вкладок, название системы (указанное в настройках) и строку состояния. В нормальном режиме она сообщает нам текущее время, а при отключении устройства или сервиса, сообщает о произошедшем. На главной вкладке можно наблюдать за суточными графиками и журналом всего, что происходит в системе. Так же можно очищать графики и журнал, вызвать голосовую команду, управлять звуком и блокировать эти функции по желанию.

ComDev страница входов

На вкладке входов можно просмотреть состояния всех входов в реальном времени.

ComDev страница выходов

На вкладке выходов функций побольше. Тут можно не только переключить состояние выходов, но и управлять таймерами и при наличии прав, блокировать управление.

ComDev страница термометров

На вкладке термометров можно отслеживать состояние температур в реальном времени.

ComDev страница snmp

На вкладке snmp можно отслеживать состояние сторонних датчиков в реальном времени.

Заключение

История данного проекта – это, наверное, история меня. Зародился он на почве моей тяги к электронике и рос вместе со мной. Начиная от далекой версии 1.0 (2002 год), когда я просто решил порулить светом с компьютера, и заканчивая современной версией 5.4 (2017 год), где квинтэссенция возможностей напоминает фарш из отрыжки единорога, мяса кота Шредингера и чёрт знает, чего ещё, мне всегда помогали множество друзей и иных вовлеченных. Так что назвать этот проект «моим» у меня язык не повернется. Тут я хотел бы отметить всех, кто так или иначе участвовал в этой разработке:

  • Necros – бессменное название устройства, первые версии программ управления им, и тонны вдохновения.
  • Gudron – основной вклад в разработку прошивок, драйверов и ПО. Человек, без которого проект загнулся бы в далёком 2005г и не воскрес бы.
  • KipdbIk – помощь в познании C#, лекии о говнокодерстве и разработка части ПО.

Если кто-то из Вас это читает: Спасибо вам за вот это вот всё.
Я не бросил его и до сих пор пилю…

ФАЙЛЫ ПРОЕКТА

3 комментария для “ComDev – Система диспетчеризации

  1. Офигенная “story of my life”. Добавить бы ещё исторических фото. В корпусе от des-3010 хотя бы. Или с армейскими разъёмами.

  2. От фото плат получил эстетический оргазм. Силуэты компонентов на белой маске — это круто.

Добавить комментарий

Ваш адрес электронной почты не будет опубликован.Обязательные поля помечены *

* Все комментарии проходят предмодерацию.