В компьютерную сеть объединяются не только компьютеры. Смартфоны, планшеты, смарт-телевизоры, роботы-пылесосы, лампы, счетчики и датчики тоже подключаются к сети и обмениваются данными. Поэтому в школьном тесте «выберите все верные утверждения» верны два: «компьютерная сеть может объединять различные устройства: смартфоны, планшеты, умный дом, роботов-пылесосов» и «компьютерные сети предоставляют возможность для быстрого поиска информации». Неверны тоже два: сети не замедляют, а ускоряют обмен информацией, и объединяются в них не только компьютеры.
Содержание
Интернет вещей (Internet of Things, IoT) — это сеть физических устройств со встроенной электроникой (датчиками, исполнительными механизмами, микроконтроллером и модулем связи), которые без участия человека передают данные и получают команды через сеть. Ниже разберем, из чего состоит такая система, какими протоколами «вещи» общаются, чем IoT отличается от IIoT и где в нем главные риски.
Мини-словарь: что с чем не путать
| Термин | Что означает | Пример |
|---|---|---|
| Компьютерная сеть | Любые устройства, связанные для обмена данными | Ноутбук, принтер и телефон в домашнем Wi-Fi |
| IoT | Сеть «вещей», которые сами собирают данные и выполняют команды | Датчик температуры шлет показания, кондиционер включается |
| M2M | Обмен данными «машина — машина» без человека, часто без интернета и облака | Счетчик передает показания по GSM на сервер энергосбыта |
| IIoT | Промышленный интернет вещей: датчики и оборудование на производстве, в энергетике, логистике | Датчик вибрации на станке предупреждает об износе подшипника |
| Умный дом | Прикладной сценарий IoT для жилья | Лампы, розетки, замки, управляемые из приложения |
Упрощенно: M2M — про связь машин между собой, IoT — про то, что таких устройств много, они подключены к общей инфраструктуре (обычно интернету и облаку) и их данные используются приложениями. Граница размыта, и в текстах термины часто смешивают.
Как устроена IoT-система
Типичную архитектуру удобно описывать слоями. Это учебная схема: в реальных проектах слои могут объединяться (например, умная лампа с Wi-Fi подключается к облаку напрямую, без шлюза).
| Слой | Что делает | Примеры технологий |
|---|---|---|
| Устройства | Датчики измеряют (температура, движение, пульс), исполнительные механизмы действуют (реле, мотор, замок) | Микроконтроллеры ESP32, STM32, одноплатники вроде Raspberry Pi |
| Связь | Передает данные от устройства дальше | Wi-Fi, Bluetooth Low Energy, Zigbee, Thread, LoRaWAN, NB-IoT, Ethernet |
| Шлюз и edge | Собирает данные с устройств ближней связи, переводит протоколы, обрабатывает часть данных на месте | Хаб умного дома, промышленный шлюз |
| Платформа | Принимает сообщения, хранит, управляет устройствами и их обновлениями | MQTT-брокер, база временных рядов, IoT-платформа облака |
| Приложения | Показывают данные человеку, запускают правила и аналитику | Мобильное приложение, дашборд, система оповещений |
Пройдем путь одного показания. Датчик на кухне измерил 31 °C. Микроконтроллер упаковал значение в сообщение и отправил по Wi-Fi на брокер. Правило на платформе увидело превышение порога и отправило команду «включить» кондиционеру. Параллельно значение попало в хранилище, и в приложении обновился график.
Не все решения принимаются в облаке. Если реакция нужна за миллисекунды или связь ненадежна, логику переносят ближе к устройству — на шлюз или в сам микроконтроллер. Это называют граничными вычислениями (edge computing).
Протоколы: как «вещи» передают данные
Протоколы связи (Wi-Fi, Zigbee, LoRaWAN) отвечают за то, как биты доходят до соседнего узла. Протоколы прикладного уровня отвечают за то, в каком виде устройство и сервер обмениваются сообщениями. Для IoT чаще всего упоминают два.
| MQTT | CoAP | |
|---|---|---|
| Модель | Публикация — подписка через брокер | Запрос — ответ, похож на облегченный HTTP (GET, POST, PUT, DELETE) |
| Транспорт | TCP | UDP |
| Типичные порты | 1883, с TLS — 8883 | 5683, с DTLS — 5684 |
| Надежность | Уровни доставки QoS 0, 1, 2 | Подтверждаемые (CON) и неподтверждаемые (NON) сообщения |
| Где удобен | Телеметрия многих устройств в облако, команды через брокер | Очень ограниченные устройства и сети, прямое обращение к ресурсу устройства |
| Стандарт | OASIS: MQTT 3.1.1 и MQTT 5 | IETF RFC 7252 |
Выбор зависит от задачи. Если устройства держат постоянное соединение и шлют показания на сервер — обычно берут MQTT. Если устройство спит на батарейке в сети с потерями, а к нему обращаются как к ресурсу по адресу — смотрят на CoAP. HTTP тоже используется, особенно когда устройство мощное и отправляет данные редко.
MQTT на практике: топики и подписки
В MQTT устройство публикует сообщение в топик — строку с уровнями через /, например home/kitchen/temperature. Подписчик указывает фильтр, где можно использовать два подстановочных знака: + заменяет ровно один уровень, # — любое число уровней до конца и ставится только последним. Брокер сам решает, кому доставить сообщение.
Ниже — модель этого правила сопоставления на Python без сторонних библиотек. Настоящий брокер (например, Mosquitto) делает это внутри, но логика та же.
def topic_matches(topic_filter: str, topic: str) -> bool:
"""Проверяет, подходит ли топик под фильтр подписки MQTT (+ и #)."""
f_levels = topic_filter.split("/")
t_levels = topic.split("/")
# Топики на $ (например, $SYS) не ловятся фильтрами, начинающимися с + или #
if topic.startswith("$") and f_levels[0] in ("+", "#"):
return False
for i, f in enumerate(f_levels):
if f == "#":
return i == len(f_levels) - 1 # # допустим только последним уровнем
if i >= len(t_levels):
return False
if f != "+" and f != t_levels[i]:
return False
return len(f_levels) == len(t_levels)
messages = [
"home/kitchen/temperature",
"home/kitchen/humidity",
"home/bedroom/temperature",
"home/bedroom/lamp/set",
"$SYS/broker/uptime",
]
filters = ["home/+/temperature", "home/kitchen/#", "#"]
for flt in filters:
got = [m for m in messages if topic_matches(flt, m)]
print(f"{flt:20} -> {got}")
Вывод в Python 3.14:
home/+/temperature -> ['home/kitchen/temperature', 'home/bedroom/temperature']
home/kitchen/# -> ['home/kitchen/temperature', 'home/kitchen/humidity']
# -> ['home/kitchen/temperature', 'home/kitchen/humidity', 'home/bedroom/temperature', 'home/bedroom/lamp/set']
Что здесь видно. Фильтр home/+/temperature собирает температуру из всех комнат, но не влажность. Фильтр home/kitchen/# берет все с кухни. Даже # не получает служебный топик $SYS/broker/uptime: такие топики брокер отдает только по явной подписке на $SYS/....
Типичная ошибка — поставить # в середину фильтра.
print(topic_matches("home/#/temperature", "home/kitchen/temperature")) # False
print(topic_matches("home/+/temperature", "home/kitchen/temperature")) # True
Наша функция возвращает False, а настоящий брокер такой фильтр вообще отклонит как некорректный. Исправление — заменить # на +, если нужен ровно один уровень. Еще одна тонкость: home/kitchen/# совпадает и с самим home/kitchen (функция вернет True), это прописано в спецификации.
Безопасность IoT: где главные риски
Устройств много, они годами работают без присмотра, у них слабое железо и редкие обновления. Поэтому IoT — частая цель атак. Известный пример — ботнет Mirai (2016): он заражал камеры и роутеры, перебирая заводские логины и пароли, и использовал их для DDoS-атак.
Базовые требования к IoT-системе:
- Никаких общих заводских паролей. У каждого устройства — свои учетные данные или клиентский сертификат.
- Шифрование канала. MQTT — через TLS (порт 8883), CoAP — через DTLS. При этом нужно проверять сертификат сервера: шифрование без проверки не защищает от подмены брокера.
- Права на топики (ACL). Устройство публикует только в свою ветку и не может отправлять команды чужим устройствам.
- Подписанные обновления прошивки. Устройство принимает только прошивку, подписанную производителем, иначе канал обновления становится каналом заражения.
- Сегментация сети. Умные устройства — в отдельной сети или VLAN, без прямого доступа к рабочим компьютерам.
Как ACL выглядит в логике брокера, можно показать на той же функции:
ACL = {
"sensor-kitchen": ["home/kitchen/#"],
"lamp-bedroom": ["home/bedroom/lamp/state"],
}
def can_publish(client_id: str, topic: str) -> bool:
return any(topic_matches(f, topic) for f in ACL.get(client_id, []))
print(can_publish("sensor-kitchen", "home/kitchen/temperature")) # True
print(can_publish("sensor-kitchen", "home/bedroom/lamp/set")) # False
print(can_publish("unknown-device", "home/kitchen/temperature")) # False
Датчик кухни может писать показания, но не может включить лампу в спальне, а неизвестный клиент не может ничего. Это учебная модель: в реальном брокере ACL задается его конфигурацией или плагином авторизации и работает только вместе с аутентификацией клиента. Сам по себе список прав не спасает, если логин и пароль устройства утекли.
IoT и IIoT: в чем разница
| Бытовой IoT | Промышленный IIoT | |
|---|---|---|
| Где | Дом, личные гаджеты, носимые устройства | Заводы, энергетика, склады, транспорт, сельское хозяйство |
| Цель | Удобство, экономия, безопасность жилья | Снижение простоев, контроль качества, экономия ресурсов |
| Цена ошибки | Неудобство, утечка личных данных | Остановка линии, авария, угроза людям |
| Типичные протоколы | Wi-Fi, BLE, Zigbee, Thread, Matter | Промышленные протоколы (Modbus, OPC UA), MQTT, LoRaWAN, сотовая связь |
| Срок службы | Несколько лет | Часто 10 лет и больше |
Для умного дома важен стандарт Matter: его развивает альянс CSA, чтобы устройства разных производителей работали в одной системе. Это ответ на давнюю проблему несовместимости экосистем.
Где применяется интернет вещей
- Дом: освещение, розетки, замки, датчики протечки и дыма, роботы-пылесосы, голосовые колонки как центр управления.
- Здоровье: фитнес-браслеты и часы, домашние медицинские приборы, передающие показатели врачу.
- Город и ЖКХ: счетчики с удаленной передачей показаний, управление уличным освещением, датчики заполненности контейнеров.
- Промышленность: предиктивное обслуживание оборудования по вибрации и температуре, контроль микроклимата на складе.
- Логистика и транспорт: трекеры грузов, телематика автопарка, датчики температуры в рефрижераторах.
- Сельское хозяйство: датчики влажности почвы и автоматический полив.
Эффект во всех случаях зависит от того, что делают с данными. Датчик сам по себе ничего не экономит: польза появляется, когда есть правило, аналитика или человек, который реагирует на сигнал.
Выводы
- В сеть объединяются не только компьютеры: смартфоны, телевизоры, пылесосы, датчики и счетчики тоже сетевые устройства, и это основа интернета вещей.
- IoT-система состоит из слоев: устройства, связь, шлюз или edge, платформа, приложения; в простых решениях слои могут совмещаться.
- MQTT (публикация — подписка через брокер, TCP) и CoAP (запрос — ответ, UDP) — два самых распространенных прикладных протокола IoT.
- IIoT отличается от бытового IoT ценой ошибки, сроком службы и протоколами.
- Главные риски — заводские пароли, незашифрованные каналы, широкие права устройств и неподписанные обновления.
Где применяется / связь с практикой
Освойте тему на практике
Интернет вещей — это одновременно электроника, сети, программирование микроконтроллеров и серверная часть. Для начала хватит платы вроде ESP32, датчика температуры и MQTT-брокера на своем компьютере: так за один вечер можно увидеть весь путь «датчик — брокер — график». Если хочется разобрать проектирование устройств, протоколы и облачную часть системно, посмотри программу курса «IoT Developer». Отдельные темы можно попробовать на открытых уроках Otus.
FAQ
Является ли смартфон устройством интернета вещей?
Смартфон — сетевое устройство, но обычно его относят не к «вещам», а к интерфейсу управления ими. Он часто выступает шлюзом: например, связывается с браслетом по Bluetooth и передает данные в облако.
Нужен ли интернет для работы IoT-устройств?
Не всегда. Многие системы работают в локальной сети через хаб или шлюз, а интернет нужен только для удаленного доступа и облачных функций. При отключении интернета часть сценариев умного дома продолжает работать, если логика выполняется локально.
Какой язык программирования нужен для IoT?
Для прошивок микроконтроллеров чаще всего используют C и C++, иногда MicroPython. Для серверной части и аналитики — Python, Go, Java и другие языки бэкенда.



