Умный дом linux can

Создание умного дома и разработка своего протокола

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

Я тут решил забить на всю работу и заняться чем-то для души. Снова взялся за паяльник. Решил автоматизировать дома всё и вся. На старой-то квартире у меня был умный дом или что-то типа того — мог свет в комнате включать через Интернет и всё такое.

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

Было решено, что лучше делать много отдельных устройств, каждое из которых отвечает за строго определённую задачу, имея возможность с лёгкостью подключать их к какой-то общей сети. И чтобы у каждого устройства был адрес и свой набор команд. Что-то вроде CAN-шины в современных автомобилях. При этом хочется, чтобы сеть была децентрализованной, без мастер-устройства, чтобы соединялись все по одному проводу, легко реализовывалось без покупки дополнительного контроллера, ну и чтобы длинные провода не были проблемой.

На борту микроконтроллера есть всякие I²C, да UART, но они явно не удовлетворяют условиям. В итоге было решено разработать свой велосипед протокол.

Имеется доминантный и рецессивный сигналы, как в CAN. В случае с проводами (кто знает, может я ещё и радио или ИК свет буду использовать) доминантный — это прижимание линии данных к земле. В обычном состоянии линия данных имеет подтяжку к +5В. Таким образом, когда устройство видит, что линия уже прижата к земле, оно понимает, что какое-то другое устройство уже шлёт данные, и ждёт освобождения линии. Сами данные кодируются длиною доминантных сигналов. 1T — ноль, 3T — единица, пауза между ними — 1T. Каждая передача начинается инициализацией в виде длинного сигнала в 10T. После многочисленных экспериментов на микроконтроллерной многоножке…

… я решил, что оптимальное значение T = 0.000064 секунды. При этом потерь (почти?) нет. Я не думаю, что по этой сети будет передаваться большой объём данных. Выводить сообщения из твиттера на дисплей в туалете если только.

Сами же пакеты данных имеют следующее строение: 2 бита приоритет пакета (на случай, если устройства шлют их одновременно, что очень маловероятно), 8 бит — адрес отправителя, 8 бит — адрес получателя (0xFF — широковещательная рассылка), 8 бит — номер команды, 8 бит — длина поля данных в байтах, соответствующее число байт данных и 8 бит — контрольная сумма, куда же без неё.

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

Читайте также:  Linux под каким пользователем

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

Надо отдать должное одной маленькой коробочке. Нормального осциллографа у меня нет, но несколько лет назад я заказывал на ибее самый дешёвый осциллограф на USB, для компьютера. Всего на 1MHz. Когда получил и попробовал, решил, что это бесполезный китайский ширпотреб, и я зря выкинул деньги, и отложил в дальний ящик. А теперь решил достать… Если бы не он, я наверное до сих пор всё это отлаживал бы. А на нём сразу всё видно и понятно.

Получилась сесть из трёх проводов — земля, питание и данные. Да, не хотелось возиться с питанием каждого устройства, поэтому я решил подвести везде и 9-12 вольт постоянного тока, а на каждом устройстве уже ставить банальную КРЕНку.

Однако, всю эту сеть ещё надо как-то связать с компьютером и Интернетом. Для этого я сначала сделал девайс на COM-порт:

Работала эта штука откровенно хреново. И почему я не решил делать сразу на USB? Не знаю. Позже была куплена микросхемка FT232. Принципиально в QFN корпусе.

Впервые паял QFN корпус. получилось далеко не сразу, плата аж почернела от перегрева. Но заработало! Воткнул я это дело в роутер, ибо он работает круглосуточно, а связь мне нужна не просто с компьютером, но и с Интернетом.

В роутере же обычный Linux. После небольших танцев с бубном получилось подсосать к нему моё устройство. Далее пришлось вспоминать навыки программирования под никсы. Задача была не такая сложная — расшарить виртуальный COM порт в сеть с возможностью подключения к нему одновременно нескольких клиентов. Потом я сделал, чтобы при получении каждого пакета выполнялся простой скрипт. Таким образом, можно легко заставить роутер реагировать на различные события простым изменением shell-скрипта, без перезапуска демона. Потом сделал ещё и работу с fifo псевдофайлом, что дало мне возможность отправлять пакеты в сеть прямо из командной строки. Например, команда: echo «04010803» > fifo отправляет пакет с приоритетом 04 на устройство 01 с командой 08 (управление реле) и данными 03 (включить 1ю и 2ю лампы). Само собой, вручную это всё набирать мне не нужно, но сильно облегчает написание скриптов, которые всё автоматизируют. Под винду же была написана библиотека, которая подключается к демону на сервере и получает/отправляет пакеты. Полноценного софта ещё нет, но свет в комнате, телевизор и ресивер я уже могу включать горячими клавишами на клавиатуре, что очень облегчает жизнь.

Но потом я решил ещё написать свой загрузчик. Уже не представляю, как я мог бы обойтись без него. Он позволяет обновлять устройствам прошивку прямо по моей сети! Это маленькая програмка, которая сидит в конце памяти микроконтроллера и запускается перед основной программой. Вся её задача — подать признаки жизни, а затем либо запустить основную программу спустя несколько секунд, либо скачать и обновить прошивку, если поступает такая команда. С огромным трудом я уместил весь этот код в один килобайт. Счёт шёл буквально на байты. Реализована только самая основа — никаких проверок на свободность линии, ожиданий и прочих фишек. Только передача данных и проверка контрольной суммы, но для загрузчика этого вполне достаточно. Как же это здорово — экономить каждый байт памяти, работать напрямую с регистрами, оптимизировать код по полной… Низкоуровневое программирование приносит просто море удовольствия =)

Читайте также:  Ssh keygen linux git

Для компа же я написал соответствующую утилиту командной строки, которая отправляет устройству команду перезагрузки, команду перехода в режим прошивки и саму прошивку. Достаточно прописать её в Makefile проекта, и…

Нажатием одной клавиши в Programmer’s Notepad я могу обновить прошивку любому работающему устройству в своей квартире. Без отключения, без паяльника, не отходя от компьютера. И весь процесс занимает 10-20 секунд. Это просто мегаудобно. Конфигурацию некоторых устройств гораздо проще поменять, изменяя саму прошивку, чем предусматривать всё заранее. Например, добавить в настенный выключатель реакцию на широковещательные пакеты, которые рассылает ДУ приёмник, что позволяет теперь включать люстру с пульта от DVD плеера. Напоминаю, что наличие мастера для этого не требуется, девайсы общаются друг с другом напрямую 🙂 При этом нельзя убить устройство неудачной прошивкой — загрузчик всегда запускается раньше. Теперь каждое новое устройство достаточно прошить простеньким шаблоном, сделав минимальные изменения (ноги и ID устройства), после чего можно смело ставить его на своё место, а потом уже начинать писать для него прошивку 🙂

Сейчас у меня уже шесть устройств в моей сети, и пока что всё работает идеально 🙂 Были проблемы только с шумом в питании, но меня опять же спас мой осциллограф. Надо будет купить полноценный.

Источник

Умный дом: ПО для автоматизации с открытым исходным кодом

OpenHAB, умный дом

Все большее распространение получают домашняя автоматизация, автоматизация inmotic и городская автоматизация. В умный дом Он здесь, чтобы остаться, и с развитием новых технологий в электронике, робототехнике, искусственном интеллекте, телекоммуникациях и IoT это только начинается.

В этой статье я представляю вам несколько проектов с открытым исходным кодом, которые имеют прямое отношение к умному дому и позволяют автоматизировать домашние дела.

  • 1 Лучшие платформы с открытым исходным кодом для умного дома
    • 1.1 openHAB
    • 1.2 Домашний помощник
    • 1.3 OpenMOTICS
    • 1.4 Джидом
    • 1.5 iBroker
    • 1.6 АГО Контроль
    • 1.7 Domoticz
    • 1.8 ФГЭМ
    • 1.9 Калаос
    • 1.10 пимтик
    • 1.11 Хоумбридж.ио
    • 1.12 Смартоматика
    • 1.13 МойКонтроллер
    • 1.14 Пидом
    • 1.15 ГлавнаяGenie

    Лучшие платформы с открытым исходным кодом для умного дома

    Здесь у вас есть список с некоторыми из самых известных и лучших платформ для умного дома:

    openHAB

    openHAB — один из крупнейших проектов в сообществе разработчиков ПО с открытым исходным кодом для умного дома. Проект, который находится в постоянной разработке и который уже поддерживает более 1500 устройств от Sony, LG, Pioneer, Samsung и многих других. Это бесплатное программное обеспечение (с коммерческой версией), и вы можете загрузить его в любой операционной системе, не полагаясь на облако.

    Домашний помощник

    Домашний помощник — еще одно программное обеспечение для автоматизации умного дома и сообщества. Эта платформа позаботится о местном контроле и уважает вашу конфиденциальность. Кроме того, это платформа, которая имеет много общего с openHAB, но при этом действительно гибкая.

    OpenMOTICS

    OpenMOTICS имеет несколько иной подход. Но это очень плавное и практичное решение. Он предлагает настраиваемые модули, чтобы вы могли использовать их со своим программным обеспечением. Купить их можно в интернет-магазине.

    Джидом

    Джидом — еще одна отличная альтернатива автоматизации умного дома, хотя и несколько менее интуитивно понятная, чем такие решения, как openHAB или другие, упомянутые выше. Самая большая проблема — это язык, поскольку это французская версия. К счастью, документация доступна на других языках, таких как английский, немецкий или испанский.

    iBroker

    iBroker — еще один проект с открытым исходным кодом для автоматизации умного дома, появившийся в начале 2017 года. Он очень быстро нашел свое применение благодаря своей простоте и высокой надежности.

    АГО Контроль

    АГО Контроль — это панель управления с открытым исходным кодом для быстрого управления и автоматизации устройств умного дома. Он легкий и может быть комплексным решением как для внутренних, так и для внешних устройств.

    Domoticz

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

    ФГЭМ

    ФГЭМ еще одна известная в мире домашняя автоматизация и умный дом. Это Perl-сервер с открытым исходным кодом (GPL), используемый для автоматизации обычных домашних задач, таких как включение и выключение освещения, отопления и т. Д.

    Калаос

    Калаос — еще один проект из Франции. Он имеет открытый исходный код и предназначен для домашней автоматизации. Он полный, с веб-решениями, Android, iOS, Linux и другими. Однако не похоже, что у него такое активное сообщество, как у других .

    пимтик

    Пиматик — это аппаратно-независимая платформа для автоматизации умного дома, содержащая более 70 плагинов. Он работает на Node.js, очень гибкий, быстрый и простой.

    Хоумбридж.ио

    Хоумбридж.ио — это современный и легкий сервер Node.js, эмулирующий iOS HomeKit API. Его можно установить на SBC, например Pi, и обрабатывать те же запросы, что и на iOS, через Siri.

    Смартоматика

    Смартоматика — еще один проект умного дома с открытым исходным кодом. Эта структура может надежно работать для автоматизации задач.

    МойКонтроллер

    МойКонтроллер Он также популярен и позволяет запускать его на устройствах с очень ограниченными ресурсами, таких как Raspberry Pi 1-го поколения. С его помощью вы можете управлять устройствами в вашем доме или офисе с большой гибкостью. Он основан на Java, чтобы улучшить его совместимость с различными платформами. С другой стороны, жаль, что сообщество настолько мертво .

    Пидом

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

    ГлавнаяGenie

    ГлавнаяGenie — еще один сервер автоматизации умного дома с открытым исходным кодом. Он предлагает отличный опыт, а справочная информация доступна в Интернете.

    Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

    Полный путь к статье: Любители Linux » SPA-программы » Умный дом: ПО для автоматизации с открытым исходным кодом

    Источник

Оцените статью
Adblock
detector