Введение
LoRa (Long Range) и LoRaWAN — это технологии беспроводной связи с низким энергопотреблением, которые позволяют передавать данные на расстояния до 15 км в открытой местности. Они идеально подходят для IoT-сценариев: мониторинг уровня воды в реках, сейсмическая активность, сельское хозяйство, умные города. Однако сбор, обработка и анализ данных с десятков удалённых узлов требуют сложной инфраструктуры: MQTT-брокеры, базы данных, системы оповещения. AI-агент ASI Biont автоматизирует этот процесс: он подключается к LoRa-устройствам через MQTT-мост, анализирует телеметрию, принимает решения и отправляет оповещения. В этой статье мы разберём конкретные схемы подключения, примеры кода для ESP32 с модулем SX1278 и реальные сценарии автоматизации.
Как ASI Biont подключается к LoRa/LoRaWAN-устройствам
ASI Biont не имеет встроенного LoRa-модема, поэтому подключение осуществляется через промежуточный шлюз (gateway), который получает данные от LoRa-узлов и передаёт их в облако. Самый распространённый способ — через MQTT-брокер. LoRa-шлюз (например, на базе ESP32 с модулем SX1278) подписывается на топики и публикует данные датчиков. AI-агент подключается к тому же MQTT-брокеру с помощью библиотеки paho-mqtt и обрабатывает поток сообщений.
Почему MQTT, а не COM-порт или SSH? LoRa-устройства обычно работают от батарей и передают данные короткими пакетами. MQTT — лёгкий протокол, оптимизированный для IoT. COM-порт подходит для прямого подключения через USB, но LoRa-устройства чаще находятся на расстоянии. SSH требует стабильного интернета, что не всегда доступно на удалённых узлах. MQTT-мост — оптимальный баланс между дальностью, энергопотреблением и простотой интеграции.
Конкретный сценарий: ESP32 + SX1278 + датчик уровня воды
Рассмотрим реальный кейс: мониторинг уровня воды в реке с помощью датчика (например, ультразвукового HC-SR04), подключённого к ESP32 с LoRa-модулем SX1278. ESP32 отправляет данные на шлюз (Raspberry Pi с LoRa-модулем), который публикует их в MQTT-топик water/level. ASI Biont подписывается на этот топик, анализирует тренды и при превышении порога отправляет уведомление в Telegram.
Шаг 1: Прошивка ESP32 (LoRa-модуль)
# Пример кода для ESP32 с SX1278 (используется библиотека LoRa)
import time
import binascii
from machine import Pin, SPI
import sx127x
# Настройка LoRa
lora = sx127x.SX127x(spi=SPI(1), cs=Pin(5), rx=Pin(2), rst=Pin(0), di0=Pin(4))
lora.set_frequency(868e6)
lora.set_tx_power(20)
# Датчик уровня воды (HC-SR04)
trigger = Pin(12, Pin.OUT)
echo = Pin(14, Pin.IN)
def measure_distance():
trigger.value(0)
time.sleep_us(2)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
while echo.value() == 0:
pass
start = time.ticks_us()
while echo.value() == 1:
pass
end = time.ticks_us()
duration = time.ticks_diff(end, start)
distance = (duration * 0.034) / 2
return distance
while True:
distance = measure_distance()
# Формируем пакет: уровень воды в мм
payload = "WATER:{:.0f}".format(distance * 10)
lora.send(payload)
time.sleep(60) # Отправка раз в минуту
Шаг 2: Настройка LoRa-шлюза (Raspberry Pi) с MQTT-мостом
На Raspberry Pi устанавливаем пакет lora-gateway-bridge (например, от ChirpStack) и настраиваем его на публикацию данных в MQTT-брокер (Mosquitto):
# Установка Mosquitto
sudo apt install mosquitto mosquitto-clients
# Конфигурация bridge (пример /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml)
[integration.mqtt]
server="tcp://localhost:1883"
topic_prefix="lora"
Теперь данные с ESP32 попадают в топик lora/water/level.
Шаг 3: Подключение ASI Biont через MQTT
Пользователь пишет в чате ASI Biont: «Подключись к MQTT-брокеру на localhost:1883, подпишись на топик lora/water/level, анализируй данные с датчика уровня воды. Если уровень превышает 500 мм — отправь предупреждение в Telegram». AI-агент автоматически генерирует Python-скрипт с paho-mqtt и выполняет его в sandbox-окружении:
import paho.mqtt.client as mqtt
import requests
import json
TELEGRAM_BOT_TOKEN = "ваш_токен"
TELEGRAM_CHAT_ID = "ваш_chat_id"
# Функция обработки сообщений
def on_message(client, userdata, msg):
payload = msg.payload.decode()
# Ожидаем формат "WATER:450"
if payload.startswith("WATER:"):
level = int(payload.split(":")[1])
if level > 500:
message = f"⚠️ Уровень воды превысил порог: {level} мм"
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": message}
)
client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.subscribe("lora/water/level")
client.loop_forever(timeout=1.0) # Таймаут 1 секунда для предотвращения бесконечного цикла
Важно: sandbox ASI Biont имеет таймаут 30 секунд, поэтому loop_forever с таймаутом — корректный способ подписки. Если нужно длительное наблюдение, AI-агент создаёт скрипт, который запускается на стороне пользователя (например, через Hardware Bridge или SSH на Raspberry Pi).
Альтернативный способ: Hardware Bridge + COM-порт
Если LoRa-шлюз подключён к компьютеру через USB (например, USB-to-Serial конвертер), можно использовать Hardware Bridge. Пользователь скачивает bridge.py из дашборда ASI Biont, запускает его с параметрами:
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 115200
AI-агент отправляет команды через industrial_command с протоколом serial://:
industrial_command(
protocol="serial://COM3",
command="serial_write_and_read",
data="WATER:450\n"
)
Bridge читает ответ от шлюза и возвращает данные в чат. Этот способ удобен, если шлюз находится рядом с ПК.
Сценарии автоматизации
- Сбор данных с 50+ удалённых узлов: AI-агент подписывается на MQTT-топики всех узлов, агрегирует данные в словарь, сохраняет в PostgreSQL через asyncpg. Пример:
import asyncpg
import json
async def save_data(payload):
conn = await asyncpg.connect(user='user', password='pass', database='db', host='localhost')
await conn.execute('INSERT INTO telemetry (node_id, value, timestamp) VALUES ($1, $2, NOW())',
payload['node'], payload['value'])
await conn.close()
-
Оповещения о превышении порогов: AI анализирует тренды (например, уровень воды растёт) и отправляет предупреждения в Telegram или Slack.
-
Визуализация через Grafana: AI-агент может экспортировать данные в InfluxDB или TimescaleDB для построения дашбордов. Но это требует дополнительной настройки — AI пишет скрипт для миграции данных.
-
Экономия времени: По оценкам пользователей, автоматизация телеметрии через ASI Biont экономит 15+ часов в неделю — не нужно писать MQTT-клиенты, обработчики ошибок и интеграции с Telegram вручную.
Почему ASI Biont, а не самописное решение?
- AI сам пишет код под ваше устройство: описали задачу в чате — получили готовый скрипт.
- Не нужно ждать обновлений: подключайте любые LoRa-устройства через execute_python с paho-mqtt.
- Единый интерфейс: все данные стекаются в один чат, где AI анализирует их и предлагает действия.
Заключение
LoRa/LoRaWAN-устройства открывают огромные возможности для удалённого мониторинга, но их интеграция с AI-агентом превращает сырые данные в интеллектуальные решения. ASI Biont подключается к вашему LoRa-шлюзу через MQTT или Hardware Bridge, анализирует телеметрию, оповещает об аномалиях и автоматизирует рутину. Попробуйте интеграцию на asibiont.com — опишите в чате свою задачу, и AI-агент настроит всё за секунды.
Комментарии