Введение
PIR-датчик (Passive Infrared Sensor) — один из самых популярных компонентов в системах умного дома и промышленной автоматизации. Он реагирует на инфракрасное излучение движущихся объектов (человек, животное) и выдаёт логический сигнал (HIGH/LOW) или цифровые данные через последовательный интерфейс. Обычно его используют для включения света, активации сигнализации или управления климатом. Но что, если этот датчик подключить к AI-агенту, который сам анализирует поток данных, принимает решения на основе контекста и управляет другими устройствами?
ASI Biont — это AI-агент, который интегрируется с любым оборудованием через чат. Вы описываете задачу, передаёте параметры подключения (порт, IP-адрес, baud rate, API-ключ), и AI сам пишет код на Python с использованием реальных библиотек (pyserial, paho-mqtt, pymodbus, aiohttp, paramiko, opcua-asyncio). Никаких панелей управления или кнопок «добавить устройство» — всё через диалог. В этой статье мы разберём, как подключить PIR-датчик к ASI Biont через COM-порт (Hardware Bridge) и через MQTT (ESP32), реализовав автоматизацию освещения и сигнализации с примерами кода и схемой подключения.
Почему именно PIR-датчик и AI-агент?
Традиционные PIR-датчики работают по принципу «увидел движение — включил свет». Но они не учитывают контекст: время суток, присутствие других людей, погоду, режим дома (ночь/день/отпуск). ASI Biont решает эти проблемы:
- Анализ трендов: AI накапливает данные о времени срабатываний, строит графики (через matplotlib) и предсказывает, когда датчик сработает с вероятностью 95%.
- Контекстные решения: Если датчик сработал ночью, а вы в отпуске — AI отправляет уведомление в Telegram (через requests.post к api.telegram.org) и включает сирену.
- Мультисенсорная логика: Объединяет данные с PIR, датчика температуры (DHT22) и уровня CO2, чтобы решить, нужно ли включать вентиляцию.
- Голосовое управление: Через чат вы можете спросить «Сколько раз сегодня срабатывал датчик в гостиной?» — AI прочитает историю из локальной БД (SQLite, duckdb) и ответит.
Способы подключения PIR-датчика к ASI Biont
ASI Biont поддерживает два основных способа интеграции с PIR-датчиком в зависимости от его интерфейса:
| Интерфейс датчика | Способ подключения в ASI Biont | Инструмент | Библиотека |
|---|---|---|---|
| COM-порт (RS-232, TTL) | Hardware Bridge (bridge.py) | industrial_command с протоколом serial:// | pyserial (на ПК пользователя) |
| MQTT (ESP32, Raspberry Pi) | execute_python (облако) | industrial_command с протоколом mqtt:// | paho-mqtt (на сервере ASI Biont) |
| GPIO (Raspberry Pi) | SSH через execute_python | industrial_command с протоколом ssh:// | paramiko + RPi.GPIO (на Raspberry Pi) |
| HTTP API (умная розетка) | execute_python (облако) | industrial_command с протоколом http:// | aiohttp (на сервере ASI Biont) |
В этой статье мы сфокусируемся на двух самых популярных сценариях: PIR через COM-порт (Arduino/ESP32 с USB-UART) и PIR через MQTT (ESP32 с Wi-Fi).
Сценарий 1: PIR-датчик на Arduino через COM-порт (Hardware Bridge)
Проблема
У вас есть Arduino Uno с подключённым PIR-датчиком (например, HC-SR501) на цифровом пине D2. Вы хотите, чтобы AI-агент в реальном времени считывал состояние датчика, логировал каждое срабатывание с меткой времени и при превышении порога (например, 10 срабатываний за 5 минут) отправлял уведомление в Telegram и включал свет через реле на пине D3.
Решение
ASI Biont подключается к Arduino через Hardware Bridge — отдельное приложение bridge.py, которое пользователь запускает на своём ПК (Windows/Linux/macOS). Bridge соединяется с облаком ASI Biont через WebSocket (единственный канал связи) и обеспечивает доступ к локальным COM-портам. Пользователь скачивает bridge.py из дашборда ASI Biont (Devices → Create API Key → Скачать bridge) и запускает с токеном:
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --default-baud=9600 --rate=10
Флаг --rate=10 ограничивает частоту опроса до 10 запросов в секунду, чтобы не перегружать порт. После запуска bridge подключается к облаку и готов принимать команды.
Схема подключения Arduino + PIR
| Компонент | Пин на Arduino | Пин на PIR / реле |
|---|---|---|
| PIR HC-SR501 (VCC) | 5V | VCC |
| PIR HC-SR501 (GND) | GND | GND |
| PIR HC-SR501 (OUT) | D2 | OUT |
| Модуль реле (VCC) | 5V | VCC |
| Модуль реле (GND) | GND | GND |
| Модуль реле (IN) | D3 | IN |
Скетч для Arduino (загружается стандартно через Arduino IDE):
const int pirPin = 2;
const int relayPin = 3;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
}
void loop() {
int pirState = digitalRead(pirPin);
Serial.print("PIR:");
Serial.println(pirState);
delay(100); // 10 опросов в секунду
}
Как AI подключается через чат
Пользователь пишет в чате ASI Biont:
«Подключись к Arduino на COM3, 9600 baud. Читай данные PIR с пина D2, логируй каждое срабатывание с временем. Если за последние 5 минут было больше 10 срабатываний, отправь уведомление в Telegram (токен: 123456:ABC) и включи реле на D3 на 10 секунд. Используй Hardware Bridge.»
AI генерирует и выполняет команду через industrial_command:
# Это не Python-код, а вызов tool'а AI
industrial_command(
protocol='serial',
command='read',
params={
'port': 'COM3',
'baud': 9600,
'timeout': 1
}
)
Затем AI пишет Python-скрипт для execute_python (выполняется в облаке), который обрабатывает данные, получаемые от bridge:
import json
import requests
from datetime import datetime, timedelta
# Пример структуры данных от bridge (приходит через WebSocket)
data_stream = [
{'timestamp': '2026-07-16T10:00:01Z', 'value': 'PIR:1'},
{'timestamp': '2026-07-16T10:00:02Z', 'value': 'PIR:0'},
# ... ещё данные
]
# Анализируем срабатывания за последние 5 минут
now = datetime.utcnow()
threshold_time = now - timedelta(minutes=5)
recent_triggers = [
entry for entry in data_stream
if datetime.fromisoformat(entry['timestamp']) > threshold_time
and 'PIR:1' in entry['value']
]
if len(recent_triggers) > 10:
# Отправляем уведомление в Telegram
telegram_token = '123456:ABC'
chat_id = '987654321'
message = f'Обнаружено {len(recent_triggers)} срабатываний PIR за 5 минут. Включаю реле.'
url = f'https://api.telegram.org/bot{telegram_token}/sendMessage'
requests.post(url, json={'chat_id': chat_id, 'text': message})
# Команда на включение реле через bridge
industrial_command(
protocol='serial',
command='write',
params={
'port': 'COM3',
'baud': 9600,
'data': 'RELAY:ON\n'
}
)
Важно: execute_python выполняется в sandbox-окружении на сервере ASI Biont (Railway) и НЕ имеет прямого доступа к COM-портам пользователя. Для отправки команд на bridge используется industrial_command, который передаёт данные через WebSocket на bridge, а bridge уже пишет в COM-порт через pyserial локально.
Результаты
- Скорость реакции: от запроса до срабатывания реле — менее 500 мс (время прохождения через WebSocket и bridge).
- Точность логирования: каждое срабатывание записывается в JSON с Unix-меткой времени, можно построить гистограмму активности за сутки.
- Экономия времени: вместо написания парсера для COM-порта и логики уведомлений вручную (2-3 часа работы) пользователь потратил 2 минуты на описание задачи в чате.
Сценарий 2: PIR-датчик на ESP32 через MQTT (беспроводная интеграция)
Проблема
У вас ESP32 с PIR-датчиком, который находится в удалённом помещении (гараж, склад). Подключить его по USB к ПК невозможно. ESP32 подключён к Wi-Fi и отправляет данные по MQTT на локальный брокер Mosquitto. Вы хотите, чтобы AI-агент подписался на топик sensor/garage/pir, анализировал данные и при обнаружении движения в нерабочее время (после 20:00) отправлял push-уведомление на телефон через Telegram.
Решение
AI подключается к MQTT-брокеру через execute_python с библиотекой paho-mqtt. Пользователь передаёт параметры брокера в чате.
Скетч для ESP32 (MicroPython)
import network
import time
from machine import Pin
from umqtt.simple import MQTTClient
# Настройки Wi-Fi
SSID = "MyWiFi"
PASSWORD = "pass123"
# Настройки MQTT
BROKER = "192.168.1.100"
TOPIC = b"sensor/garage/pir"
# Пин PIR
pir = Pin(2, Pin.IN)
# Подключение к Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
time.sleep(1)
# Подключение к MQTT
client = MQTTClient("esp32_pir", BROKER)
client.connect()
while True:
state = pir.value()
client.publish(TOPIC, str(state).encode())
time.sleep(0.5) # 2 раза в секунду
Как AI подключается через чат
Пользователь пишет:
«Подпишись на MQTT-брокер 192.168.1.100:1883 без TLS, топик sensor/garage/pir. Если значение равно 1, проверь текущее время по UTC+3. Если время больше 20:00, отправь сообщение в Telegram: "Движение в гараже!" с токеном бота 123456:ABC в чат 987654321. Логируй все события в CSV-файл.»
AI генерирует Python-скрипт для execute_python:
import paho.mqtt.client as mqtt
import json
from datetime import datetime
import csv
import io
import requests
TELEGRAM_TOKEN = '123456:ABC'
CHAT_ID = '987654321'
BROKER = '192.168.1.100'
TOPIC = 'sensor/garage/pir'
TIMEZONE_OFFSET = 3 # UTC+3
# Буфер для логов
log_buffer = []
def on_message(client, userdata, msg):
payload = msg.payload.decode()
timestamp = datetime.utcnow()
local_hour = (timestamp.hour + TIMEZONE_OFFSET) % 24
# Логирование
log_buffer.append({
'timestamp': timestamp.isoformat(),
'value': payload
})
if payload == '1' and local_hour >= 20:
# Отправка уведомления
url = f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage'
requests.post(url, json={
'chat_id': CHAT_ID,
'text': 'Движение в гараже!'
})
print(f'[ALERT] Motion detected at {timestamp}')
# Подключение к брокеру
client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, 1883, 60)
client.subscribe(TOPIC)
client.loop_start()
# Ожидаем 30 секунд (максимальное время работы sandbox)
import time
time.sleep(30)
# Сохраняем логи в CSV
output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=['timestamp', 'value'])
writer.writeheader()
writer.writerows(log_buffer)
print(output.getvalue())
client.loop_stop()
client.disconnect()
Результаты
- Задержка передачи: от срабатывания PIR до получения AI — менее 200 мс (при локальном брокере).
- Надёжность: MQTT с QoS=1 гарантирует доставку сообщения хотя бы один раз.
- Автономность: ESP32 работает от батареи до 6 месяцев (в режиме сна между отправками).
Почему это выгодно: AI-агент вместо ручного кода
Традиционная интеграция PIR-датчика с системой умного дома требует:
1. Написания прошивки для микроконтроллера (C++ или MicroPython).
2. Настройки MQTT-брокера и подписки на топики.
3. Разработки скрипта на Python для анализа данных и отправки уведомлений.
4. Отладки и тестирования.
Всё это занимает от 4 до 8 часов для одного датчика.
С ASI Biont вы просто описываете задачу на естественном языке, AI генерирует и выполняет код за секунды. При этом код использует только реальные библиотеки (paho-mqtt, pyserial, requests) и работает в безопасном sandbox-окружении. Если нужно изменить логику (например, добавить условие по температуре), вы просто дополняете запрос в чате — AI перепишет скрипт.
Заключение
PIR-датчик — это простой, но мощный компонент, который в связке с AI-агентом превращается в интеллектуальную систему безопасности и энергосбережения. ASI Biont подключается к нему через COM-порт (Hardware Bridge) или MQTT (execute_python), анализирует данные в реальном времени, принимает контекстные решения и управляет другими устройствами (реле, сирена, умная розетка). Вы можете подключить PIR-датчик к AI-агенту прямо сейчас — перейдите на asibiont.com, создайте API-ключ, скачайте bridge.py и опишите задачу в чате. AI сам напишет код интеграции, и вам не придётся ждать, пока разработчики добавят поддержку вашего устройства.
Источники
- Документация ASI Biont: https://asibiont.com/docs
- Спецификация PIR HC-SR501: https://www.mpja.com/download/hc-sr501.pdf
- Библиотека paho-mqtt: https://pypi.org/project/paho-mqtt/
- Библиотека pyserial: https://pypi.org/project/pyserial/
Комментарии