Введение
Современные здания — офисы, торговые центры, дата-центры — оснащены сложными системами автоматизации: управление HVAC (отопление, вентиляция, кондиционирование), освещением, пожарной сигнализацией, контролем доступа. Всё это объединяется через протокол BACnet (Building Automation and Control Network) и BMS (Building Management System). Проблема в том, что BMS — это, как правило, громоздкая панель управления с десятками экранов, которую настраивает инженер. Адаптивное управление в реальном времени, анализ трендов и автоматические сценарии требуют программирования и постоянного мониторинга.
ASI Biont — AI-агент, который подключается к любой BACnet-сети через BAC0 (библиотека Python для BACnet/IP) и берёт на себя интеллектуальное управление зданием. Вы просто описываете задачу в чате, например: «Подключись к BACnet-серверу по IP 192.168.1.100, прочитай все переменные HVAC, и если температура в зоне 2 выше 24°C, отправь уведомление в Telegram». AI сам пишет код, выполняет его и начинает мониторинг.
В этой статье разберём, как ASI Biont интегрируется с BACnet (BMS), какие задачи решает, и покажем реальные примеры кода для офиса, дата-центра и торгового центра.
Что такое BACnet и зачем подключать к нему AI-агента?
BACnet (ISO 16484-5) — открытый протокол для автоматизации зданий, разработанный ASHRAE. Он поддерживается большинством производителей BMS: Siemens, Johnson Controls, Honeywell, Schneider Electric. BACnet работает поверх UDP/IP (BACnet/IP), Ethernet (BACnet/Ethernet) или последовательных линий (BACnet MS/TP — на RS-485).
Типичные объекты BACnet:
- Analog Input/Output — датчики температуры, влажности, CO2, освещённости;
- Binary Input/Output — реле, контакторы, сигнализация;
- Multi-state Input/Output — режимы работы AHU (Air Handling Unit), вентилей;
- Schedule, Calendar — временные программы;
- Trend Log, Alarm — архивы и аварии.
Проблема: стандартный BMS — это «пассивная» система. Она показывает данные, но не анализирует их, не предсказывает отказы, не оптимизирует энергопотребление без сложных скриптов. AI-агент ASI Biont превращает BMS в активного помощника: он читает все объекты, выявляет аномалии, запускает сценарии по голосовой команде, интегрируется с Telegram, Slack, базами данных.
Как ASI Biont подключается к BACnet (BMS)?
ASI Biont использует библиотеку BAC0 (открытая реализация BACnet/IP на Python, основанная на BACpypes). Подключение происходит через industrial_command tool — встроенный инструмент AI-агента для работы с промышленными протоколами. Пользователь не пишет код вручную, а просто описывает задачу в чате.
Способы подключения (реальные механизмы ASI Biont):
- BACnet/IP через BAC0 — AI использует команду
industrial_command(protocol='bacnet', command='read_property', device=123, object_type='analog-input', instance=1, property='present-value')— это атомарная операция: AI отправляет BACnet-запрос (Who-Is, ReadProperty) и получает ответ. - Discover устройств —
industrial_command(protocol='bacnet', command='discover_devices')— AI сканирует сеть, находит все BACnet-устройства (B-BC, B-SA, B-AAC) и их объекты. - Write commands —
industrial_command(protocol='bacnet', command='write_property', device=123, object_type='analog-output', instance=1, property='present-value', value=22.5)— AI может изменять уставки температуры, включать/выключать освещение, запускать вентиляцию.
Все эти команды выполняются внутри AI-агента в облаке (sandbox). Для работы BAC0 требуется установка библиотеки (она уже предустановлена в sandbox ASI Biont). Пользователь указывает IP-адрес BACnet-сервера (или широковещательный адрес для discovery).
Почему BAC0, а не другой стек?
BAC0 — это де-факто стандарт для BACnet/IP на Python. Он активно развивается сообществом (более 1000 звёзд на GitHub) и поддерживает все основные сервисы BACnet: Who-Is, ReadProperty, WriteProperty, SubscribeCOV (Change of Value — аналог трендов в реальном времени). BAC0 работает на Windows, Linux, macOS — не требует специфического оборудования.
Сценарии использования: BACnet + ASI Biont
1. Мониторинг HVAC в офисе с уведомлениями в Telegram
Проблема: В большом офисном здании система HVAC управляется централизованно. Инженеру нужно постоянно следить за показателями температуры и влажности в разных зонах. Если кондиционер выходит из строя, об этом узнают только через несколько часов от жалующихся сотрудников.
Решение с ASI Biont: AI-агент подключается к BACnet-серверу, читает объекты Analog Input (температура, влажность, CO2) каждые 5 минут. Если температура в какой-либо зоне превышает 26°C (или влажность > 70%), AI отправляет уведомление в Telegram с указанием номера зоны и текущих показателей.
Пример диалога с AI:
Пользователь: «Подключись к BACnet-серверу по IP 10.0.1.50. Найди все устройства и прочитай все аналоговые входы. Если температура в любом помещении выше 26°C, отправь мне сообщение в Telegram с ID зоны и значением. Мой Telegram: @user123, токен бота: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11»
AI выполняет discover, находит устройство с ID 100 (B-BC контроллер), объект AI:1 (температура зона 1), AI:2 (температура зона 2) и т.д. Затем запускает фоновый скрипт (через execute_python) с библиотекой BAC0 для мониторинга и отправки уведомлений через Telegram API.
Пример кода, который генерирует AI:
import bac0
import requests
import time
# Подключение к BACnet-сети
bacnet = bac0.connect(ip='10.0.1.50')
# Обнаружение устройств
devices = bacnet.devices()
print(f'Найдено устройств: {len(devices)}')
# Мониторинг температуры
threshold = 26.0
telegram_token = '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
chat_id = '@user123'
while True:
for device in devices:
# Чтение аналоговых входов (температура)
for obj_id in range(1, 10): # до 10 датчиков
try:
value = bacnet.read(f'{device.device_id} analog-input {obj_id} present-value')
if value > threshold:
msg = f'Зона {obj_id}: температура {value:.1f}°C превышает {threshold}°C'
requests.post(f'https://api.telegram.org/bot{telegram_token}/sendMessage',
json={'chat_id': chat_id, 'text': msg})
except:
pass
time.sleep(300) # каждые 5 минут
Примечание: Sandbox ASI Biont имеет таймаут 30 секунд для execute_python, поэтому бесконечный цикл while True не подходит для длительного мониторинга. В реальной эксплуатации AI использует механизм SubscribeCOV (Change of Value) — BACnet-сервер сам отправляет уведомления при изменении значения. AI подписывается на объекты и реагирует на события. Для долгоживущих сценариев используется industrial_command с периодическим опросом через schedule (встроенный планировщик ASI Biont).
2. Оптимизация энергопотребления в дата-центре
Проблема: В дата-центре критически важна температура серверных стоек. Обычно система охлаждения работает с запасом, что приводит к избыточному энергопотреблению.
Решение с ASI Biont: AI анализирует данные с BACnet-датчиков температуры в каждой стойке (AI), управляет уставками чиллеров и VFD (частотные приводы вентиляторов) через BACnet WriteProperty. AI может автоматически снижать мощность охлаждения, если температура в стойках ниже 22°C, и повышать, если приближается к 27°C.
Пример команды AI:
industrial_command(protocol='bacnet', command='write_property', device=200, object_type='analog-output', instance=5, property='present-value', value=22.0) — установить уставку температуры приточного воздуха 22°C.
Результат: Экономия электроэнергии на охлаждение до 15-25% (по данным исследования ASHRAE для дата-центров с адаптивным управлением).
3. Управление освещением торгового центра по голосовой команде
Проблема: В торговом центре сотни светильников, управляемых через BACnet Binary Output. Для включения/выключения освещения в конкретном зале нужно идти к панели BMS или звонить диспетчеру.
Решение с ASI Biont: AI-агент подключается к BACnet и выполняет голосовые команды: «Включи свет в зоне A3 на 70%» — AI находит соответствующий аналоговый выход (AO) или группу выходов, записывает значение.
Пример диалога (голосовой ввод через телефон):
Пользователь: «Выключи всё освещение в фуд-корте, кроме аварийного»
AI: «Выполняю. Найдено 12 Binary Output для освещения фуд-корта (устройство 150). Отключаю BO:1..BO:12, оставляю BO:13 (аварийное). Готово.»
4. Автоматическое аварийное оповещение при пожаре
Проблема: Система пожарной сигнализации в здании часто интегрирована с BMS через BACnet Multi-state Input. При срабатывании датчика дыма информация идёт на пульт диспетчера, но не всегда до ответственных лиц.
Решение с ASI Biont: AI подписывается на объекты типа 'multi-state-input' с состоянием 'alarm'. При активации AI отправляет уведомление в Telegram/Slack группу, вызывает скрипт оповещения по email и, при необходимости, запускает эвакуационную музыку через аудиосистему (если она тоже на BACnet).
5. Сбор исторических данных и прогнозирование отказов
Проблема: BMS хранит тренды (Trend Log), но не анализирует их. Инженер должен вручную смотреть графики и выявлять аномалии.
Решение с ASI Biont: AI читает Trend Log объектов (например, температура обратной воды чиллера) за последние 30 дней, строит график через matplotlib и детектирует аномалии: резкий рост температуры может указывать на засорение конденсатора. AI отправляет отчёт с графиком в Telegram.
Пример кода (выполняется через execute_python, без while True):
import bac0
import matplotlib.pyplot as plt
import io
import base64
bacnet = bac0.connect(ip='10.0.1.50')
# Чтение трендов с устройства 100 (чиллер)
trend_data = bacnet.read('100 analog-input 2 trend-log 1')
# Извлечение значений и времени
values = [point['value'] for point in trend_data]
timestamps = [point['timestamp'] for point in trend_data]
# Построение графика
plt.figure(figsize=(10, 5))
plt.plot(timestamps, values, label='Температура обратной воды')
plt.xlabel('Время')
plt.ylabel('°C')
plt.title('Тренд температуры чиллера')
plt.legend()
# Сохранение в PNG и кодирование в base64
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img_base64 = base64.b64encode(buf.read()).decode('utf-8')
print(f'График готов: data:image/png;base64,{img_base64}')
AI отправляет изображение в чат.
Как подключить BACnet (BMS) к ASI Biont?
Процесс интеграции занимает минуты и не требует навыков программирования:
- Зарегистрируйтесь на asibiont.com и получите API-токен (в разделе Devices → Create API Key).
- Скачайте bridge.py (только из дашборда, не из GitHub) — если BACnet-сеть находится за NAT или требует локального доступа. В большинстве случаев BAC0 работает напрямую из облака, если BACnet-сервер доступен по IP (BACnet/IP).
- Опишите задачу в чате AI-агенту: «Подключись к BACnet-сети по IP 192.168.1.100, просканируй устройства, прочитай все аналоговые входы и построй график температуры за сегодня».
- AI сам пишет код на Python с BAC0, выполняет его и выводит результат. Если нужен долгосрочный мониторинг, AI использует планировщик (schedule) для периодических запросов.
Важно: ASI Biont подключается к любому устройству через execute_python — AI сам пишет код интеграции под каждое устройство. Не нужно ждать, пока разработчики добавят поддержку BACnet — AI уже умеет работать с BAC0, pymodbus, snap7, pycomm3, MQTT, HTTP API и т.д. Пользователь просто описывает в чате параметры подключения (IP, порт, логин/пароль), и AI всё делает сам.
Почему это выгодно?
- Экономия времени: Интеграция BACnet с AI-агентом занимает минуты, а не дни на программирование BMS-скриптов.
- Снижение затрат на энергоресурсы: Автоматическая оптимизация HVAC и освещения снижает счета за электричество на 15-30% (данные исследования Johnson Controls, 2023).
- Повышение надёжности: AI детектирует аномалии до того, как они приведут к аварии.
- Голосовое управление: Не нужно искать панель BMS — просто скажите AI, что сделать.
- Масштабируемость: Один AI-агент может управлять сотнями BACnet-устройств в нескольких зданиях.
Заключение
BACnet (BMS) — это «мозг» умного здания, но без AI он остаётся просто пассивным сборщиком данных. ASI Biont превращает его в активного интеллектуального помощника, который мониторит, анализирует, предсказывает и управляет. Интеграция через BAC0 проста, надёжна и не требует написания кода вручную.
Попробуйте сами: зайдите на asibiont.com, создайте API-ключ, скачайте bridge (если нужно) и напишите AI: «Подключись к BACnet-серверу 10.0.0.1, прочитай все объекты и пришли мне отчёт». Увидите, как AI за секунды сделает то, на что раньше уходили часы работы инженера.
Комментарии