26/03/2010 20:21:03
При создании любых технических устройств человек всегда что-нибудь заимствовал у природы. Так самолет похож на птицу, машина на ползающего жука, а подводная лодка на огромного кита. Все процессы, происходящие вокруг нас, протекают одновременно, часто без видимой связи. Но логика природы такова, что изменяя работу какого-либо процесса, даже очень незначительно, изменяются миллионы внутренних параметров, создается огромное количество зависимостей, мы таким образом влияем на процессы идущие параллельно и зачастую совсем кардинально меняем события последующие. У известного американского писателя-фантаста Рея Бредбери есть рассказ, в котором путешественник во времени всего лишь случайно раздавил бабочку в прошлом, а вернувшись в свое время, очутился совсем в другом мире.
В предыдущей статье, я рассказал об общих принципах, на которых должна строиться система автоматизации дома. Сейчас же, прежде чем приступить к рассмотрению каждого модуля, блока, элемента системы в отдельности, хотелось бы поделиться мыслями относительно общесистемного информационного обмена. С моей точки зрения система Умного Дома энтузиаста (а мы говорим прежде всего о "своих руках") должна строится в идеологии многозадачности, многопоточности, множественности работающих параллельно процессов. Микроклимат в доме, комфорт, безопасность и экономичность - это те природные процессы, которые идут единовременно, но в то же время взаимозависимо. Логичным было бы и управлять этими процессами сразу, с помощью разных программных блоков, связанных между собой информационными связями.

Как я уже говорил, с моей точки зрения нет необходимости изобретать "велосипед" и делать все "с нуля" самостоятельно. Вряд ли получится лучше, чем у тех, кто занимается этим годами. Поэтому если какая-та задача или хотя бы элемент в реализации Умного Дома уже решена, нужно постараться использовать чужой опыт. Так мы находим, что функция видеонаблюдения уже решена с помощью программы ZoneMinder, функция визуализации, представления данных, интерфейса решена с помощью Apache и всевозможных фреймворков и CMS, функция координации, а также планирования задач - с помощью встроенных сервисов операционной системы, а функция для управления датчиками, исполнительными механизмами и прочими устройствами Умного Дома с помощью owfs, если речь идет о 1-wire, или другими библиотеками, программами и решениями, если речь идет о X-10, Modbus и прочих стандартах.
Наша задача заключается в двух вещах:
1. собрать в единое целое и связать между собой в единую систему различные программные блоки;
2. разработать высокоуровневую логику работы всей системы (что, когда и зачем включать и по каким алгоритмам)
В качестве операционной системы я применяю Linux. Эта ОС очень удачно вписывается в идеологию своеобразного конструктора, среды, в которой совершенно различные процессы могут быть связаны между собой десятками различных способов. Безусловно, любая современная ОС, в том числе Windows подходит для решения этой задачи, но в Unix-подобных системах гораздо легче при необходимости проникнуть сквозь визуальный десктоп, вглубь, к системным процессам. В Unix мы найдем больше способов для сопряжения различных программ между собой. Именно в Unix появились и развиваются Интернет-решения, которые я использую - это их родная среда. Но, тем не менее, все это также прекрасно работает в Microsoft Windows, хотя и с определенными сложностями.
Итак, моя система автоматизации Умного Дома построена на Интернет-решениях, а именно на таких программных блоках как Web-сервер, реляционная база данных, скриптовые языки программирования, на таких протоколах как TCP-IP, HTTP, на таких стандартах как HTML, CSS. И выбор этот далеко не случайный. Интернет-технологии прочно вошли в нашу жизнь и это проникновение продолжается. Уже очень многие бытовые приборы и оборудование имеют поддержку указанных протоколов и стандартов. Таким образом, уже сейчас можно выбирать для дома то оборудование, которое управляется через Интернет-технологии, а в будущем такие устройства будет, думаю, превалировать. Мы уже имеем на сегодняшний день не только бытовые медиа-плееры с поддержкой TCP, SMB, Ethernet, но и холодильники, микроволновые печи и даже стиральные машины. Пусть Вас не пугает тот факт, что иногда к прибору требуется подвести кабель UTP Cat 5. Все больше устройств поддерживают Wi-Fi и прочие радио-технологии. Стандарты Интернет давно уже показали свою перспективность, гибкость, надежность и главное - долговечность. Скриптовые языки программирования, такие как PHP, Perl, Python активно развиваются, просты в использовании, поддерживаются всеми платформами, имеют огромное количество библиотек, баз знаний и решений.
Программировать интерфейс между системой и человеком тем более нужно именно на Интернет-решениях, так как это позволит контролировать и изменять работу систем Умного Дома не только из локальной сети дома, но и через Интернет или даже мобильный телефон. Большинство современных мобильных телефонов имеют встроенные Web-браузеры. Даже бытовые телевизоры уже начали производить с возможностью доступа в Сеть и браузером Интернет. Сидя на домашнем диване, не включая компьютер можно будет и посмотреть камеры наблюдения и открыть дистанционно дверь соседу. И все это без каких-либо сложных аппаратных конвертеров, мультиплексоров, переходников. Да и сам Web-интерфейс не нужно переделывать под конкретные устройства. Современные средства CSS+HTML позволяют делать так называемые "резиновые" Интерфейсы, которые сами адаптируются к размеру и разрешению экрана. Современные фреймворки и библиотеки сами определяют какие стандарты поддерживает клиентское ПО, а какие нет и используют нужные компоненты.
Важной отличительной особенностью такого подходя является тот факт, что для сопровождения такой системы или ее расширения возможно привлекать сторонних специалистов, занимающихся в сфере Интернет-технологий, Web-программистов и администраторов. Дело в том, что скриптовые языки, такие как PHP или Perl не компилируются и не кодируются. Написанные для Умного Дома программы всегда существуют в виде исходных кодов, что позволяет вносить в них любые коррективы. Кстати, эта особенность также интересна и с точки зрения удаленной коррекции кода программы. Например, будучи в отъезде, я смог удаленно с помощью SSH зайти на свой сервер через Интернет и исправить замеченную ошибку в регулировании отопления, связанную с ошибкой в управлении 3-х ходовым смесителем.
В моей системе все устройства, будь то датчики или исполнительные механизмы существуют как бы сами по себе, а программы управления сами по себе. Причем программы управления напрямую между собой также никак не связаны. Существует программа для опроса датчиков и записи их значений в базу данных. Существует программа для управления исполнительными механизмами и записи их текущих значений в базу данных. Существуют, наконец сами программы управления, которые используют информацию в базе данных (значения, показания, состояния) для того, чтобы отработать определенные алгоритмы и вызывают функции для управления исполнительными механизмами. Схематично этот процесс можно представить в виде следующей схемы.

Центром системы является СУБД. В моем случае используется MySQL, но можно использовать любые системы управления базами данных, такие, например, как Oracle или Microsoft SQL. MySQL очень небольшая и функциональная система, удобная для хранения не очень большого количества данных. Однако в этой СУБД нет многих возможностей, доступных в Oracle. Последний гораздо более адаптирован для работы с большим количеством пользователей и огромными массивами данных. Впрочем, для работы систем Умного Дома достаточно простой и удобной СУБД MySQL.
В СУБД хранится вся текущая информация об элементах системы, состояние ключей, значения датчиков, а также история значений. В ней также хранятся конфигурационные данные модулей управления, такие как требуемая температура в помещении, количество и параметры контуров отопления, адреса датчиков. Кроме того, в базу записываются логи работы программы, их расчетные значения. Так, значением температуры в помещении может воспользоваться любой программный модуль. Любой программный модуль может (если это необходимо для работы его собственного алгоритма) "посмотреть" в каком состоянии находится соседний программный модуль, как он реагирует на какие-то изменения. Это важно, например, для параллельной работы системы отопления и кондиционирования. Эти системы могут работать по отдельности, но будучи запущенными вместе, они должны координировать свою работу. Если пользователь включил режим интенсивного проветривания дома, в результате чего температура в доме начала резко падать, система отопления должна понимать что происходит и не отвечать на это резким поднятием температуры в радиаторах, чтобы избежать раскачки системы после выключения активной вентиляции и не допустить перерасхода газа.

Но хранения всех данных в централизованной СУБД удобно не только с точки зрения обмена информации между управляющими модулями, но и с точки зрения мониторинга работы системы через уже упомянутый Веб-интерфейс. Это своего рода такой же клиент СУБД, как и модули управления. Веб-интерфейс через СУБД имеет возможность просматривать, анализировать текущие данные, а также управлять работой отдельных программ, но не напрямую, а опосредованно. Другими словами, модули работают на базе тех данных, которые есть в СУБД и существует возможность, как с помощью Веб-интерфейса, так и с помощью других модулей и программ управлять алгоритмами работы. Очевидно, что это весьма гибкий и удобный механизм построения такого рода систем. Клиент-сервер.
Такая идеология и подход к решению проблемы автоматизации дома очень удобен с точки зрения расширения системы или ее изменения, когда все блоки работают параллельно, связаны между собой, но в тоже время независимы друг от друга. У нас всегда есть возможность завершить работу любого блока без какого-либо существенного влияния на работу других систем. Единственным критически-важным элементом в этой схеме является сама СУБД, без которой вся дальнейшая работа невозможна. Но в действительности потенциально "рискованные" элементы этой схемы все-таки самописные скрипты управления, а такой надежный и стабильный продукт как MySQL.
2010-08-27 10:39:31 | Андрей
Потрясающий сайт, очень понятный и информативный. Казалось бы, простые вещи, а когда все соединены вместе, получается нечто удивительное. Автору огромный респект!