В декабре 2024 года я сел за написание дипломного проекта. Хотелось сделать не просто формальность для зачёта, а что-то реально рабочее, полезное и интересное. Так родилась идея RuFA Станции — по сути, «говорящей банки» с пинами, через которую можно было управлять внешними устройствами. Представьте себе что-то вроде умной колонки, которой можно сказать: «RuFA, подай 5V на пин 13», — и она выполнит.

Я поделился этой задумкой с одним знакомым, хорошо разбирающимся в схемотехнике. Мы встретились в кофейне, я начал описывать идею, а он выдал фразу, которая определила дальнейший путь:

«Слушай, ну это... идея так себе. Ты можешь лучше».

Это немного сбило с настроя, но и дало толчок. Прямо там за кофе мы начали крутить новую концепцию: а что если сделать не просто коробку с пинами, а систему маршрутизации пакетов между микроконтроллерами? Что-то вроде роутера, но не для интернета, а для логики и взаимодействия между устройствами.

А потом стало понятно, что это уже не просто диплом

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

На четвёртом месяце я решил проверить всё в «полевых условиях» — и написал плагин для Minecraft-сервера.

Minecraft + Telegram = первые тесты

Плагин ловил событие входа игрока на сервер и отправлял пакет в RuFA Hub. Пример:

{

  "api": "f7643450b89d5ef7867b1a92144cab58",

  "module": "TG_Bot",

  "data": {

    "name": "Steve",

    "pos": "X:123 Y:64 Z:321"

  }

}

RuFA Hub получал пакет, определял нужный модуль (TG_Bot.py) и передавал данные в него. Модуль запускал Telegram-бота, который отправлял мне сообщение:

? Игрок Steve зашёл на сервер на координатах X:123 Y:64 Z:321.

Именно в этот момент я понял — это уже не просто проект для диплома, а универсальный центр взаимодействия между чем угодно: микроконтроллерами, внешними программами, скриптами, оборудованием, софтом.

Немного контекста: почему я вообще за это взялся?

В 2024 году я участвовал в чемпионате по профессиональному мастерству в компетенции Интернет вещей. Для работы с оборудованием нам выдали закрытое ПО под названием ControlCenter — оно просто принимало пакеты и передавало их дальше в жёстко заданном формате. Никакой гибкости, минимум логики, всё работало «на костылях».

Говорили, что его дорабатывали год. Я посмотрел на это и подумал: «Почему бы не сделать нормальное решение, с открытым кодом, удобное, модульное, гибкое и не привязанное к конкретному оборудованию?»
Так и началась работа над RuFA Hub.

Как RuFA Hub почти стал ООО (и чуть не угробил меня за сутки)

Когда RuFA Hub уже почти вышел из стадии «бумажного концепта» и превратился во что-то живое, я случайно встретил знакомого, который на тот момент учился в УГНТУ в Уфе. За вечерним разговором я вскользь упомянул, что сейчас пилю интересный проект. Он заинтересовался, а потом говорит:

«А ты знал, что послезавтра у нас в “Точке кипения” будет презентация стартапов перед Газпромом? Можешь выступить, я тебя запишу».

Я, особо не думая, согласился. И только по дороге домой понял... Презентация — через сутки, а мой софт едва дышит, модулей почти нет, интерфейс пустой. Короче, ад и дичь.

Это были самые тяжёлые сутки в моей жизни. Я не ел, не спал — просто писал код. Параллельно мой одногруппник-инженер собирал «умную лампу» из ESP32, сантехнической трубы и светодиодной ленты. Я писал под неё прошивку, готовил демо, натягивал хоть какой-то интерфейс.

С колледжа мне разрешили взять ноутбук, роутер Keenetic и Raspberry Pi 4, на котором и крутился тот самый сырой RuFA Hub. Мы буквально собрали экспозицию на коленке.

Презентация получилась... странной. Это было моё первое публичное выступление в жизни, и тут сразу Газпромовцы, камеры, люди в костюмах. Было кринжово, неловко, но я рассказал, как мог.

И неожиданно — сработало. На следующий день мне написал один из участников, попросил рассказать о RuFA Hub подробнее. С тех пор я подал проект на грант «Студенческий стартап» и теперь вместе с небольшой командой развиваю RuFA Hub в сторону сетевых и универсальных решений для взаимодействия оборудования.

Как всё устроено внутри

В текущем виде RuFA Hub — это сервер на Python, работающий через Flask и WebSocket. Он принимает входящие пакеты, разбирает их и перенаправляет в нужный модуль. Основная идея: разделить логику, маршрутизацию и действия, чтобы они не мешали друг другу.

Устройства и внешние источники (например, плагины, скрипты, контроллеры) отправляют пакеты в формате JSON. У каждого пакета есть поле module, которое указывает, куда именно его нужно направить.
Модули — это просто Python-скрипты, которые реализуют обработку этих данных. Всё максимально прозрачно.

В RuFA Hub нет жёсткой привязки: один модуль может быть как одним .py-файлом, так и полноценной директорией со своей структурой:

  • main.py — точка входа

  • config.json или .env — конфигурация

  • зависимости, вспомогательные утилиты — по необходимости

Если задача простая — достаточно и одного файла. Я постарался сделать так, чтобы модуль мог собрать даже новичок, знающий только базовые конструкции Python.

Дополнительно я сделал поддержку устройств на базе ESP (я называю их RuFA Connect) — они подключаются по Wi-Fi, могут управляться удалённо (вплоть до выключения питания), и даже прошиваться по сети. Всё это работает через внутренний API.

Архитектура довольно лёгкая: весь RuFA Hub весит около 89 МБ, включая веб-интерфейс, ядро, и всё необходимое для запуска. Я изначально ориентировался на то, чтобы он запускался хоть на Raspberry Pi, хоть на сервере с Xeon — и в этом плане всё получилось.

Что дальше?

Сейчас RuFA Hub находится в стадии альфы. Некоторые функции работают нестабильно или не реализованы вовсе. Периодически переписываю ядро с нуля — но так и должно быть в начале.

Мне 17 лет, я — единственный разработчик проекта. Это отражается на скорости, но даёт полное понимание происходящего. Каждая строчка кода написана с мыслью «а удобно ли это будет другим?».

Пока проект не претендует на продакшен-уровень, но я выкладываю исходники, веду разработку открыто и рад фидбеку от сообщества.

Финалочка

Впереди ещё куча задач, но я точно знаю, куда иду. И мне нравится этот путь.

Комментарии (23)


  1. Indemsys
    17.06.2025 21:15

    Рецензия от ChatGPT

    Коротко о главных противоречиях в тексте

    • Команда ↔ одиночка. Автор говорит, что «развиваю RuFA Hub вместе с небольшой командой» — и почти сразу заявляет: «я — единственный разработчик проекта».

    • Зрелый продукт ↔ сырой альфа. Сначала RuFA Hub описан как уже «универсальный центр взаимодействия», но спустя несколько абзацев называется «стадией альфы, которую автор регулярно переписывает».

    • От «говорящей банки» к всеядной шине. Проект стартовал как простая колонка, подающая питание на пины, а мгновенно стал маршрутизатором «между чем угодно», без чёткого объяснения перехода.


    А так вообще не понял что это и даже GPT не сильно помог. Скорее всего плохая копипаста с DeepSeek


    1. Forud
      17.06.2025 21:15

      Спасибо за обратную связь. Да у нас действительно есть небольшая команда где у каждого своя роль, так вышло что роль программиста есть только у автора статьи. Насчёт последнего пункта вы правы. Переход в статье не оптсан, это связано с тем что колонка осталась пока на бумаге, для её создания мне (схемотехника в команде) не хватает опыта и средств, а то что описано в статье можно реализовать на готовых и бюджетных решениях, по этому это направление было выбрано как основное, а колонка отправилась в ящик будущих идей. Я рад что Demorien горит идеей и находится в постоянной работе над ошибками и улучшениями, и я очень рад что наш проект не безразличен энтузиастам. На данный момент ведётся работа над созданием видео с популярным объяснением нашего проекта, в связи с этим так же разрабатывается демонстрационный стенд. Ещё раз спасибо за почву для размышлений


  1. Biul
    17.06.2025 21:15

    а почему не показал «умную лампу»?


    1. pnmv
      17.06.2025 21:15

      и ссылки нет на опенсурс.


      1. Demorien Автор
        17.06.2025 21:15

        Спасибо за замечание. Ссылка на открытый репозиторий: GitHub репозиторий

        Буду признателен за обратную связь.


    1. Forud
      17.06.2025 21:15

      На данный момент эта ветка проекта ушла на второй план из за сложности реализации, стоимости, и отсутвии программной базы. Мы решили сначало разработать всю систему, а уже потом внедрить в неё "Умную лампу".


  1. nikolz
    17.06.2025 21:15

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

    1) Судя по описанной реализации данный роутер работает медленно, так как использует скриптовые языки. Я прав?

    2) В любой сети есть адреса источника и приемника. Можете объяснить, чем Ваше решение лучше концентратора беспроводной mesh или роутера проводной сети на основе протокола TCP/IP ?


    1. Demorien Автор
      17.06.2025 21:15

      Спасибо за интерес к проекту! Постараюсь по порядку:

      1. Вообще, я использовал Python, потому что это единственный язык, которым я действительно свободно владею и на котором могу быстро писать. Хотелось сделать работающий проект, а не застрять на изучении нового языка. Конечно, если бы выбирал с точки зрения производительности, то C++ подошёл бы лучше, но Python позволил быстро собрать всё воедино и запустить.

      2. Да, роутер и mesh — нормальное сравнение, но тут немного другая история. Это не сетевое оборудование, а скорее серверное ПО, которое получает данные от микроконтроллеров и направляет их в нужные модули на сервере. А дальше уже каждый модуль делает своё: логирование, уведомления, анализ, отправка в сторонние сервисы — что угодно.

      То есть, грубо говоря, это не про маршрутизацию сетевых пакетов, а про логическую маршрутизацию данных и событий внутри системы. Устройства скидывают данные, сервер разбирает, что куда, и рассылает по нужным обработчикам. Всё это можно кастомизировать под конкретные задачи, и архитектура легко расширяется.


      1. nikolz
        17.06.2025 21:15

        Т е модули у Вас - это приложения на ПК. Т е Вы написали на питоне программу, которая вызывает соответствующее пакету приложение. Верно?

        Что в этом нового? Разве любой сервер этого не делает, если реализует различные опции (приложения) для различных запросов?


  1. nikolz
    17.06.2025 21:15

    Архитектура довольно лёгкая: весь RuFA Hub весит около 89 МБ

    89 МБ для IOT это много. На каких микроконтроллерах Вы это предлагаете реализовать?


    1. Demorien Автор
      17.06.2025 21:15

      Спасибо за вопрос!

      Да, 89 МБ — это действительно много для микроконтроллеров, и я не планирую запускать сам RuFA Hub прямо на них. Это серверное ПО, которое работает на полноценном сервере или ПК, а не на микроконтроллерах.

      Микроконтроллеры — это просто устройства, которые отправляют данные в этот сервер. Сам RuFA Hub принимает эти данные, обрабатывает и распределяет по модулям уже на стороне сервера. Поэтому ограничения по памяти микроконтроллеров тут не влияют на работу Hub’а.

      Если нужна лёгкая версия прямо для микроконтроллера — это уже отдельная история, где придётся делать сильно урезанный функционал или писать совсем на низком уровне.


  1. granv1
    17.06.2025 21:15

    детский сад. на диплом, конечно потянет, но "Что-то вроде роутера, но не для интернета, а для логики и взаимодействия между устройствами." "роутер для логики" ёпрст. для взаимодействия есть куча уже готовых протоколов любой сложности. самый широко известный, легкий, надежный, промышленный - mqtt. Возможно надо для начала (как это и положено в дипломных работах) провести анализ и выбрать уже существующие технологии и оборудование? велосипедостроением можно и нужно заниматься, но в основном для собственного развития и дальнейшего осмысления почему в промышленности сделано так, а не иначе.
    Что же с лампой то? И почему на esp32, а не 8266 или другом mcu. какой функционал лампы и в чем ее "умность"? сразу виден "подход инженера" - из говна и палок, вместо того, чтобы взять готовое устройство и модифицировать его под свои нужны. Почему инженер сам не писал прошивку? он вообще как разрабатывал свое устройство?

    "сервер на Python" - сервер чего? какой протокол взаимодействия?
    "логику, маршрутизацию и действия, чтобы они не мешали друг другу. " да уж.. главное, мне кажется, чтобы логика вам в проекте не мешала, ее надо отдельно маршрутизировать в dev/null

    жесть, конечно. если такое будет работать в газпроме, то всё... кранты.


    1. Forud
      17.06.2025 21:15

      Спасибо за ваш комментарий. На данный момент мы уже поняли что объяснить что такое наш проект в полном спектре тяжело, с этой целью были написаны статьи в Дзен и Хабр, благодаря вашему клиенту мы поняли на что ещё нужно обращать внимание, на данный момент ведётся работа по созданию видео с популярным объяснением и демонстрацией работы проекта на тестовом стенде.


  1. nikolz
    17.06.2025 21:15

    история RuFA Hub

    систему маршрутизации пакетов между микроконтроллерами? Что-то вроде роутера, но не для интернета, а для логики и взаимодействия между устройствами.

    Основная идея: разделить логику, маршрутизацию и действия, чтобы они не мешали друг другу.

    1) Так что же Вы сделали, hub, роутер или маршрутизатор?

    2) Каким образом Вы устранили коллизию пакетов? Почему пакеты перестали мешать друг другу?


    1. Demorien Автор
      17.06.2025 21:15

      • Это скорее hub, но не в классическом сетевом смысле. Это серверное ПО, которое принимает данные с разных микроконтроллеров и направляет их в разные модули на сервере. Каждый модуль выполняет свои задачи — логирует, анализирует, отправляет уведомления и так далее. Главное — разделить логику, маршрутизацию и действия, чтобы они не мешали друг другу.

      • Коллизии пакетов здесь решаются на уровне протокола и логики приложения. Пакеты собираются в буфер в течение определённого времени (например, 2 секунды), проверяются на наличие специальных токенов или меток и только после этого передаются в обработку. Так данные не пересекаются и не мешают друг другу, потому что их обработка происходит по очереди и по заданным правилам.


  1. Perekhod_I
    17.06.2025 21:15

    Не вчитывайтесь в каждое слово душнил с хабра и продолжайте развивать свой проект)
    Для 17 лет это большое дело, если вы нашли для себя то, что вас вдохновляет и помогает двигаться дальше)
    Уверен, дальше вы столкнетесь с ещё большим рядом проблем, которые заставят вас пересматривать многое в вашем проекте, но именно так вы будете расти)

    Удачи вам и не теряйте искру)


    1. visuospatial
      17.06.2025 21:15

      я искал этот комментарий


    1. Demorien Автор
      17.06.2025 21:15

      Спасибо, очень приятно такое слышать!
      Для меня это действительно важно — не только сам проект, но и то, как я расту и учусь в процессе. Да, проблем будет много, и, наверное, ещё больше, но это часть пути. Буду стараться не сдаваться и двигаться дальше.


    1. Forud
      17.06.2025 21:15

      Спасибо, я тоже состою в команде этого проекта (у нас поделены роли, автор статьи пишет ПО, а остальные занимаются задачами) и мне приятно слышать что идея Demorien хорошая, сейчас ему не хватает поддержки


  1. faridont
    17.06.2025 21:15

    Красавчик мужик, для 17 лет довольно неплохо, удачи тебе в будущем


    1. Demorien Автор
      17.06.2025 21:15

      Спасибо большое!
      Очень приятно такое слышать — буду стараться не подвести. Удачи и вам тоже!


  1. NightBlade74
    17.06.2025 21:15

    Так и не понял, что это такое и зачем надо.

    универсальный центр взаимодействия между чем угодно

    Не "между чем угодно", а тем, что поддерживает определенный протокол. Т.е. это "что угодно" либо написано вами, либо поддерживает плагины, которые еще тоже надо написать, либо требуется какой-то прокси-преобразователь из протокола этого агента в протокол RuFA Hub. На выходе чуть попроще, там уже плагины предусмотрены, которые в принципе что угодно сделают. Просится нечто подобное и на входе, которое может не только JSON принимать, но и XML, protobuf, plain text, любые кастомные данные и т.д. А еще не только в пассивном режиме работать, но и в режиме опроса "чего угодно". Вот тогда будет универсально. А потом придет понимание, что неплохо бы написать несколько универсальных модулей, которые покрывают 90% кейсов взаимодействия и описывать data flow декларативно, через конфигурацию этих модулей, а не писать новый плагин на каждый чих.

    Вот тогда это превратится в реально универсальную шину для "чего угодно".

    Но это охрененно сложная задача даже для людей с опытом, а не только первокура.


  1. avost
    17.06.2025 21:15

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

    Совсем не понял почему хвост виляет собакой конечное устройство само решает кому ему маршрутизировать пакет. Если мой выключатель шлёт пакеты лампочке в туалете, а потом я решу выключать им свет в ванной, то придётся перепрограммировать либо выключатель либо две лампочки вместо того, чтобы перестроить маршрут в маршрутизаторе - я правильно понял? Какое это даёт преимущество?