Интернет пропал. Свет отключили. А ваш умный дом продолжает работать. Звучит как фантастика? Это реальность, которую я собрал после того, как в моем районе трижды за месяц обрывали оптоволокно. Классические Wi-Fi решения превращались в бесполезный хлам. Нужен был полностью автономный агент, работающий даже когда весь мир отключен.
LoRa (Long Range) радио - технология, которая передает данные на километры при потреблении энергии как у электронных часов. Meshtastic - open-source протокол поверх LoRa, создающий децентрализованную mesh-сеть. Ollama - инструмент для запуска локальных LLM моделей. Home Assistant - платформа для умного дома. Соединяем все это - получаем AI-агента, который думает локально и общается по радио.
Почему это работает, когда все остальное ломается
Стандартный умный дом строится на трех столпах: интернет, облачные сервисы, постоянное питание. Выбиваем один - вся система падает. LoRa-сеть работает на частотах 868/915 МГц с мощностью передачи 10-100 мВт. Батарейки хватает на месяцы. Mesh-топология означает: если один узел упал, данные найдут другой путь.
AI-компонент решает главную проблему LoRa: ограниченная пропускная способность (до 50 кбит/с). Вместо отправки сырых данных агент анализирует ситуацию локально и передает только решения: "включить обогрев", "открыть вентиляцию", "тревога: утечка газа".
Что понадобится для сборки
| Компонент | Модель/Версия | Назначение |
|---|---|---|
| LoRa-радио | RAK3172, LilyGO T-Beam | Аппаратная часть сети |
| Плата управления | Raspberry Pi 5 (8GB) | Запуск Ollama и Home Assistant |
| LLM модель | phi4-mini (4.2B параметров) | Локальный интеллект агента |
| Альтернативная LLM | gemma3:12b (если хватит памяти) | Более мощная модель |
phi4-mini выбрана не случайно. На февраль 2026 года это одна из самых эффективных 4B-моделей. Она работает на Raspberry Pi 5 с адекватной скоростью (5-7 токенов/сек), понимает контекст до 128К токенов и отлично справляется с классификацией интентов - именно то, что нужно нашему агенту.
Шаг за шагом: от железа к интеллекту
1 Подготовка LoRa-сети с Meshtastic
Сначала собираем физический канал связи. Берем две платы LilyGO T-Beam (у них уже есть GPS, что полезно для геолокации устройств). Прошиваем последнюю версию Meshtastic - на февраль 2026 это v2.3.7.
# Клонируем репозиторий Meshtastic
git clone https://github.com/meshtastic/firmware.git
cd firmware
# Устанавливаем зависимости для сборки
python3 -m pip install -r requirements.txt
# Собираем прошивку для T-Beam
pio run -e tbeam
# Прошиваем через USB
python3 -m esptool --chip esp32 --port /dev/ttyUSB0 write_flash 0x1000 .pio/build/tbeam/firmware.bin
После прошивки открываем веб-интерфейс Meshtastic по адресу http://meshtastic.local/. Настраиваем:
- Имя узла (например, "home-base", "sensor-garden")
- Канал связи - используем стандартный "LongFast" для баланса дальности и скорости
- Режим работы - «Router» для базовой станции, «Client» для сенсоров
2 Установка Ollama и загрузка модели
На Raspberry Pi 5 устанавливаем Ollama - на 2026 год это версия 0.5.8 с поддержкой GPU через Vulkan для Raspberry Pi.
# Устанавливаем Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Запускаем службу
sudo systemctl enable ollama
sudo systemctl start ollama
# Загружаем phi4-mini (последняя версия на 18.02.2026)
ollama pull phi4-mini:latest
# Проверяем работу
ollama run phi4-mini "Привет! Ответь коротко."
Не пытайтесь ставить большие модели типа Llama 3.1 70B на Raspberry Pi. phi4-mini специально оптимизирована для edge-устройств. Если у вас более мощный сервер (32+ GB RAM), можно использовать gemma3:12b - она дает лучшие результаты в логических задачах.
3 Интеграция Home Assistant
Устанавливаем Home Assistant OS через Raspberry Pi Imager или вручную:
# Для Raspberry Pi 5 используем 64-битную версию
wget https://github.com/home-assistant/operating-system/releases/download/12.5/haos_rpi5-64-12.5.img.xz
# Записываем на SD-карту
xz -d haos_rpi5-64-12.5.img.xz
sudo dd if=haos_rpi5-64-12.5.img of=/dev/mmcblk0 bs=4M status=progress
После запуска Home Assistant добавляем интеграцию MQTT (Meshtastic использует MQTT для связи с внешними системами).
В файле configuration.yaml добавляем:
# MQTT интеграция для Meshtastic
mqtt:
broker: 127.0.0.1
port: 1883
username: !secret mqtt_username
password: !secret mqtt_password
# Автоматизация для обработки сообщений
automation:
- alias: "Process LoRa messages"
trigger:
platform: mqtt
topic: "msh/+/json"
action:
- service: python_script.process_lora_message
data:
payload: "{{ trigger.payload }}"
# Python скрипт для обработки
python_script:
process_lora_message: /config/python_scripts/process_lora_message.py
4 Создаем AI-агента: мозг системы
Здесь начинается магия. Пишем Python-скрипт, который берет сырые данные с сенсоров, отправляет в phi4-mini для анализа, получает решение и выполняет его через Home Assistant.
#!/usr/bin/env python3
# /config/python_scripts/lora_ai_agent.py
import json
import requests
import paho.mqtt.client as mqtt
from datetime import datetime
# Конфигурация
OLLAMA_URL = "http://localhost:11434/api/generate"
HA_URL = "http://localhost:8123/api"
HA_TOKEN = "your_long_lived_access_token"
# Системный промпт для phi4-mini
SYSTEM_PROMPT = """Ты - AI-агент умного дома. Анализируй данные с сенсоров и принимай решения.
Доступные действия:
- Включить/выключить устройства
- Изменить температуру
- Отправить уведомление
- Активировать сценарий
Формат ответа ТОЛЬКО JSON:
{
"action": "название_действия",
"target": "устройство_или_зона",
"value": "значение",
"reason": "краткое_объяснение"
}"""
class LoRaAIAgent:
def __init__(self):
self.mqtt_client = mqtt.Client()
self.mqtt_client.on_connect = self.on_connect
self.mqtt_client.on_message = self.on_message
def on_connect(self, client, userdata, flags, rc):
print(f"Connected to MQTT with code {rc}")
client.subscribe("msh/+/json")
def on_message(self, client, userdata, msg):
try:
data = json.loads(msg.payload.decode())
if "type" in data and data["type"] == "nodeinfo":
return # Игнорируем служебные сообщения
# Анализируем данные через Ollama
decision = self.analyze_with_ai(data)
# Выполняем решение
self.execute_decision(decision)
except Exception as e:
print(f"Error processing message: {e}")
def analyze_with_ai(self, sensor_data):
"""Отправляем данные в phi4-mini для анализа"""
prompt = f"""{SYSTEM_PROMPT}
Данные с сенсоров:
{json.dumps(sensor_data, indent=2)}
Текущее время: {datetime.now().strftime('%H:%M')}
Время года: зима
Прими решение:"""
payload = {
"model": "phi4-mini",
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.3, # Низкая температура для детерминированных решений
"num_predict": 150
}
}
response = requests.post(OLLAMA_URL, json=payload, timeout=30)
response.raise_for_status()
result = response.json()
ai_response = result["response"].strip()
# Извлекаем JSON из ответа (модель может добавить текст)
start_idx = ai_response.find('{')
end_idx = ai_response.rfind('}') + 1
if start_idx != -1 and end_idx != 0:
json_str = ai_response[start_idx:end_idx]
return json.loads(json_str)
else:
return {"action": "log", "reason": "Не удалось разобрать ответ AI"}
def execute_decision(self, decision):
"""Выполняем решение через Home Assistant API"""
action = decision.get("action")
headers = {
"Authorization": f"Bearer {HA_TOKEN}",
"Content-Type": "application/json"
}
if action == "turn_on":
entity_id = f"switch.{decision['target']}"
requests.post(
f"{HA_URL}/services/switch/turn_on",
json={"entity_id": entity_id},
headers=headers
)
elif action == "set_temperature":
entity_id = f"climate.{decision['target']}"
requests.post(
f"{HA_URL}/services/climate/set_temperature",
json={
"entity_id": entity_id,
"temperature": float(decision["value"])
},
headers=headers
)
elif action == "notify":
requests.post(
f"{HA_URL}/services/notify/mobile_app",
json={
"message": decision["reason"],
"title": "AI Agent Decision"
},
headers=headers
)
print(f"Executed: {decision}")
def run(self):
self.mqtt_client.connect("localhost", 1883, 60)
self.mqtt_client.loop_forever()
if __name__ == "__main__":
agent = LoRaAIAgent()
agent.run()
Реальные сценарии работы
Система установлена. Что она может делать без интернета?
Сценарий 1: Умное отопление на дровах
В загородном доме стоит дровяной котел с электрическим контроллером. LoRa-датчик температуры в гостиной показывает +16°C. Датчик на улице: -5°C. phi4-mini анализирует:
- Температура в доме ниже комфортной (+21°C)
- На улице холодно, теплопотери высокие
- Время 23:45, скоро ночь
- Запас дров в бункере (по датчику уровня) - 60%
Решение: увеличить подачу воздуха в котел на 15%, активировать циркуляционный насос. Все команды идут по LoRa к контроллеру котла.
Сценарий 2: Охранная система
PIR-датчик движения на LoRa срабатывает в нерабочее время. Камера (локальная, запись на SD) делает снимок. Мини-компьютер рядом запуска gemma3:12b для анализа изображения (человек/животное/ложное срабатывание). Если человек - включается сирена, владельцу идет SMS через GSM-модем (работает автономно).
Ошибки, которые сломают вашу систему
1. Не тестируйте на одной плате. LoRa требует реального расстояния. Две платы в соседних комнатах через стену могут не связаться, а на улице с расстоянием 500 метров - отлично.
2. Не используйте стандартные каналы Meshtastic в городе. На 868 МГз работает куча устройств. Зайдите в веб-интерфейс, перейдите в Radio Config, смените Channel Settings - Frequency Offset. Сдвиньте на 1-2 МГц от стандартных значений.
3. Не оставляйте Ollama с default настройками. В ~/.ollama/config.json добавьте "num_parallel": 1 и "num_ctx": 4096 для phi4-mini. Иначе Raspberry Pi 5 упрется в память при первом же запросе.
Что делать, когда интернет все же есть
Автономность не означает изоляцию. Когда интернет появляется, система может:
- Синхронизировать логи и телеметрию с вашим сервером
- Загружать обновления моделей для Ollama (новые версии phi4-mini)
- Делать бэкап конфигурации Home Assistant
- Использовать более мощные облачные модели для сложного анализа, сохраняя локальную phi4-mini как fallback
Настройте в Home Assistant автоматизацию, которая при появлении интернета запускает скрипт синхронизации.
Стоимость и альтернативы
| Компонент | Стоимость (руб) | Альтернатива |
|---|---|---|
| Raspberry Pi 5 8GB | 12 000 | Orange Pi 5 (дешевле, но сложнее с драйверами) |
| 2x LilyGO T-Beam | 8 000 | RAK3172 + антенна (лучше дальность) |
| Датчики (температура, движение) | 3 000 | Самодельные на ESP32 + LoRa модуль |
| Итого | ~23 000 | Можно уложиться в 15 000 с китайскими аналогами |
Для сравнения: готовые коммерческие системы автономного умного дома начинаются от 80 000 рублей и почти всегда имеют проприетарные протоколы, которые нельзя модифицировать.
Что будет дальше с такими системами
К 2027 году ожидаю появления специализированных LLM моделей для edge-устройств размером 1-2B параметров, которые будут работать даже на Raspberry Pi Zero. Производители чипов (Broadcom, Qualcomm) уже анонсировали нейропроцессоры для LoRa-устройств.
Сейчас самая слабая часть системы - энергопотребление Raspberry Pi. В режиме ожидания он все равно тянет 3-5Вт. Решение: использовать Pi только для сложных вычислений, а для постоянного мониторинга - микроконтроллеры на ESP32, которые просыпаются по таймеру, собирают данные, отправляют по LoRa и снова засыпают (потребление в сне: 10 мкА).
Если вам интересна тема полностью локальных AI-агентов, посмотрите мою статью про HomeGenie v2.0 - это другой подход к той же проблеме. А для тех, кто хочет начать с более простых решений, есть гайд по сборке локального Jarvis без радио-компонентов.
Главный урок, который я вынес: автономность - это не про отказ от технологий. Это про умный выбор технологий, которые работают когда все остальное сломалось. Ваш умный дом не должен зависеть от доброй воли интернет-провайдера. Особенно когда за окном -20°C, а в котле еще есть дрова.