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

推荐订阅源

Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
D
Docker
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
月光博客
月光博客
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
MyScale Blog
MyScale Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 за минуты Опыт разработчика как экономика внимания
Обновление MQTT Control RS: встроенный broker + Lua scrip...
Ksiw · 2026-04-25 · via Все публикации подряд на Хабре

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

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

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

Обзор

Приветствую, Хабр!

Несколько недель назад свет увидел MQTT control rs – инструмент для визуального создания логики автоматизации поверх MQTT.

Рад сообщить, что в новой версии 0.3 наконец реализованы значительные улучшения. Для собственного удобства, а также с целью упрощения жизни пользователей, добавил полнофункциональный встроенный брокер, а для расширения функционала была встроена поддержка Lua-скриптов, что значительно расширило потенциал кастомной логики.

В прошлый раз в комментариях собственно и прозвучал вопрос о возможности для написания скриптов. Не сказать, что не думал об этом до того, но ранее встроенный скриптинг казался мне дырой безопасности, но беседа позволила взглянуть иначе.
Выгода понятна: скрипт элегантно закрывает то, что визуальным программированием делать избыточно громоздко. А часто и неоправданно сложно.

Поглядим же подробнее!

Встроенный MQTT-брокер – для удобства и упрощения работы

UI брокера

UI брокера

Старт с отдельным Mosquitto, лично мне, не сказать что слишком удобен. Нет, я люблю cli, но это время. Для быстрого запуска, отладки и тестов не очень то сподручно поднимать отдельный брокер. Чтобы упростить этот процесс для себя и для вас, я интегрировал MQTT брокер NanoMQ (лицензия MIT), ныне доступный на вкладке LocalBro. Теперь он поставляется вместе с программой.

Здесь:

  • Мгновенный старт: Запустите программу, добавьте пользователя и активируйте брокер одной кнопкой. Тут же настройки работы. Никакой дополнительной установки, конфигурации или управления внешними сервисами.

  • Упрощенное обучение: Новички в MQTT могут начать экспериментировать с протоколом, не отвлекаясь на сложности развертывания брокера.

  • Добавляйте, влючайте/отключайте и удаляйте пользователей с упрощенной настройкой прав(чтение/публикация). Тут же добавлена защита от непроизвольной правки - для изменения нужно щелкнуть на значок замка в начале строки, и тогда строка разблокируется. Защита от неловких рук.

  • Можно настроить мост ко внешнему брокеру, мягко интегрировав в действующую инфраструктуру.

Lua-скрипты: Новая мощь

Редактор Lua

Редактор Lua

Почему Lua? Lua — это легковесный, высокопроизводительный и широко используемый скриптовый язык, особенно популярный во встраиваемых системах, играх и автоматизации. Он довольно прост и хорошо знаком многим разработчикам, что снижает порог входа для создания логики.

Lua-скрипты выполняются внутри специальной ноды автопилота, что позволяет создавать реактивную логику: скрипт запускается при поступлении нового сообщения на вход узла или при активации по триггеру. Добавьте ноду Lua script на поле автопилота и сделайте на ней двойной щелчок(или выделите и нажмите соответствующую кнопку в инспекторе справа). Там же, в инспекторе, можно настроить входы и выходы ноды, чтобы обратиться к ним из кода.

Доступный API для Lua-скриптов

Для обеспечения безопасности и предсказуемости выполнения, скрипты запускаются в “песочнице” и имеют доступ к ограниченному, но мощному API в виде глобальных переменных и функций:

  • inputs (таблица): Глобальная таблица, содержащая значения, поданные на входные порты узла. Доступ к значениям осуществляется по имени порта, например: inputs.in1, inputs.in2 и т.д.

  • mem (таблица): Глобальная таблица, предназначенная для хранения состояния узла между выполнениями. Вы можете читать и записывать в нее данные, которые сохранятся до следующего вызова скрипта.

  • emit(port_name, value) (функция): Глобальная функция, которая отправляет данные value на указанный выходной порт узла port_name. В качестве value может выступать число, строка, булево значение.

  • log(text) (функция): Глобальная функция, которая выводит текстовое сообщение text во внутренний лог mqtt-control-rs для отладки.

Для обеспечения стабильности и безопасности, доступ к файловой системе, сети и другим системным ресурсам из скриптов Lua ограничен. Недоступны стандартные библиотеки Lua, такие как os, io, package и debug. Тем не менее, это первая функциональная версия API и вполне возможно расширение. Но не будем забегать вперед паровоза.

-- Инициализация состояния в таблице 'mem', если оно отсутствует.
-- Эти значения сохраняются между запусками скрипта.
if mem.threshold == nil then
    mem.threshold = 20.0 -- Порог температуры
end
if mem.heater_on == nil then
     mem.heater_on = false -- Текущее состояние нагревателя
end

-- Обрабатываем значение, пришедшее на первый входной порт "in1".
local current_temp = tonumber(inputs.in1)

if current_temp ~= nil then
    -- Логируем текущую ситуацию для отладки
    log("Получена температура: " .. current_temp .. "°C. Порог: " .. mem.threshold .. "°C.")

    -- Логика управления нагревателем
    if current_temp < mem.threshold and not mem.heater_on then
        -- Температура ниже порога, и нагреватель выключен - включаем его
        log("Температура ниже порога. Включаю нагреватель.")
        mem.heater_on = true -- Обновляем состояние в 'mem'
        emit("heater_command", "ON") -- Отправляем команду на выходной порт
    elseif current_temp >= mem.threshold and mem.heater_on then
        -- Температура достигла или превысила порог, и нагреватель включен - выключаем его
        log("Температура нормализовалась. Выключаю нагреватель.")
        mem.heater_on = false -- Обновляем состояние в 'mem'
        emit("heater_command", "OFF") -- Отправляем команду на выходной порт
    end
else
    log("Ошибка: значение на входе 'in1' не является числом или пусто.")
end

Скрипт демонстрирует, как можно использовать глобальную таблицу inputs для получения данных, mem для поддержания внутреннего состояния, log для отладки и emit для отправки управляющих сигналов. Можете попробовать его в песочнице(справа от поля ввода кода в редакторе).

Приглашаю к тестированию и обратной связи!

Уверен, что встроенный MQTT-брокер и расширенные возможности скриптов на Lua значительно упростят вашу работу с IoT-проектами и позволят создавать еще более гибкие и мощные решения.

Скачивайте последнюю версию, пробуйте новые функции и делитесь своими впечатлениями и предложениями. Ваша обратная связь помогает мне делать MQTT Control RS лучше.

Последующая разработка пока что будет сосредоточена на доработке справки, и патчей найденных недоработок. Новые фичи это весело, но качество в приоритете.

Ссылки:

📥 Скачать с сайта MQTT Control RS (как помним, возможно потребуется особый доступ к интернету), либо, взять напрямую с гита.

Присоединяйтесь в телеграм.

Прошлая статья