惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
Y
Y Combinator Blog
V
V2EX
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
B
Blog
G
Google Developers Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
N
Netflix TechBlog - Medium
腾讯CDC

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Как я сделал резервное управление дачей через Meshtastic
MicroVolk (W · 2026-05-14 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение4 мин

Охват и читатели3

Обычно Meshtastic используют как мессенджер. Я применил его как резервный канал связи с удаленным объектом. 

Задача простая: есть дача с регулярно отключаемым мобильным интернетом. При этом нужно получать алармы от автоматики дачи. И иметь возможность минимального управления оборудованием, например, проверить состояние бойлера, выключить свет или посмотреть температуру в помещении. 

И я сделал это. Как – читайте ниже.

Что такое Meshtastic

Meshtastic — это открытый проект, который строит децентрализованную mesh-сеть для обмена сообщениями по радиоканалу LoRa, без использования сотовой связи и интернета.

Узлы сети — это недорогие устройства на базе ESP32 с LoRa-модулем. Они обмениваются короткими сообщениями как напрямую, так и ретранслируют их друг через друга.

Основные свойства:

  • работает в нелицензируемых диапазонах LoRa (433/868/915 МГц — зависит от региона);

  • передает небольшие пакеты данных;

  • поддерживает сквозное шифрование;

  • маршрутизация сообщений производится автоматически;

  • радиомодули LoRA подключаются к телефону или ПК по Bluetooth, Wi-Fi или USB.

Итого: Meshtastic — это такая «народная» сеть для передачи данных. Главный недостаток — очень низкая пропускная способность. Сеть подходит только для редких коротких сообщений и простой телеметрии. 

Оборудование, которое я использовал

Оборудование, которое я использовал

С чего всё началось

В Казани уже работает сеть Meshtastic, именно ее я и решил использовать. 

Стенд собрал на Wiren Board 8.5 с Meshtastic-узлом, состоящим из Pro Micro на базе nRF52840 и LoRa-модулем SX1262. Все это размещено на даче.

На контроллере поднял отдельный сервис, который общается с Meshtastic-узлом через serial/API и сохраняет сообщения в локальную базу данных SQLite.  

В моей конфигурации сообщения проходили примерно 50 км. При маршруте в три хопа команда доходила до объекта за 10–15 секунд. 

Сначала я просто переключал реле, управляющие освещением и бойлером. Затем добавил чтение температуры воздуха. Обмен данными происходил стабильно. 

Но у такого канала есть серьезные ограничения. Задержки непредсказуемы: они зависят от рельефа, размещения нод и загрузки сети. Иногда пакет не доходит вовсе, поэтому каждую команду нужно подтверждать. 

Ну и не обойтись без защиты: контроллер принимает команды только от доверенной ноды. 

Для задач, требующих гарантированного времени реакции, такой канал не подходит. Но как резерв для управления дачей — вполне рабочий вариант. 

Как это работает

Путь команды выглядит так:

  • Телефон, через подключенный по Bluetooth Meshtastic-узел, отправляет сообщение в mesh-сеть;

  • сервис на Wiren Board принимает сообщение через CLI или API (по serial) и разбирает его как текстовую команду, если источник доверенный;

  • сообщение сохраняется в SQLite;

  • команда публикуется в MQTT и обрабатывается правилами на Wiren Board;

  • после выполнения команды контроллер отправляет подтверждение отправителю.

Я создал набор текстовых команд, которые сервис умеет обрабатывать:

  • включи бойлер;

  • выключи бойлер;

  • включи свет;

  • выключи свет;

  • включи режим охраны;

  • статус.

Сервис сравнивает текст входящего сообщения с этим списком и при совпадении выполняет необходимые действия (собирает необходимые данные, пакует в пакет и т.д.).

Окно с чатом

Окно с чатом

Конфигурация переменных

Конфигурация переменных

Спойлер: конфигурационные файлы

Сам проект описан подробно на https://github.com/VolkMicro/WB-Meshtastic-control

Основными файлами конфигурации являются controls.yaml и rules.yaml :

controls.yaml

controls.yaml описывает сущности объекта: бойлер, свет, температуру и другие параметры. Это человекочитаемый слой поверх MQTT-топиков Wiren Board.

controls:
  boiler:
    title: "Бойлер"
    type: switch
    command_topic: "/devices/<device>/controls/<control>/on"
    state_topic: "/devices/<device>/controls/<control>"
    payload_on: "1"
    payload_off: "0"

  light:
    title: "Свет"
    type: switch
    command_topic: "/devices/<device>/controls/<control>/on"
    state_topic: "/devices/<device>/controls/<control>"
    payload_on: "1"
    payload_off: "0"

  room_temperature:
    title: "Температура помещения"
    type: sensor
    state_topic: "/devices/<device>/controls/<control>"
    unit: "°C"

Здесь <device> и <control> — это идентификаторы устройств и контролов в MQTT.

Такой слой убирает жесткую привязку к длинным топикам. В правилах я использую короткие имена (boiler, light, room_temperature), а не строки вида /devices/....

rules.yaml

rules.yaml описывает, как сервис реагирует на входящие сообщения.

trusted_sources:
  - "<meshtastic_node_id>"

rules:
  - name: "Включить бойлер"
    match:
      text:
        - "включи бойлер"
    action:
      type: set_control
      control: boiler
      value: true

  - name: "Выключить бойлер"
    match:
      text:
        - "выключи бойлер"
    action:
      type: set_control
      control: boiler
      value: false

  - name: "Запрос статуса"
    match:
      text:
        - "статус"
    action:
      type: send_status

Сервис проверяет источник сообщения (по ID ноды Meshtastic), ищет совпадение по тексту и выполняет соответствующее действие. 

Заключение

При таком мобильном интернете, как сейчас, приходится искать резервные каналы связи. Один из вариантов — mesh-сеть Meshtastic, которую можно использовать не только для общения.

Если на объекте стоит ПЛК на Linux (например, Wiren Board), то предложенный проект решает эту задачу.

Такой подход не заменяет основной канал связи, но как резерв для простых команд и получения статуса он работает.