27 ноября 2012 в 20:56

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

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

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

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

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

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




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



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

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

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

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

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



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

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



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



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



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

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

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



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

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

upd:
Проект на GitHub: github.com/ClusterM/clunet
Cluster @ClusterM
карма
293,0
рейтинг 0,0
Пользователь
Похожие публикации
Самое читаемое Разработка

Комментарии (97)

  • +1
    Очень интересно, но мета данный в фотографиях лучше удалять, а то ещё приедет кто.
    а что за осциллограф на USB, тоже, хочется посмотреть?
    • 0
      CTI 260. Сейчас такой уже что-то не найду…
  • +4
    Заманчиво, но во всех жизненно важных DIY проектах(яркий пример — умный дом) есть 1 минус(по крайней мере, говорю про себя) — когда то банально надоест заниматься их поддержкой.
    И если сейчас все хорошо, то на момент возникновения проблемы уже может не быть времени\желания заниматься ее поисками, вспоминать самописные прошивки и отлаживать все это.
    • +2
      Это особенно актуально, когда перестают работать важные устройства, используемые в повседневной жизни, например банальный выключатель света. Поэтому выключатель мой отлично работает и без сети, да ещё и сенсорные кнопки ему сделал.
      А если перестанут работать датчики температуры или эмулятор пульта ДУ, то я лишь потеряю удобство, которое получил. Хуже, чем было без всего этого, уже не станет.
    • +1
      поэтому нужно заиметь привычку при любых разработках составлять документацию — для себя в будущем — я частенько себе в прошлом говорю за это спасибо, это как код комментировать.
  • –11
    Вай-фай роутер в помощь, будет вам сеть по всему дому без необходимости тянуть провода, сразу с адресацией, протоколами без потерь, возможностью развернуть сервера на любом из узлов и, конечно же, с возможностью писать на высокоуровневых языках без перепрошивки железа.
    • +4
      Это шутка была, надеюсь?
      • –12
        Нет, это был дружеский совет по эффективной реализации.
        Я сильно сомневаюсь что вы сделаете ваши оконечные устройства дешевле 1000р с учетом комплектующих, времени на изготовление платы (я уж не говорю о ее промышленном исполнении), корпуса и т.п.
        На базе мелких роутеров с линуксом можно сделать оконечное устройство в пределах 1000 рублей.
        Проблем с подключением к нему датчиков на любых интерфейсах (rs-232, i2c, spi, 1-wire) нет.

        При этом у вас сразу же будет высокоскорстная и покрывающая всю квартиру связь (позволяющая даже стримить видео, что тоже организуется очень легко), полноценная ОС, решения под которую поддерживать проще, чем свои велосипеды, и целый набор инструментов для организации фронт-энда и администрирования узлов системы в виде разнообразных веб-серверов и т.п.
        • +14
          У меня уже шесть устройств (Вы пост не читали, ведь?), себестоимость каждого вышла менее 100 рублей, на изготовление каждого уходило всего несколько часов. Есть возможность подключать всё это и без проводов (пост не читали, ведь?), всё это управляется Wi-Fi роутером под Линуксом (пост не читали, ведь?), с веб-админкой и всеми делами: home.clusterrr.com/
          И я ловлю кайф от низкоуровневого программирования (пост не читали, ведь?)
          Смысл именно в том, что я легко могу добавить маленькое устройство ценой 50-100 рублей, выполняющее простую задачу и имеющее доступ к сети и Интернету.
          • –9
            Я не говорил про центральный узел, я говорил про беспроводные оконечные устройства, которые у вас в данный момент подключены по проводам. Меньше ста рублей на устройство с учетом времени изготовления и печатной платы у вас не выйдет.
            Чтобы «легко добавить маленькое устройство» нужно тянуть эти провода, доступа к «сети и интернету» на маленьком устройстве не будет, т.к. у него нет сетевого контроллера, а ваша шина функций моста не выполняет.
            • +7
              Впечатление, что вы мой текст читаете как-то по диагонали. Утверждаете, что у меня не получится сделать то, что я уже сделал.
              • –12
                Вы не привели никаких сведений о схематике оконечных устройств.
                Без этого «сто рублей» притянуты за уши. Беспроводной связи вы тоже не сделали, кстати. Только на центральном узле, который один на квартиру.
                А я вам рекомендую вместо одного центрального узла в лице здорового асусовского роутера сделать несколько маленьких, в лице мини-роутеров от того же TP-линка, избавившись от большого количества проводов. А ваши оконечные устройства уже подключите к нему, раз вам такое удовольствие доставляет их изготавливать.

                Понимаете, не один узел. Тогда решение будет на порядок более гибким и удобным.
                • +5
                  Дык понятно же, что всё без лишней обвески. Цена микроконтроллера — 30 рублей. Радиорешение или ИК решение сделать не проблема, и это явно не стоит 1000 рублей. Правда, питание всё равно придётся делать.
                  Я могу с таким же успехом просто поставить везде розетки, что и делаю.
                  Думаю, это бесполезный спор.
                  • –7
                    У вас и так один узел на линуксе, вместе с платой преобразователя в вашу шину, он стоит дороже. Используя вместо одного узла несколько (на мелких роутерах), получите более удачное решение. К которому, кстати, сможете прикрутить видеонаблюдение.
                    • +3
                      Мне кажется, что вы в корне не понимаете поставленной задачи. Если мне нужно будет сделать видеонаблюдение, я учту ваши советы. Можете дать ссылку на подобный роутер, кстати?
                      • 0
                        Понимаю, потому что сам этим занимался. И прошел через все эти велосипеды, начиная с ИК и кастомного радио.
                        В итоге пришел к реализации, которая наиболее гибкая и эффективная в силу того, что работает все это под управлением linux и сразу же есть WiFi доступ. Это определяет и простоту поддержки данного решения, чем меньше там низкоуровневых велосипедов, тем ее проще расширять и поддерживать.
                        Если нужно несколько оконечных устройств — допустим несколько датчиков в непосредственной близости друг от друга, то конечно, не по роутеру на датчик делать.
                        Но датчики без проблем можно подключить к нему по тому же 1-Wire, и не тянуть через всю квартиру эту шину.
                        У вас хорошее решение с точки зрения лично опыта, тут я ничего и не говорю, вы сделали намного больше чем делают всякие ардуинщики. Просто теперь, т.к. вы свой опыт уже получили, я рекомендую не отметать сразу другие варианты, а посмотреть на возможности реализации, которые имеют множество плюсов (и отлично комбинируются с вашим подходом — вам же не надо выкидывать ваши оконечные устройства, просто можете разбить текущую систему на два узла, допустим, сократив число проводов — скажем, по комнатам).
                        Роутер — TL-MR3020 (либо его китайский аналог TL-WR703N).
                        Вот моя статья об аналогичной проблеме.
                        • +3
                          Я не назвал бы себя нищебродом, но тут всё упирается скорее в вопрос цены. Моя задача — пойти путём установки огромного количества ультрадешёвых устройств, подготовив себе лёгкую в разворачивании платформу. Вон у меня в ящике десяток микроконтроллеров, из которых я могу быстро что-то состряпать без особых усилий, воткнуть в розетку, и оно будет работать. Иначе я использовал бы как минимум CAN вместо своего велосипеда.
                          • +2
                            Оставьте, человек явно не хочет слушать и читать то, что ему говорят. Единственная его цель — нести идею о том, что в лампочке нужен линукс в массы.
                            • –1
                              Я просто оставлю это здесь: http://www.kickstarter.com/projects/limemouse/lifx-the-light-bulb-reinvented
                            • –3
                              А также вот это, еще больше подходит тематике: http://www.kickstarter.com/projects/cloudlight/light-1
                              • 0
                                еще больше подходит тематике

                                =O.O= Ооок.
                              • 0
                                Я это и имел ввиду.
                            • 0
                              Его девайсы, с вайфаем и линуксом, должны жрать на порядок больше энергии. И это плюс ещё к тому, что стоят в 10 раз дороже. Да и потом стоимость разработки увеличивается ещё и за счёт того, то придётся разрабатывать свою систему секурити ибо, как известно, вардрайверы не спят. ;) О надёжности умолчу. Более простые девайсы гораздо проще делать надёжными, нежели более сложные.
                      • 0
                        Глянь на досуге на HLK-RM04. Теоретическая (сам не проверял) совместимость с OpenWRT, до 12 GPIO, 2 Ethernet-порта, 2 последовательных порта, WiFi. Цена на TaoBao 8-9 евро (для внешнего рынка повышается до 13-15, чтобы дешевле — нужны знакомые из Китая :)), размер самого модуля сравним с CF-картой. Может много интересного получиться.
                  • +1
                    Извините, а что за микроконтроллер за 30 руб?
                    • 0
                      да те же stm32 — была у них раньше модель, которая меньше бакса стоила, но они демпинговали тогда, сейчас почти в 2 раза цены подняли на всё(что ожидаемо): www.compel.ru/?s=stm32 вот здесь например можете посмотреть
                    • 0
                      У меня сейчас везде ATMEGA8A.
            • +1
              К вашему роутеру тоже придётся тянуть провода, что бы обеспечить его электричеством.
              • 0
                Электричество есть на самом объекте управления, 220В. Будь то телевизор, кондиционер или лампа.
                • 0
                  В выключателе нет 220В… Он включается последовательно лампе.
                  • 0
                    В выключатель его в большинстве домов ввести не проблема, там зачастую есть лишние провода в расчете на многорожковые люстры.
                • 0
                  Остальные 5 устройства, кстати, не имеют 220 вольт под боком и располагаются достаточно далеко друг от друга…
    • +3
      Вы предлагаете в каждый выключатель по WiFi-роутеру поставить?
      • 0
        Располагающиеся вблизи объекты можно повесить на один. А так — почему нет? Это все равно выходит дешевле и эффективнее велосипедной реализации. И уж точно более удобно, чем тащить провода к каждому объекту.
        WiFi-роутер это маленькая плата 60х60 мм, одноплатный компьютер с линуксом, потребляющий в такой конфигурации 0.5 Вт.
        • 0
          Мне нравится ваша идея. Но она применима для отдельных устройств — для всего дома не накупишь довольно дорогих роутеров.
          Кстати а есть такой же роутер со встроеным БП?
          • 0
            Его собственнный БП не проблема встроить. Есть, кстати, аналог от того же TPLink'а со встроенным аккумулятором даже.
            Они, на самом деле, дешевые — 800 рублей за центральный узел это очень немного.
            Тут, почему-то, восприняли это как идею поставить одни роутеры. Это не так, в идеале, роутеры являются узлами. Грубо говоря, у меня в одном конце комнаты выключатель люстры, в другом — кондиционер и окно. В прихожей дверь с глазком и люстра.

            Итого три роутера — три узла сети. Тот что в комнате около выключателя нагружен еще и на датчик температуры, влажности, CO2 — чего там хочется — без необходимости тянуть витуху. Тот что около кондиционера — на ИК трансмиттер кондиционеру и датчики температуры за окном. Тот, что в прихожей — на выключатель света, открывалку двери и вебку, смотрящую в глазок.
            Все три — клиенты домашней вай-фай сети, никаких левых точек. Централизованное приложение CGI-запросами собирает с них инфу. Вот и все, никаких проводов, легкая и непренужденная передача видео, сбор данных.
            При желании тем же методом можно себе в ванную стримить музыку с домашнего сервера.
        • 0
          Пожалейте эфир и соседей.
          Сейчас типично в многоквартирном доме вокруг ловится полтора десятка вайфаев (и это в Новосибирске, не в default city!) Куда дальше забивать эфир? Или «главное, что у меня лампочка с пульта включается. А то, что в целом у меня и у соседей падает качество связи — мне до лампочки»?
          • 0
            Станции, а не точки доступа. Все эти прибамбасы — станции, подключенные к центральному роутеру. Вы можете десяток в квартире разместить, нового не поймается. Особенно в условиях отсутствия обмена данными — сколько там клиенты шлют, пару байт, маякуя что они до сих пор не отвалились. Пока к ним не обратитесь, даже обмена не будет.
          • 0
            Что-то все зациклились на включении лампочек, будто это единственное, что можно автоматизировать дома. Это не в упрёк Вам, просто мысли вслух.
            • +1
              Да это просто самое очевидное и видимое применение :). Пришёл приятель в гости — а ты — щёлк «лентяйкой» — и включился свет! А всё остальное не так заметно с первого взгляда. Да и не всегда возможно. Техника нынче больно умная. Если какой-нибудь чайник можно включить, коммутируя цепь питания — то какую-нибудь современную микроволновку с сенсорным управлением и собственными мозгами зарулить на умный дом уже не так просто.
              • 0
                На практике я гораздо чаще использую управление телевизором/ресивером через ИК трансмиттер, нажимая горячие клавиши на клавиатуре компа. Например, так гораздо удобнее регулировать громкость, чем искать пульт ДУ. Пожалуй, это первое, что мне хотелось сделать :)
              • +2
                Да ну? Как раз это в последнюю очередь надо. Умный дом должен начинаться с умного сортира:

                1) автоматическая вентиляция
                2) Защита от протечек и перекрытие воды когда квартира ставится на охрану.
                3) слежение за температурой стояки и подключение бакового нагревателя автоматом
                4) логи температуры воды, для озолупливания коммунальщиков.
                5) автоматический ароматизатор/освежитель

                А также со входной двери:

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

                Освещение в последнюю очередь идет:

                1) аварийное освещение. Пропало питание — зажигаются светодиодные минисветильники от батарей и то только в темное время суток.
                2) дистанционное управление светом, в идеале голосовое.

                Вот это все реально облегчает и упрощает жизнь, а главное легко реализуемо в обычной квартире без тотального дестроя всего и вся.
                • 0
                  Автоответчик есть, видеокамеры есть, погода в прихожей отображаетя… Всё остальное учту, спасибо :) Пожалуй, начать стоит действительно с туалета. Спускать воду по голосовой команде: «Бомбы сбросить!» =D
      • +8
        Сейчас модно в каждый выключатель по ардуине ставить. Надо пойти дальше и засунуть туда компьютер с виндой.
        • 0
          Но зачем?
  • +1
    Почему не 1-wire? Очень интересует сравнение с этой технологией.
    • +1
      Я рассматривал 1-wire :) Он очень привлекает простотой, но обязательно требует наличия главного устройства, а хочется, чтобы всё было самостоятельным. У меня сейчас одно из устройств выполняет функцию моста между моей сетью и 1-Wire, опрашивает датчики температуры.
  • 0
    Супер! Все в точности так, как я хотел реализовать для себя!
    Мое детище пока в мыслях. У Вас — в жизни. Завидую всеми фибрами души.

    Но почему не железный CAN почему свой протокол?
    • 0
      CAN-контроллеры влетают в копеечку, а у меня из обвязки только транзистор с резистором, и то можно без них. Я решил пойти путём огромного числа простых и дешёвых устройств :)
      • +1
        Да, с CAN — цена за простоту и достоверность данных.

        Еще вопрос — Ваше обновление по сети схематично выглядит так:
        1. Устройство принимает некую команду
        2. По команде оно ушло в бутлодер
        3. Бутлодер самостоятельно принимает данные, тут же шьет
        4. Обратная перезагрузка в основную (уже обновленную программу)
        Похоже?

        Все гениальное — просто, а то я по заносчивости уже хотел изобретать JIT-компилятор.
        • 0
          Да именно так. При условии, конечно, что основная прошивка жива, иначе надо будет сначала перезагрузить устройство руками. Если прошивки кроме бутлоадера совсем нет, микроконтроллер при попытке перейтик ней, сам перезагружается, бесконечно ожидая прошивки.
          Бутлоадер достаточно просто пишется. Я ожидал, что сложнее будет. На эту тему есть отличный FAQ:
          blog.schicks.net/wp-content/uploads/2009/09/bootloader_faq.pdf
      • 0
        Интересная идея. Но надо обжиться разными интерфейсами — теми же 1-wire, ethernet и т.д.
        А пока этого нет я бы использовал 1-wire. Для умного дома, реально умного, а не просто выключателей света — все равно будет свой головной компьютер.
        • 0
          Можно сказать, что роутер с линуксом и есть головной компьютер, но если без него сеть работать не будет, это сильно понижает надёжность.
          • 0
            Надежность понятие относительное. Можно резервировать компьютеры. Но если мне надо управлять домом, то это должно делаться централизованно, и управление отдельными датчиками для меня плохая идея. Этими датчиками все равно будет управлять центаральный мозг. Какой нить ARM компьютер
            • 0
              У меня как раз изначально идея, что устройства могут посылать команды друг другу. Это уже реализовано, и получается очень удобно.
            • 0
              В централизации есть недостаток именно в этом центре:
              1. Во-первых, если умирает центр, то перестает работать все. Хорошо, если сеть реализована на условной цетрализации (например, обработчик выключатель+лампочка — в одном подмодуле).
              2. Центр — скорее всего довольно сложная, мощная и относительно дорогая штука. Чем сложнее устройство, тем ниже надежность итд.
              3. Резервирование центра — умножение стоимости решения.
              4. Скорее всего, на центре будет не ОС реального времени. Готовимся к подвисаниям и лагам.

              ИМХО, гораздо лучше, когда устройства могут независимо общаться между собой, а «центром» выступает мост из шины умного дома в ethernet. На это устройство и вешаем память на последние события и состояния и внешнее командование.
  • 0
    Торт!

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

    PS Всегда восхищался твоей увлеченностью и талантом.
    • 0
      Паутины не будет, достаточно проложить за плинтусом шлейф из трёх проводов и установить розетки, что я и сделал. Заодно получил источник постоянного тока. Всегда хотелось, чтобы в квартире были розетки не только на 220 вольт, но и 5В, например. Как те китайские с USB.
      • 0
        100500 розеток не очень здорово, я сейчас думаю над практически полностью wireless системой. С разными провайдерами — ZigBee/RF/WiFi.
        Энергии обычные датчики потребляют не так уж и много, можно подсадить на микроаккумы, и подзаряжать раз в пару лет.
    • 0
      А увлечённость — вещь не постоянная, увы.
  • +11
    «пост ориентирован скорее на обычных людей, чем на тех, кто в теме»
    Круто! Ща почитаем.

    «Что-то вроде CAN-шины в современных автомобилях»
    «На борту микроконтроллера есть всякие I²C, да UART»
    «доминантный и рецессивный сигналы»
    Что-что-что?..

    Видимо, кроме обычных людей и тех, кто в теме, есть ещё какая-то категория, где я. При этом я не домохозяйка…
    • +3
      Для меня все посты на хабре делятся на две группы — «ничего не понятно» и «как-то всё слишком просто и глупо» :)
      Ну просто пост изначально был ориентирован на мой личный блог, а не на хабр.
  • 0
    А почему у вас такой странный график освещенности за сутки?
    • 0
      Это экспериментальная фича. Никак не подберу подходящий резистор для подтяжки фотодиода. Поздним вечером он вообще не пропускает ток.
      • 0
        Диод тут плохо канает, лучше фоторезистор.
        • 0
          С фотодиодом получается интересный эффект. Солнца нифига не видно, пасмурно, но на графике чётко видно время восхода и захода солнца. Похоже, он на ИК диапазон в основном реагирует.
          • +1
            скорее на ультрафиолет — его облака не задерживают — как то пасмурным летним деньком жестко обгорел так, книжечку на крыше читая
  • +2
    Очень здорово, воодушевляет! Планируете выпустить свои наработки в open source? На данный момент я планирую автоматизацию у себя в жилище, но по беспроводке (рассматриваю Z-Wave как перспективный вариант), причем хочется поменьше возиться с железом и побольше с софтом.
    • +2
      Думаю, рано или поздно выложу :)
      • 0
        Еще один запрос.
        • –1
          и ещё один
      • 0
        Отлично! Но лучше рано. ;)
  • 0
    Вам надо ознакомится с Z-Wave — он делает все то что и ваш, безусловно, крутой велосипед. Я уже две недели изучаю тему умного дома но так пока и не нашел решения, чтоб интегрировать все так как я хочу. Но Z-Wave — отличная штука для контроля всего кроме передачи медиа-контента (музыка, видео, изображение).
    • 0
      • 0
        Спасибо вам добрый человек :)
      • 0
        По ссылке совсем не то, что я ожидал увидеть от Z-Wave… Какие есть модули, чтобы самому сделать Z-Wave устройство?
    • 0
      Z-Wave — беспроводной, больше подходит тогда, когда ремонт уже готов и стену курочить нельзя от слова совсем. Когда я буду гулять по квартире с личтом железа, умный дом будет лагать. Если можно протянуть надежную проводную сеть, лучше так и делать.
      • +3
        А часто вы гуляете по дому с листом железа?
    • +1
      Z-wave — закрытый протокол, и не бесплатный, просто так сделать свои девайсы на нем не получится. А готовые девайсы стоят дорого. Есть еще ZigBee, он открытый, бесплатный для некоммерческого использования, но имеет кучу других проблем, например — отсутствие четкого стандарта, и как следствие плохая совместимость между устройствами разных производителей. К тому же дешево на этих протоколах сделать тоже не получится. Лучше посмотреть в сторону протокола 6LoWPAN — открытый и с весьма хорошими перспективами.
    • 0
      >Вам надо ознакомится с Z-Wave — он делает все то что и ваш, безусловно, крутой велосипед.

      13 баксов за RF+8051 чип не больно круто?
  • +1
    «не думаю, что по этой сети будет передаваться большой объём данных.» — сильное, и возможно не верное допущение.
    • 0
      «большой объём» — понятие очень относительное.
  • 0
    Извините. я дилетант в этой теме, но хочу спросить: Вы говорите поступающие управляющие сигналы обрабатываются через прерывания. А сколько прерываний таких происходит для получения полного пакета с командой?
    • 0
      По два прерывания на каждый бит.
  • 0
    А какие микроконтроллеры то? :)
    И еще интереснее передавать данные и питание по одному проводу, т.е. модулировать питающее напряжение. Все так делают (с)
    • 0
      Очень много обвязки надо, дешевле бобину UTP купить.
      • 0
        Тем не менее профессиональные решения так сделаны, кстати именно по просто витой паре и UTP в частности. Из того, с чем регулярно работаю: EIB/KNX (он еще и по 230В умеет, но не сталкивался) и С-Bus (на честной UTP).
        Используются 2 жилы из 4х у KNX и 4 попарно соединенных у C-Bus (для уменьшения потерь).
        Насчет обвязки это да, но есть простор для творчества.
    • 0
      Есть хороший удобный провод — витая пара. Там 8 проводов. Можно съекономить и пустить 4х жильный кабель. Зачем извращаться?
      Кроме того, потребителям может быть нужно довольно много энергии, особенно если они на общей шине сидят. А это дает ощутимую просадку напряжения на несколько вольт. Поэтому я бы на землю использовал 2 проводника и еще один задействовал бы под 12 или 24 вольта.
      • 0
        Вот выше написал, что профессиональные решения так делают, и наверное неспроста.
        И просадки напряжения не боятся, 24-36 В вгоняют, падение напряжения даже на километрах проводов не влияет на работоспособность, DC/DC конвертерам хватит, чтобы в 5 вольт преобразовать.
      • 0
        Я ни раз прокладывал у себя по дому витую пару и могу смело сказать, что нифига она не удобная. Как раз с ней и получается паутина из проводов. Тоненький шлейф гораздо легче спрятать.
        Про питание думал. Если понадобится поставить что-то мощное, например панель управления с дисплеем, то лучше наверное отдельное питание сделаю.
  • +1
    Проект отличный! Может стоит залить на BitBucket и дать ему жизнь?
    Там глядишь и радио, и IR, и MSP430 подтянутся общими силами.
  • 0
    А вы не планируете выложить проект в github или еще куда-нибудь?
    • 0
      Там всё заточено под мои требования, но ссылку на исходники я дал чуть выше.
      • +1
        чОрт, я что-то не вижу. :(
        • 0
          Прошу прощения — читал комментарий через почту, подумал, что он относится к другому топику, и на автомате ответил.
          Вот: clusterrr.com/soft/clunet.zip

          Вообще, я раздавал его тут нескольким людям через личку, но что-то никаких отзывов не получил. Пожалуй, действительно стоит выложить его куда-нибудь уже и хорошо документировать.
  • 0
    А не пробовали обойтись одной мегой8? Без переходника uart-usb, есть отличный проект V-USB (http://www.obdev.at/products/vusb/index.html) для этих контроллеров. Я давно отказался от чипов FTDI и прочих аналогов. Один минус существенный только есть, не считая скоростей, софтварный USB отъедает львиную долю ресурсов контроллера, но в таком случае я ставлю две дешевые меги8 (я их закупил приличное кооличество для поделок), одна из которых работает как переходник USB-UART (http://www.recursion.jp/avrcdc/)
    • 0
      Я как раз раньше везде делал софтварный USB, но это жутко нестабильная штука. На одних USB-контроллерах работает, на других нет… Да даже не на всех ревизиях восьмой меги может работать из-за небольших отличий в характеристиках. Ну и ресурсы мне действительно важны.

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