Комментарии 159
Например habr.com/ru/post/386735
Отладочный комплект от Ti:
NRF24 + ATMega238 (а можно и 88/168) < 2$
По компонентам дешевле. В ценах eu.mouser.com:
TPS61291 Повышающий DC-DC преобразователь напряжения с режимом bypass
1,51 €
TPL5111 Системный таймер
0,786 €
TPS22860 Выключатель нагрузки
0,80 €
HDC1000 Датчик влажности и температуры
7,06 €
CC1310 «Беспроводной контроллер»
5,42 €
Сама суть схемы экономии энергии только в использовании таймера и выключателя нагрузки, остальное можно заменить.
На хабре есть статьи о ESP8266 и питании от батареек. Имхо для дома это удобнее и дешевле т.к. уже есть беспроводная сеть — WiFi.
habr.com/ru/post/130421
habr.com/ru/post/257141
habr.com/ru/post/304936
Что это? Это очень простая и хорошо проработанная и что немаловажно отлично описанная библиотека под Ардуино ИДЕ (и не только) для создания IOT радиосетей на частотах 2.4Ггц, 915, 868, 433 Мгц, а так же проводных сетей на интерфейсе 485, возможно не все упомянул, тк протокол постоянно развивается, все время что то добавляется
За пять минут на mysensors.org никакого вообще описания протокола найти так и не смог.
Дайте ссылку.
А что у них там в радио происходит и из чего оно вообще сделано — видимо, в отлично описанной библиотеке надо рыться в исходниках.
Все что нужно выдается в UART включенным MY_DEBUG
Если нужно можно еще и отладку конкретного радиомодуля поднять
А смысл?
Например, захотелось подключить что-то свое.
Все что нужно выдается в UART включенным MY_DEBUG
И описание протокола выдается? Или Вы не видите разницу между описанием и отладочной информацией?
Если с вашей колокольни этого не достаточно для понимания, то предлагаю забить.
Я бы просто написал поддержку своего транспорта Mysensor/hal/transport/XXX по образу и подобию того же RF24 или RFM69 в стандартной библиотеке Mysensors
Опять же исходя из того что для каждого транспорта нужно свой шлюз, некоторые навороченные модули типа вообще нету смысла к Mysensors стыковать, а лучше использовать свои штатные протоколы и цепляться ими к
тому же MajorDoMo параллельно Mysensors
Во-вторых, у нас в процессе своя реализация, в том числе под умный дом, на nRF52832 с 6LoWPAN (ну, почти, т.к. 52832 не умеет QPSK и, следовательно, IEEE 802.15.4), вдруг бы я захотел не изобретать велосипед, а просто поддержать уже существующий проект?
В-третьих, там же как-то предполагается участие сторонних разработчиков во всём этом, оно же open source не только потому, что создателям нравится, как эти слова звучат? Или реверс-инжиниринг протокола по исходникам — это такой вступительный экзамен?
В-четвёртых, автору статьи в следующий раз лучше вместо «отлично документирована» писать «функции пользовательского уровня неплохо документированы, но на внутреннюю часть системы документации пока нет».
нумерации пакетов нет вообще… простите а какие именно пакеты вы считаете надо считать в данной реализации??
в телеграм-канале мне уже сообщили, что подтверждение доставки сделано через одно место… наверное пропустил как сообщали :)),
… а что именно не устраивает в доставке? вполне себе годный механизм, есть еще подтверждение отправки. Всего этого более чем достаточно. Поясните пожалуйста
Во-вторых) поржал, ну так возьмите вашим коллективом в прицел nRF52840…
В-третьих… хотите поучавствовать, становитесь контрибутором, вам еще и доплатят…… Ну воспринимайте это как вступительный экзамен, там ничего очень сложного.
В-четвёртыхВ следующий раз напишу ровно так же, потому как так и есть,… это статья именно для тех кто хотел бы попробовать.… вам лучше своё с типа почти 6LoWPAN на nRF52832
а какие именно пакеты вы считаете надо считать в данной реализации??
Ну вообще в целях повышения надежности пакетной коммуникации обычно все пакеты нумеруются. Это гарантирует отсутствие пропуска пакетов, или как минимум обнаружение пропуска или дублирования. Это повышает общую пропускную способность канала.
У меня такое ощущение, что Вы пытаетесь упорно спорить на ту тему, которая Вам совершенно неизвестна :) Вам пишут «внутри все непонятно и, судя по всему, плохо», а Вы отвечаете «нет, все идеально, смотрите какая удобная и красивая обертка» :)
А тут нет никаких подписей? А вон тот крипточип — он тогда для чего?
Я в канале не общался, поэтому совершенно не в курсе как там и что :)
www.mysensors.org/about/signing
Прекрасный художественный текст, иллюстрации к нему, полагаю, автор делал сам.
Сделал из него вывод, что шифрования в MySensors нет.
Так где можно посмотреть структуру пакета и убедиться, что автор про атаку повтором умеет не только картинки рисовать, но и реально её реализовал?
Но я не вчитывался…
Из текста можно сделать вывод, что автор почему-то не любит счётчики сообщений (они предсказуемы — ну и что?), а вместо этого любит генерацию nonce на каждое сообщение, т.е. передача каждого пакета нагрузки по радио у него — это полноценный хендшейк в четыре приёмопередачи, привет батарейке и загрузке эфира.
(и тут ещё нет подтверждения доставки, это будет четвёртое сообщение в сессии)
По сути, для типовой ноды (которая шлёт пакет на каждое своё просыпание) автор жертвует десятками процентов времени жизни на батарейке, удваивая time-on-air — на который традиционно приходятся основные расходы энергии.
1) счётчик кадров плох, потому что предсказуем
2) шифрование — забота пользователя
Оба тезиса неверны, и из них при этом растёт и переусложённость защиты в одном месте, и её полное отсутствие в другом.
Там у автора два голоса в голове:
При том, что можно было сделать проще и надежнее, включая шифрование по умолчанию.
Потому как ещё одна типовая атака требует, чтобы одни и те же входящие данные давали каждый раз разные зашифрованные — и это проще всего реализовать через AES-CTR, которому в качестве счётчика просто подсовывается номер пакета. И это не может быть сделано на уровне приложения, ибо уровень приложения номер пакета не знает и знать не может.
В данном случае можно было бы сделать то же самое с nonce, только непонятно, зачем. Знание номера пакета атакующему не даёт никаких преимуществ, если разрядность счётчика достаточно велика, чтобы за разумное время он не обнулился (ну то есть в общем двух байт хватит практически всем).
Потому как ещё одна типовая атака требует, чтобы одни и те же входящие данные давали каждый раз разные зашифрованные
В смысле — противодействие этой атаке требует разного шифрования?
Ну не знаю, в данном случае шифрование, на мой взгляд, опционально, но вот подпись каждого пакета — просто обязана быть, причем на базовом уровне, а не «если хотите, можете включить». Пусть даже примитивная — какой-либо не слишком навороченный по математике HASH, в вычислении которого участвует в том числе и номер пакета. Пользователя нужно только заставить задать свои значения для начальной инициализации функции и для соли. Просто, невысокие энергетические и вычислительные ресурсы и достаточно устойчиво против взлома, на мой взгляд.
В смысле — противодействие этой атаке требует разного шифрования?
Ну да.
Если нам не важно передаваемое значение, а важно его изменение (например, можно ловить показания водосчётчика, если они сутки не меняются — в квартире никого нет, и для понимания этого нам не надо знать, сколько именно литров он показывает), то шифрование с фиксированным ключом не поможет.
На уровне приложения это решается рандомной солью, но соль съедает байты пейлоада. А на уровне MAC можно формировать ключ из nonce или счётчика пакетов, которые гейту известны — соответственно, он сможет сформировать такой же ключ.
Расходы на это незначительные — я занимался оптимизацией AES по памяти как-то, заодно сделал бенчмарки, на инициализацию и один блок (16 байт) уходит 285 мкс на Cortex-M0 и 165 мкс на Cortex-M1 (алгоритм — обычный сишный на Т-таблицах, ничего особенно выдающегося).
Но автор этого чуда почему-то считает, что кому надо — тот пусть и шифрует.
Главное — обеспечить защиту от внешнего проникновения в экосистему, от подмены данных или команд.
А так-то понятно, что шифровать одним ключом одни и те же данные смысла мало.
не слишком навороченный по математике HASH
Будет очень нестоек к взлому. Имея вычислительные ресурсы его можно будет подобрать за разумное время, а значит не стоит на него полагаться для защиты от взлома. Это щеколда на сейфе. Проще добавить счетчик к полезным данным и зашифровать его в рамках одной сессии.
Даже упрощенный раза в четыре алгоритм, подобный MD5, с задаваемыми пользователем начальными значениями и солью байт на 8 будет уже достаточно стойким к взлому. Вряд ли кто-то будет тратить сотни или тысячи часов огромных вычислительных ресурсов для того чтобы просто взломать чей-то «умный дом».
Понимаю, и если мне нужны будут подписи для передачи например температуры(ответственный узел) я соглашусь с этим и расчитаю решение в железе. В других ситуациях просто зашифрую AESом
А вы ведь не понимаете, как этот ваш MySensors работает, даже когда вам разжёвывают.
github.com/mysensors/MySensors/wiki/Message.h
Например зачем?
Выше это Вам уже объяснялось, но Вы, похоже, не понимаете в силу отсутствия опыта и знаний. Но зачем-то спорите.
Или, что хуже, он может отправить в эфир записанный ранее пакет на открытие замка от имени шлюза (со всеми подписями и шифрованиями) и замок откроется?
Судя по всему — нет, не понимаете.
Гейт узнает, что и нода в ауте
Предположим, что нода — это датчик, посылающий гейту сообщения при открытии окна. Если заглушить его сообщение, открывая окно, то каким образом гейт узнает об этом?
и отправить левый пакет не получится, неуспеет
Кто куда не успеет? Почему не получится отправить левый пакет — что может помешать этому?
Слушаешь эфир, как только оно попросит у сервера nonce — врубаешь глушилку на секунду.
Если есть сосед-радиогубитель, поднявший у себя умный дом — можно свести его с ума.
… простите а какие именно пакеты вы считаете надо считать в данной реализации??
Очевидно, передаваемые в радио. Вы про защиту от атак повтором слышали когда-нибудь?
… а что именно не устраивает в доставке? вполне себе годный механизм, есть еще подтверждение отправки. Всего этого более чем достаточно. Поясните пожалуйста
Меня в ней не может что-то устраивать или не устраивать — в силу отсутствия документации я ничего про неё не знаю. Однако в телеграм-канале мне сообщили, что в качестве подтверждения просто возвращается отправленный пакет, причём не всегда.
Соврали? Где прочитать про то, как на самом деле?
… хотите поучавствовать, становитесь контрибутором, вам еще и доплатят…… Ну воспринимайте это как вступительный экзамен, там ничего очень сложного.
Про «ничего сложного» мне пишет человек, который не понимает даже задаваемых мной вопросов.
Маякните как допилите свой протокол
Запилить свой протокол — дело совершенно нехитрое. При наличии знаний.
где нарыли?
Запилил в одном из своих проектов.
А у Вас это что за картинка?
ЗЫ: подумал было, что наконец-то раскрыта тайна протокола майсенсора :)))
Не совсем понятно… Для передачи 10 байт данных передается пакет размером 110 байт?пересчитали? /// Ну вот так :), с нас «ардуинщиков» какой спрос ;)
А зачем так много?
То есть всё их сообщество ответит максимум на вопрос о том, откуда либу скачать.
Ну снизойдите, поймите и научите.
Я с некоторой вероятностью осенью буду вот тут курс читать, можете обратиться к администрации с вопросом, возможно ли индивидуальное посещение.
Там я вас научу.
Маякните как допилите свой протокол, было бы любопытно…
Там программировать надо будет. Вам не понравится.
Правильно ли я понимаю, что всё, относящееся к радио, попросту не документировано никак?
Но в целом ситуация понятная — оно не документировано.
Поэтому вместо того, чтобы писать свои коннекторы во всякие протоколы софта для умных домов я бы мог, например, рассмотреть возможность обеспечения совместимости с протоколами MySensors, и сразу попасть во вроде бы как готовую экосистему.
Но рассмотреть вопрос совместимости с протоколом без знания этого протокола у меня не получится, а на то, чтобы реверс-инжинирить его по исходникам — см. выше, у меня очень мало свободного времени.
Цикломатическая сложность очень высокая. Количество вложенных if просто огромное.
Выделите отдельные функции.
Открыл для себя RFM69, они в 915/433/итп конфигурации есть. При низком битрейте можно получить сотни метров при желании. Кстати MySensors его поддерживает.
Еще, советую использовать home-assistant (home-assistant.io). Оно умеет serial gateway от mysensors да и через mqtt.
433 тоже прилично бывает забит (различные сигнализации, метеостанции фабричного производства, различные ПДУ к дистанционно управляемым игрушкам и т.п.).
Так что надо смотреть по месту применения и делать протокол, разруливающий коллизии, когда своих устройств становится многовато для частоты.
Кстати, у того же NRF есть возможность выбирать канал (если правильно понял, частоту в некотором диапазоне возле 2.4ГГц), и в большинстве случаев свободный (некритично зашумленный) канал вполне находится.
Можно, конечно, еще давить мощностью (как передатчики на 433, так и NRF есть с неслабыми уровнями на выходе), но для метеодатчика это порождает избыточное потребление и увеличивает габариты за счет большой антенны.
- на этих мощностях выхлоп и размер антенны никак не связаны
- частота и размеры антенны (а также самого устройства) связаны очень даже напрямую — на 433 МГц в таких габаритах ничего хорошего не получится
- больше 20 мВт на 433 МГц в эфир отдавать нельзя
- больше 10 мВт/МГц на 2400 МГц в эфир отдавать нельзя
на этих мощностях выхлоп и размер антенны никак не связаны
частота и размеры антенны (а также самого устройства) связаны очень даже напрямую — на 433 МГц в таких габаритах ничего хорошего не получится
Если рассматривать готовые устройства, то из того, что я видел, физические размеры самих радиомодулей и антенн у мощных версий радиомодулей были примерно одинаковы вне зависимости от частоты (другой вопрос, что там реально внутри пластмассового корпуса антенны накручено).
больше 20 мВт на 433 МГц в эфир отдавать нельзя
больше 10 мВт/МГц на 2400 МГц в эфир отдавать нельзя
Могу ошибаться, но, судя по дистанции уверенного приема, у модулей с антенной, размещенной непосредственно на плате, явно не 10-20 мВт.
размеры самих радиомодулей и антенн у мощных версий радиомодулей были примерно одинаковы вне зависимости от частоты
Зато выхлоп в эфир у них очень сильно отличался.
Откройте даташиты на две похожие по размерам керамические антенны на 433 МГц и 2450 МГц — и сравните усиление и КПД. Физику не обманешь, чем дальше антенна и земля в размерах от четверти длины волны — тем хуже.
Могу ошибаться, но, судя по дистанции уверенного приема, у модулей с антенной, размещенной непосредственно на плате, явно не 10-20 мВт.
Обычно в пределах 5 мВт на 2450 МГц, 25 мВт на 868 МГц, 10 мВт на 433 МГц.
Зато выхлоп в эфир у них очень сильно отличался.
Возможно, что я недостаточно однозначно выразился, но упомянув про "давить мощностью" я имел ввиду изначально не вопрос соотношения мощностей на разных частотах, а возможность "перекричать" мешающих оппонентов на той же частоте.
Если модуль на 433 без внешней антенны дает, например, 10 мВт, то подключив другой, с внешней антенной и дающий 20 мВт, можно получить "конкурентное преимущество".
Конечно, путь ущербный, но вполне применяемый (на тех же WiFi роутерах народ постоянно таким балуется) и иногда даже дающий результат.
2) Мало передать, неплохо бы, чтобы кто-то ещё и принял — а для этого нужен либо приёмник с алгоритмом сканирования всех возможных каналов, либо общий для приёмника и передатчика алгоритм ПСПЧ
802.11b досихпор ещё поддерживается, канал там достаточно узок — всего 1Мгц.
Зачем сканирование?
Затем, что найденный сейчас свободный (малошумящий) канал уже при следующей передаче через 5 минут может быть забит помехами или кем-то другим.
Соответственно, никакого «должен заниматься не пользователь» в нём нет.
И да, ничего особенного в сканировании каналов нет, в том же блютусе псевдослучайные скачки по всему спектру — из коробки, 79 каналов, 1600 переключений в секунду.
Вряд-ли лора целесообразна в пределах квартиры и её железо заметно дороже.
Стены толстые, расстояния большие. Сяомишный zigbee из подвала вот не очень у меня добивает хорошо.
как-то очень куце, точнее вообще никак – про самое интересное: потребление, время работы от батарейки, испытания дальности и влияние числа устройств на срок службы, а еще про головную часть.
Но Lora… и не для дома
Почему?
Все правильно, для разных условий нужны разные решения. Для большинства — обычный радиоканал предпочтительнее, в первую очередь тем, что он дешевле.
В теории да. Например, в gsm мощность мобильного терминала подстраивается под текущие условия связи, она минимизируется на лету, что позволяет экономить батарею. Но как это сделать в описанном сценарии? Сначала установить связь с хостом на максимуме мощности, потом померять силу сигнала, получить от хоста потребный уровень мощности и только в конце передать пакет из жалких десятков байт? Так проще сразу пакет передать на максимуме.
Сначала установить связь с хостом на максимуме мощности, потом померять силу сигнала, получить от хоста потребный уровень мощности и только в конце передать пакет из жалких десятков байт? Так проще сразу пакет передать на максимуме.
Думаю, что в пределах квартиры-дома можно сразу передавать на мощности, близкой к минимальной, но в широкой полосе.
Можно. Но сейчас придут желающие поставить датчик в подвал и скажут, что они не согласны. Другие придут и скажут, у нас однушка и нет лишних денег платить за over engineered продукт, дайте дешевле, нам хватит и 30м связи. Третьи скажут, цена роли не играет, но мы не собираемся менять батарейки в десятках датчиков в среднем раз в месяц, дайте работу от батареи 10 лет и т.д. Как обычно, выясняется, что универсального решения нет.
Но раз уже речь идет о беспроводных датчиках, то единственная причина, которую я вижу, не использовать более современные и более эффективные методы — это неумение использовать их :) Вот для этих модулей есть готовые скетчи, их и используем.
За стоимость в частном применении тоже не очень верю — разница в цене модулей не глобальная и их количество на пользователя исчисляется не тысячами, чтобы имело смысл экономить каждый рубль :)
Платы заказывал в Китае на сайте jlcpcb.com, 2 бакса, любой цвет, и через 2 недели вы уже получаете на руки 10 штук «своего творения» :).
А во сколько обошелся shipping? В Украину сейчас 50x50 мм shipping там стоит $6.33.
И да, сейчас любой цвет 2 бакса, но только 5 штук. Если 10 штук — то 5 баксов.
Как решаете с просадкой напряжения при передаче (особенно перврй с таким количеством презентаций)?
NRF24 кушает до 20мА при передаче. Mysensors довольно прожорливый протокол и пока идет передача, несвежая батарейка садится проседает ниже 2В, а на таком напряжении мега даже на 8МГц не очень себя ведет.
Пробовал 2450 — пока свежая, нормально работает, стоит немного подсесть батарейки, та же проблема с просадкой напряжения
питание от 2032?
На фото и в списке компонентов — 2477 :)
С другой стороны, много нужно уличных датчиков в умном доме, да еще и питающихся от батареи? Один, два?
Термометр & гигрометр на ATMEGA 328P-MU — Поднимаем уровень ардуино разработок