Это тема, о которой я думал некоторое время, особенно потому, что в последнее время концепция «IoT» широко распространена.
Я начну с того, что имею в виду, когда скажу «IoT» . Я знаю, что термин IoT может означать разные вещи и что иногда он используется неправильно. Это может быть термин, который не имеет четкого определения и может привести к большим дискуссиям о том, что именно это означает. Я сам не знаю правильного и широко принятого определения этого термина. Поэтому для меня IoT - это концепция, которая определяет возможность удаленного подключения к встроенному устройству через Интернет либо с другого встроенного устройства, либо с мобильного телефона . Так просто, как, что.
В этом контексте цель подключения не имеет значения, если вы можете подключить одно устройство в вашем офисе к другому дома, или если вы можете подключиться к одному устройству дома со своего мобильного телефона, все это через Интернет, тогда мы говорим об устройствах IoT (встроенные устройства, а не телефон).
Итак, согласившись с тем, что я имею в виду под IoT, я теперь опишу, чего я пытаюсь достичь.
То, чего я пытаюсь достичь, это именно то, что я описываю в своем определении IoT.
Я хочу иметь одно или несколько встроенных устройств дома, подключенных к моему интернет-маршрутизатору, через Ethernet или Wi-Fi, и иметь возможность удаленного подключения к ним с другими встроенными устройствами в удаленном месте (и под удаленным я имею в виду не в той же сети) а также, возможно, чтобы иметь возможность подключиться к ним с помощью приложения мониторинга на моем телефоне
Например, у меня может быть простое встроенное устройство, выполняющее функцию переключателя включения / выключения, подключенного к моему открывателю гаражной двери, и другое встроенное устройство, выполняющее роль большой красной кнопки на моем рабочем столе, чтобы я мог нажать красную кнопку на своем рабочем столе. и дверь гаража открывается.
Другим примером может быть встроенное устройство с возможностями АЦП, которое может контролировать температуру в моем доме и отправлять мне оповещения, когда оно достигает порогового значения. Уведомление может быть получено либо с помощью простого приложения для Android, либо с помощью другого встроенного устройства с небольшим экраном на рабочем столе.
Эти примеры могут быть глупыми, но они просто иллюстрируют возможные сценарии и варианты использования для того, чего я пытаюсь достичь. В конце концов, идея та же: подключить одно встроенное устройство к другому через Интернет.
Еще одна вещь, которую необходимо уточнить, - это то, что обмен данными между этими устройствами будет очень легким, каждый раз всего по пару байтов, это не значит, что между устройствами необходимо обмениваться сотнями килобайт.
Кроме того, «встроенные устройства», о которых я говорю, - это простые, но функциональные устройства на основе микроконтроллеров Cortex-M4 с тактовой частотой 100 или 200 МГц. И это важно уточнить, потому что на этих устройствах не будет работать ни Linux, ни сложные библиотеки. В конце концов, это пустая трата ресурсов и совершенно необязательно иметь мощный процессор под управлением Linux, чтобы просто включать и выключать лампочку . В любом случае я планирую использовать BeagleBoard, Raspberry Pi или любую другую подобную плату в качестве моих встроенных устройств. Просто микроконтроллеры, потому что не сложнее, чем нужно.
Я не знаю много о платформах IoT и подобных комплексных решениях. Когда я начал этот путь поиска способа соединения одного встроенного устройства с другим через Интернет, я наткнулся на пару сайтов с услугами IoT.
Я знаю, что есть некоторые облачные сервисы IoT, такие как:
Просто назвать несколько. Основными проблемами с ними являются стоимость и сложность. Вы должны заплатить, чтобы получить эти услуги, а также вы должны научиться реализовывать все сервисы, которые у них есть, на случай, если они вам понадобятся, а также их API и, возможно, кучу других вещей, которые мне не нужны возможность просто поменять несколько байтов между устройствами. Я просто хочу чего-то более простого, чем-то, что я могу сделать сам.
Вы можете сказать, что реализовать мое собственное «облако», если это то, что мне нужно сделать, непросто, а иногда лучше использовать эти виды услуг для простоты, но есть две основные причины, по которым я хочу знать, как внедрить мои собственные услуги IoT.
Основная причина в том, что я хочу сделать это сам. Я не хочу полагаться на то, что третьи лица будут подключать свои устройства друг к другу, и, поскольку я буду разрабатывать код и оборудование для своих устройств, лучше будет также создать свои собственные средства для их подключения в качестве устройств IoT.
Вторая причина - научиться это делать. Зная все необходимые вещи, необходимые для достижения этой цели, я лучше пойму мир IoT.
Кроме того, я хочу отметить, что я опытный в C и я использую Linux в качестве своей повседневной ОС на работе и дома, поэтому, пожалуйста, избегайте Windows, потому что это бесполезно для меня. Я не боюсь ничего, что я должен реализовать в C для своих встроенных устройств или в Linux, чтобы реализовать все необходимое для достижения моей цели.
Поэтому у меня вопрос: что необходимо реализовать и где можно соединить два или более встроенных устройства друг с другом с целью обмена данными между ними?
Этот вопрос Что я могу использовать для создания IoT на нашем собственном сервере? есть что-то похожее, но закрыто и не имеет никаких ответов, а также предполагает использование уже существующей облачной инфраструктуры. Так что это не помогает мне.
Этот другой пост Какие услуги IoT доступны для хранения / отправки / публикации общих данных в облаке? У меня похожий вопрос, но ОП явно просит услуги IoT, и я стараюсь их избегать.
источник
Ответы:
Может быть, я упустил суть вопроса, но я думаю, что это хорошее начало с ответа.
Вам нужно как минимум три вещи.
Тогда не забывайте о безопасности. Делая это, вы будете ближе к тому, чтобы открыть все в вашей домашней сети для атаки. Может быть, только немного, но хорошо осознавать риск. Вы можете попытаться позаботиться, но предположите, что будете делать ошибки.
источник
Облегченные устройства и скорость передачи данных в несколько байтов запрашивают использование MQTT , как уже упоминалось. Ваши сенсорные узлы могут быть основаны на автономных модулях ESP8266, которые являются достаточно мощными для размещения реализации клиента MQTT. Или вы можете просто использовать эти модули в качестве модуля Wi-Fi, управляемого AT-командой, вместе с внешними микроконтроллерами.
Вы можете реализовать свое собственное решение MQTT на гораздо менее мощных микроконтроллерах, таких как этот парень, который использовал Atmega48V со вспышкой 4 КБ .
Вы можете разместить брокера на своем компьютере, хотя вместо этого было бы более эффективно использовать Raspberry Pi. Опять же, если вам нравится кодирование, вы можете реализовать свой собственный брокер MQTT. Лично я нашел Mosquitto отлично подходит для этой цели.
Недостаток в том, что все ваши сенсорные узлы будут нуждаться в соединении TCP / IP.
Решением, не зависящим от батареи, может быть использование узлов датчиков / исполнительных устройств с поддержкой LoraWAN или ZigBee и реализация шлюза на Raspberry / BeagleBone, который также может содержать простой веб-сервер, доступ к которому можно получить с вашего телефона или других устройств.
В любом случае все сводится к тому, чтобы ваш концентратор, шлюз или сервер были доступны вне вашей частной сети. Есть больше способов сделать это, и главной заботой всегда является безопасность. Это самая рискованная часть на мой взгляд.
Базовые требования довольно хорошо обобщены @Sean.
источник
Вы поставили под сомнение оба предыдущих ответа о необходимости контроллера / концентратора. Учтите, что для того, чтобы что-то произошло, вам нужны правила для существования. Если вы хотите нажать большую красную кнопку, чтобы открыть дверь гаража, какое-то правило должно привязывать датчик (кнопку) к желаемому действию (открытие двери). Есть два способа сделать это: вы можете поместить правило непосредственно в кнопку, или вы можете поместить правило в отдельный компьютер.
Давайте подумаем больше о прямом решении. Если вы научите пуговицу про дверь гаража, то ваша пуговица будет внутренне соблюдать правила. Для кнопки требуется идентификатор двери гаража, поэтому, если вы замените дверь гаража, кнопка не будет работать. Если кнопка находится на вашем столе, а ваш дом использует частную сеть, кнопка должна знать как адрес шлюза вашего дома, так и адрес двери. Кнопка должна знать конкретный протокол, чтобы сигнализировать о том, что ваша дверь открыта - все ли производители делают совместимые кнопки, которые знают обо всех дверных сигналах? Кнопка больше ничего не сможет сделать, если вы не перепрограммируете ее - есть ли у вас флэш-программатор для чипа кнопки, и совместим ли этот программатор с любыми другими устройствами? Если вы хотите, чтобы дверь гаража открылась, а через 5 минут закрылась, Ваша кнопка нуждается во всех сложностях поддержания часов реального времени. Ваша кнопка не будет знать состояние двери, из-за чего будет сложно определить, закрываете ли вы дверь или открываете ее. И как вы резервируете правила, чтобы, если ваша кнопка сломалась, ваша кнопка замены могла выполнить эту работу? С другой стороны, это звучит дешево: вам не нужен отдельный компьютер.
С контроллером все иначе. Все сообщения от всех датчиков доставляются в контроллер. Каждый датчик прост: отправьте сигнал на контроллер. Затем контроллер может применить любые входные данные, необходимые для очень сложных правил: он может проверить датчик солнечного света и не включать наружное освещение, если не темно, или не запускать разбрызгиватели, если среднее количество осадков за месяц выше среднего и текущая температура на пять градусов ниже среднего. Контроллер может отслеживать состояние. Это может быть важно, если вы хотите кнопку «закрыть дверь гаража», а не кнопку «открыть дверь гаража» (когда я далеко от дома, я редко хочу открыть дверь, но я определенно хочу закрыть ее, если она есть). случайно оставил открытым.)
Контроллер может предоставить место для драйверов устройств, которые знают, как слушать кнопки, и других драйверов, которые знают, как разговаривать с дверями. Контроллер может быть более модернизируемым до новых устройств и типов устройств, чем крошечный чип, спрятанный внутри кнопки.
Контроллер также может иметь более сложную логику для задач инфраструктуры, таких как доставка сообщений, предлагая определенные уровни обслуживания. Например, протокол MQTT допускает три различных уровня: попытаться доставить сообщение один раз, доставить его повторно, пока оно не будет просмотрено хотя бы один раз, или доставить его один раз и только один раз.
Контроллер предлагает архитектурно-логическое место для консолидации всего обмена сообщениями на коммуникационном шлюзе и от него, что позволяет использовать внешний интерфейс. Это означает, что ваша кнопка и ваш телефон могут отправлять сигналы, и по правилам можно выяснить, что любой из них может открыть дверь гаража. Шлюз также может обеспечить безопасность. Вы не должны помещать свою кнопку и свою дверь гаража в Интернете; Вы можете разместить их в частных изолированных сетях и использовать шлюз для передачи сигналов. Контроллер также предоставляет единую точку для резервного копирования всех правил для вашей системы.
Недостатками контроллера являются дополнительная задержка и дополнительная сложность. Удивительно, но контроллер не позволяет значительно повысить стоимость. Вы можете реализовать контроллер на Raspberry Pi за меньшую стоимость, чем один средний дистанционно управляемый выключатель света. Не сбрасывайте со счетов идею только на основании стоимости.
источник