{
  "schema": 1,
  "updated": "2026-10-14T19:36:57Z",
  "channels": {
    "stable": [
      {
        "file": "MR-02m_1.0.12.19.fw",
        "version": "1.0.12.19",
        "kind": "app",
        "signatures": [],
        "device": "MR-02m",
        "size": 149600,
        "sha256": "c7224d5f70a9809d0388bc20f4e5b0203e326c773dfe8bbc541b321b744ec689",
        "released": "2026-10-09",
        "notes": "Опрос событий больше не теряет ответы и подтверждения; регистр 118 гасит всю индикацию.",
        "changelog": {
          "summary": "Опрос событий больше не теряет ответы и подтверждения; регистр 118 гасит всю индикацию.",
          "features": [
            "Holding, Input, Coil и Discrete 118: 0 — индикация включена (заводское значение, старая память настроек читается так же), 1 — погашены все светодиоды лицевой панели: синий и красный статус, каналы, бегущая строка и показ адреса кнопкой. Значение хранится в EEPROM. Запись больше 1 — исключение 3"
          ],
          "bugfixes": [
            "Опрос событий больше не остаётся без ответа, когда окно арбитража совпадает с собственной передачей модуля. На модуле 4TO6DI это давало около 2% молчаливых опросов",
            "Подтверждение партии после переполнения очереди снимает только уже отправленные события и не удаляет те, что ещё не уходили в линию",
            "Если отправленная партия целиком вытеснена из очереди до прихода подтверждения, флаг всё равно переключается. Повтор того же подтверждения больше не стирает следующую, ещё не доставленную партию",
            "4TO6DI: устранены провалы яркости симисторов выше уставки и ложное определение типа модуля как 12AI"
          ]
        }
      },
      {
        "file": "MR-02m_bootloader_0.0.0.32.fw",
        "version": "0.0.0.32",
        "kind": "bootloader",
        "signatures": [],
        "device": "MR-02m",
        "size": 34848,
        "sha256": "179eaaa785afc7c72b3752d745c1f3013f70630779929e06dec701854f30a663",
        "released": "",
        "notes": "from MR-02m_bootloader_0.0.0.32.fw"
      },
      {
        "file": "MR-02m_full_1.0.12.19.bin",
        "version": "1.0.12.19",
        "kind": "full",
        "signatures": [],
        "device": "MR-02m",
        "size": 262144,
        "sha256": "e65f62716daaa136c89ff4b3a78673fd6cd3c3e388393542b558acbb8ed5e9a6",
        "released": "2026-10-09",
        "notes": "Опрос событий больше не теряет ответы и подтверждения; регистр 118 гасит всю индикацию.",
        "changelog": {
          "summary": "Опрос событий больше не теряет ответы и подтверждения; регистр 118 гасит всю индикацию.",
          "features": [
            "Holding, Input, Coil и Discrete 118: 0 — индикация включена (заводское значение, старая память настроек читается так же), 1 — погашены все светодиоды лицевой панели: синий и красный статус, каналы, бегущая строка и показ адреса кнопкой. Значение хранится в EEPROM. Запись больше 1 — исключение 3"
          ],
          "bugfixes": [
            "Опрос событий больше не остаётся без ответа, когда окно арбитража совпадает с собственной передачей модуля. На модуле 4TO6DI это давало около 2% молчаливых опросов",
            "Подтверждение партии после переполнения очереди снимает только уже отправленные события и не удаляет те, что ещё не уходили в линию",
            "Если отправленная партия целиком вытеснена из очереди до прихода подтверждения, флаг всё равно переключается. Повтор того же подтверждения больше не стирает следующую, ещё не доставленную партию",
            "4TO6DI: устранены провалы яркости симисторов выше уставки и ложное определение типа модуля как 12AI"
          ]
        }
      },
      {
        "file": "PI-02m_5xRS-485_2.0.1.4.fw",
        "version": "2.0.1.4",
        "kind": "app",
        "signatures": [],
        "device": "PI-02m",
        "size": 239336,
        "sha256": "8872c6a5ac9f2a22be30d4b18652138d81c232f2e390c91d533447f841d02694",
        "released": "2026-10-14",
        "notes": "COM5 в режиме Modbus Slave: виртуальные адреса списка опроса, прошивка модулей и самого шлюза флешером через COM5, бутлоадер 1.0.0.5",
        "changelog": {
          "summary": "COM5 в режиме Modbus Slave: виртуальные адреса списка опроса, прошивка модулей и самого шлюза флешером через COM5, бутлоадер 1.0.0.5",
          "features": [
            "Порт 5 в режиме Modbus Slave работает как MGate: номер строки списка опроса — адрес на COM5, кадр пересылается на реальную линию 1..4 и адрес устройства, ответ возвращается с виртуальным адресом; любая функция и диапазон регистров",
            "Опрос по COM5 и Modbus TCP по тем же линиям не мешают друг другу: кадр с COM5 идёт в начало очереди линии, один слот зарезервирован под него",
            "Прошивка МР-02м/СЭ-02м за шлюзом обычным флешером с COM5 по виртуальному адресу (после записи HR 129 кадры к 247 следуют на ту же линию)",
            "Прошивка самого шлюза окном регистров флешера (0x1001/0x1000/0x2000/1004/0x1006) на COM5 в режиме Slave и на Modbus TCP :9999 без входа в recovery",
            "Веб-интерфейс: в режиме Slave TCP-порт и число соединений COM5 скрыты; панели сводки — ссылки"
          ],
          "bugfixes": [
            "Порт 9999: RTU-кадры, похожие на MBAP-заголовок, и неизвестные функции больше не закрывают сессию; по-серийный запрос более 120 регистров отвечает исключением 03",
            "Бутлоадер 1.0.0.5: holding 128 принимает адрес 248, как приложение",
            "Резерв SRAM увеличен с 312 Б до 4 КБ (буфер TX линий 5×1000 → 5×260)",
            "TCP 506 в режиме Slave не слушается; фоновый опрос кэша в этом режиме выключен"
          ]
        }
      },
      {
        "file": "PI-02m_5xRS-485_bootloader_1.0.0.5.fw",
        "version": "1.0.0.5",
        "kind": "bootloader",
        "signatures": [],
        "device": "PI-02m",
        "size": 32768,
        "sha256": "6e5a73d79fb5e4e4824c9654d14d54518ea3b4f2133af14c94095d7e084b62c5",
        "released": "2026-10-14",
        "notes": "Бутлоадер шлюза PI-02m 1.0.0.5 (слот B, 32 КиБ): holding 128 принимает адрес 1..248",
        "changelog": {
          "summary": "Бутлоадер шлюза PI-02m 1.0.0.5 (слот B, 32 КиБ): holding 128 принимает адрес 1..248",
          "features": [],
          "bugfixes": [
            "Запись holding 128 = 248 в recovery принимается (раньше exception 03); адрес самого recovery остаётся 247"
          ]
        }
      },
      {
        "file": "PI-02m_5xRS-485_full_2.0.1.4.bin",
        "version": "2.0.1.4",
        "kind": "full",
        "signatures": [],
        "device": "PI-02m",
        "size": 524288,
        "sha256": "f127ea129cd5276c4252a442df10a78f1e96daa1655249fc42d77b4b2ca7aedd",
        "released": "2026-10-14",
        "notes": "COM5 в режиме Modbus Slave: виртуальные адреса списка опроса, прошивка модулей и самого шлюза флешером через COM5, бутлоадер 1.0.0.5",
        "changelog": {
          "summary": "COM5 в режиме Modbus Slave: виртуальные адреса списка опроса, прошивка модулей и самого шлюза флешером через COM5, бутлоадер 1.0.0.5",
          "features": [
            "Порт 5 в режиме Modbus Slave работает как MGate: номер строки списка опроса — адрес на COM5, кадр пересылается на реальную линию 1..4 и адрес устройства, ответ возвращается с виртуальным адресом; любая функция и диапазон регистров",
            "Опрос по COM5 и Modbus TCP по тем же линиям не мешают друг другу: кадр с COM5 идёт в начало очереди линии, один слот зарезервирован под него",
            "Прошивка МР-02м/СЭ-02м за шлюзом обычным флешером с COM5 по виртуальному адресу (после записи HR 129 кадры к 247 следуют на ту же линию)",
            "Прошивка самого шлюза окном регистров флешера (0x1001/0x1000/0x2000/1004/0x1006) на COM5 в режиме Slave и на Modbus TCP :9999 без входа в recovery",
            "Веб-интерфейс: в режиме Slave TCP-порт и число соединений COM5 скрыты; панели сводки — ссылки"
          ],
          "bugfixes": [
            "Порт 9999: RTU-кадры, похожие на MBAP-заголовок, и неизвестные функции больше не закрывают сессию; по-серийный запрос более 120 регистров отвечает исключением 03",
            "Бутлоадер 1.0.0.5: holding 128 принимает адрес 248, как приложение",
            "Резерв SRAM увеличен с 312 Б до 4 КБ (буфер TX линий 5×1000 → 5×260)",
            "TCP 506 в режиме Slave не слушается; фоновый опрос кэша в этом режиме выключен"
          ]
        }
      },
      {
        "file": "RTU-Sensor_1.0.2.5.fw",
        "version": "1.0.2.5",
        "kind": "app",
        "signatures": [],
        "device": "RTU-Sensor",
        "size": 169526,
        "sha256": "6bed47338eb84123fa2cac67315d1214b838f6bce273e66b434bb5f50dafff02",
        "released": "2026-10-14",
        "notes": "Карта регистров, единицы и форматы Modbus/BACnet не менялись. Выпуск переводит ядро Modbus/Fast Modbus и загрузчик (0.0.0.34 в полном образе) на текущую версию семейства: исправлены доставка событий Fast Modbus после переполнения очереди, исполнение «хвоста» слишком длинного кадра и залипание признака входа в загрузчик",
        "changelog": {
          "summary": "Карта регистров, единицы и форматы Modbus/BACnet не менялись. Выпуск переводит ядро Modbus/Fast Modbus и загрузчик (0.0.0.34 в полном образе) на текущую версию семейства: исправлены доставка событий Fast Modbus после переполнения очереди, исполнение «хвоста» слишком длинного кадра и залипание признака входа в загрузчик",
          "features": [
            "Слишком длинный кадр Modbus (длиннее 259 байт) больше не исполняет свой «хвост» как отдельную команду: после переполнения приёмного буфера остаток кадра отбрасывается до паузы на линии. Кадры до 259 байт включительно обрабатываются как прежде",
            "Ответ на опрос событий Fast Modbus собирается в статическом буфере, а не на стеке прерывания: около 800 байт сняты со стека обработчика прерывания",
            "Полный образ RTU-Sensor_full_1.0.2.5.fw содержит загрузчик 0.0.0.34. Обновление приложения по шине загрузчик не меняет; для обновления загрузчика в поле выложен отдельный пакет RTU-Sensor_bootloader_0.0.0.34.fw",
            "Проверено на стенде 14.10.2026 на общей шине с пятью MR-02m: три прошивки по шине (через загрузчики 0.0.0.30 и 0.0.0.34, в том числе вход в загрузчик по регистру 129 уже с новой прошивки), обновление загрузчика до 0.0.0.34; штатная доставка события Fast Modbus по регистру 1 с переключением флага подтверждения; проверка допустимых значений порогов 340..343. Серийный номер и настройки прибора сохранены. Сценарии из списка исправлений (переполнение очереди событий, вытеснение отправленной партии, арбитраж), потолок 16 событий/с при «шторме» датчика и отбрасывание слишком длинного кадра на RTU-Sensor отдельно не проверялись — исправления пришли из общего ядра семейства с его собственными тестами"
          ],
          "bugfixes": [
            "События Fast Modbus: подтверждение после переполнения очереди (32 события) снимает только реально отправленные события; совпавшее подтверждение всегда переключает флаг, если партия событий в пути — повтор подтверждения мастера больше не удаляет потерянную на линии партию",
            "Арбитраж Fast Modbus: модуль больше не засчитывает собственный ещё уходящий байт 0xFF за проигрыш — меньше молчаливых пропусков опроса событий",
            "Вход в загрузчик (регистр 129) и перезагрузка (регистр 120): если подтверждение записи не ушло в линию, признак входа в загрузчик снимается; раньше следующий сброс по любой причине уводил прибор в загрузчик примерно на 120 секунд"
          ]
        }
      },
      {
        "file": "RTU-Sensor_bootloader_0.0.0.34.fw",
        "version": "0.0.0.34",
        "kind": "bootloader",
        "signatures": [],
        "device": "RTU-Sensor",
        "size": 34848,
        "sha256": "50ab6fefb8d6727ba41f406d1da910e2d51a1239c6d705fce5e60fb7eb84b9fa",
        "released": "2026-10-14",
        "notes": "Загрузчик RTU-Sensor 0.0.0.34: семейное обновление, для RTU-Sensor поведение по шине прежнее — адрес 247, форматы регистров и порядок обновления не менялись",
        "changelog": {
          "summary": "Загрузчик RTU-Sensor 0.0.0.34: семейное обновление, для RTU-Sensor поведение по шине прежнее — адрес 247, форматы регистров и порядок обновления не менялись",
          "features": [
            "В семействе загрузчики 0.0.0.33/0.0.0.34 научились обслуживать второй порт RS-485 (для СЭ-02м-3 и RGBW). В сборке для RTU-Sensor этот код исключён: выводы PA9/PA10 на плате заняты радаром LD2412, и загрузчик их не трогает. Бит 13 диагностического регистра 0xF3 («второй порт открыт») на RTU-Sensor всегда 0",
            "Приёмник основного порта переписан на постоянный буфер; протокол обновления по шине не изменился",
            "Обновление проверено на стенде 14.10.2026: штатное обновление по шине (bl_fleet.py update) с 0.0.0.30 — 143 блока и фиксация за 36 секунд, приложение вернулось само, серийный номер сохранён; затем прошивка приложения 1.0.2.5 через новый загрузчик прошла полностью"
          ]
        }
      },
      {
        "file": "RTU-Sensor_full_1.0.2.5.fw",
        "version": "1.0.2.5",
        "kind": "full",
        "signatures": [],
        "device": "RTU-Sensor",
        "size": 171494,
        "sha256": "6a10706fc0e979685b4abd9a56fa137582598a7c49175f5bccd8001c53a019e8",
        "released": "2026-10-14",
        "notes": "Карта регистров, единицы и форматы Modbus/BACnet не менялись. Выпуск переводит ядро Modbus/Fast Modbus и загрузчик (0.0.0.34 в полном образе) на текущую версию семейства: исправлены доставка событий Fast Modbus после переполнения очереди, исполнение «хвоста» слишком длинного кадра и залипание признака входа в загрузчик",
        "changelog": {
          "summary": "Карта регистров, единицы и форматы Modbus/BACnet не менялись. Выпуск переводит ядро Modbus/Fast Modbus и загрузчик (0.0.0.34 в полном образе) на текущую версию семейства: исправлены доставка событий Fast Modbus после переполнения очереди, исполнение «хвоста» слишком длинного кадра и залипание признака входа в загрузчик",
          "features": [
            "Слишком длинный кадр Modbus (длиннее 259 байт) больше не исполняет свой «хвост» как отдельную команду: после переполнения приёмного буфера остаток кадра отбрасывается до паузы на линии. Кадры до 259 байт включительно обрабатываются как прежде",
            "Ответ на опрос событий Fast Modbus собирается в статическом буфере, а не на стеке прерывания: около 800 байт сняты со стека обработчика прерывания",
            "Полный образ RTU-Sensor_full_1.0.2.5.fw содержит загрузчик 0.0.0.34. Обновление приложения по шине загрузчик не меняет; для обновления загрузчика в поле выложен отдельный пакет RTU-Sensor_bootloader_0.0.0.34.fw",
            "Проверено на стенде 14.10.2026 на общей шине с пятью MR-02m: три прошивки по шине (через загрузчики 0.0.0.30 и 0.0.0.34, в том числе вход в загрузчик по регистру 129 уже с новой прошивки), обновление загрузчика до 0.0.0.34; штатная доставка события Fast Modbus по регистру 1 с переключением флага подтверждения; проверка допустимых значений порогов 340..343. Серийный номер и настройки прибора сохранены. Сценарии из списка исправлений (переполнение очереди событий, вытеснение отправленной партии, арбитраж), потолок 16 событий/с при «шторме» датчика и отбрасывание слишком длинного кадра на RTU-Sensor отдельно не проверялись — исправления пришли из общего ядра семейства с его собственными тестами"
          ],
          "bugfixes": [
            "События Fast Modbus: подтверждение после переполнения очереди (32 события) снимает только реально отправленные события; совпавшее подтверждение всегда переключает флаг, если партия событий в пути — повтор подтверждения мастера больше не удаляет потерянную на линии партию",
            "Арбитраж Fast Modbus: модуль больше не засчитывает собственный ещё уходящий байт 0xFF за проигрыш — меньше молчаливых пропусков опроса событий",
            "Вход в загрузчик (регистр 129) и перезагрузка (регистр 120): если подтверждение записи не ушло в линию, признак входа в загрузчик снимается; раньше следующий сброс по любой причине уводил прибор в загрузчик примерно на 120 секунд"
          ]
        }
      },
      {
        "file": "ce-02m-3_1.0.7.12.fw",
        "version": "1.0.7.12",
        "kind": "app",
        "signatures": [],
        "device": "CE-02m-3",
        "size": 78752,
        "sha256": "094fe42b5954c8e4b01b421e590570196dadd6bede750c370e17f34988e2eb1d",
        "released": "",
        "notes": "from ce-02m-3_1.0.7.12.fw"
      },
      {
        "file": "ce-02m-3_bootloader_0.0.0.34.fw",
        "version": "0.0.0.34",
        "kind": "bootloader",
        "signatures": [],
        "device": "CE-02m-3",
        "size": 34848,
        "sha256": "4f8f787ab7c641d6b542f1e5c7bc87b07b2c09a655ca7ed7de47991dee902a19",
        "released": "",
        "notes": "from ce-02m-3_bootloader_0.0.0.34.fw"
      },
      {
        "file": "ce-02m-3_full_1.0.7.12.bin",
        "version": "1.0.7.12",
        "kind": "full",
        "signatures": [],
        "device": "CE-02m-3",
        "size": 262144,
        "sha256": "727ee974b5fa883b57024899ca4352ab64e784f070bf2e5923c833eb4788dd7e",
        "released": "",
        "notes": "from ce-02m-3_full_1.0.7.12.bin"
      }
    ]
  }
}
