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

推荐订阅源

G
Google Developers Blog
Spread Privacy
Spread Privacy
V
Visual Studio Blog
爱范儿
爱范儿
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
B
Blog RSS Feed
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
The Register - Security
The Register - Security
Latest news
Latest news
The Cloudflare Blog
Project Zero
Project Zero
月光博客
月光博客
U
Unit 42
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
F
Full Disclosure
Schneier on Security
Schneier on Security
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
博客园 - 叶小钗
腾讯CDC
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - Franky
S
Security Affairs
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
SecWiki News
SecWiki News
Recorded Future
Recorded Future
NISL@THU
NISL@THU
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Обновление MQTT Control RS: встроенный broker + Lua script node с песочницей
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 (как помним, возможно потребуется особый доступ к интернету), либо, взять напрямую с гита.

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

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