СОДЕРЖАНИЕ Tools

Лабораторный блок питания RD6030

08.03.2026

Пытаюсь разобраться с подключением лабораторного блока питания RuiDeng RIDEN RD6030...

Достался мне интересный лабораторник. Начитался я о нём неплохих отзывов, но основное, что меня в нём заинтересовало - это наличие работы по Wi-Fi из коробки.

И вот наконец дошли до него руки. Я разобрал его, осмотрел и порадовался тому, как всё приятно выглядит внутри.

Ну, думаю, теперь главное. Давай мне свой Wi-Fi!

В меню пункт Wi‑Fi присутствовал. И после его включения иконка Wi-Fi загорелась. Но что бы я дальше ни делал — ничего интересного не происходило. Wi‑Fi так и не появлялся.

Я начал искать, что же может быть не так. Выяснилось, что какой-то внятной документации на этот, вроде бы популярный, лабораторник нет. Крупицы информации собираются по форумам и YouTube. Ну начнём.

Здесь автор для начала вставляет плату Wi-Fi в блок. Я открыл свой RD6030 и понял, что именно в этом месте платы у меня не оказалось. Начал вспоминать, как могло так оказаться? В карточке товара, кстати, тоже ничего про Wi-Fi нет. Но мне удалось вспомнить, что я уже расстраивался об этом на этапе заказа... Наверное, я ведь что-то сделал?

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

Ладно, нашёл плату и поставил её на место. Одновременно с этим обнаружил место для установки батарейки. До этого я ещё неслабо удивился - почему после перезагрузки RD6030 не сохранил установленное мною время?

Наверное, это из-за того, что батарейки в нём не было. Поставил туда CR1220.

Включил лабораторник. Что-то он написал про Wi-Fi и сервер, к которому хочет подключиться. Но сервер задать не дал. Да и настройки Wi-Fi менять тоже не предложил. Ничего не понятно.

Пошёл я досматривать ролик, который был выше. Да, меню при загрузке у меня оказалось такое же, как у автора ролика. А дальше он использовал какое-то приложение... Этого приложения не оказалось в Play Store. Его вообще нигде не оказалось на первый взгляд. Ссылка на него была пока только в описании ролика на YouTube.

И я уже было собрался что-то сделать, но потом до меня дошло, что мне никакой радости не будет от того, что у меня окажется это приложение. Мне же нужна была автоматизация, а не красивая картинка на телефоне. Тем более что человек в ролике ещё и показал, что если приложение не запущено на телефоне, то блок питания и включаться-то не очень хочет. Нет, я понимаю, что там есть кнопка "пропустить", но зачем мне всё время запускать это нелепое приложение на телефоне?

Пошёл искать: может как-то люди решили эту проблему? Ничего умнее, чем искать "RD6030 homeassistant" мне в голову не пришло. И да, такие страдальцы уже были. Я не первый.

Вот здесь https://github.com/wildekek/rdtech-esphome люди пытаются решить подобную проблему. Но проект какой-то битый. Файлов не хватает. Да и модель моего RD6030 в списке нет. А раз они там так навязчиво про соответствие модели намекают, то, видимо, это важно?

Ничего не понял. Пошёл дальше искать. На каком-то форуме нашёл ссылку на проект RuiDeng Riden RD60xx Remote Control via MQTT. О, хорошее название! Очень похоже на то, что мне нужно.

В разделе provision/ автор пишет о том, как именно осуществляется прописывание SSID и адреса промежуточного сервера. Честно говоря, это стоит прочитать. Сначала я читал на английском. Подумал, что я отупел совсем, потому что ничего не понимаю. Перевёл на русский. Стало понятнее, но абсурдность ситуации всё равно зашкаливала...

В общем, вот краткая выдержка о том, что такое протокол "ESP-Touch".

В этих блоках используется Wi-Fi модуль Ai Thinker ESP‑12F, который основан на чипе Espressif ESP8266. Для первоначальной настройки Wi-Fi применяется протокол ESP‑Touch. Как происходит подключение Когда устройство ещё не подключено к Wi-Fi, оно может только слушать Wi-Fi пакеты, но не может их расшифровать. Однако оно видит длину пакетов. Протокол ESP-Touch передаёт данные (SSID, пароль и т.д.) через длины UDP-пакетов. Мобильное приложение отправляет много пакетов разной длины, кодируя информацию. Модуль анализирует длины пакетов и восстанавливает данные сети. Это фактически побочный канал передачи (side-channel) — данные "утекают" через характеристики зашифрованного трафика.

Вот так я узнал о существовании нового для меня протокола передачи данных.

Теперь выяснилось, что provision из RidenRD60xxMQTT написан на python v3.8. А у меня только v3.5. Пришлось обновлять RPi со stretch для buster. Заняло это какое-то неимоверное количество времени.

Теперь нужно подключить RPi к Wi-Fi, чтобы оно хотя бы понимало куда посылать свои волшебные пакеты протокола ESP‑Touch. Пришлось ставить в систему wsa_supplicant. Но это было решаемо.

И вот оно! Момент истины!

# python3 provision.py "MY_WIFI_NET" 12345678 172.16.24.114 --adapter_ip 10.25.235.58

И оно реально прописало настройки Wi-Fi на лабораторнике!!! Не с первой попытки, не очень быстро. Но прописало!

Вот только один косяк... Вместо сервера 172.16.24.114 оно прописало адрес 10.25.235.58. А это не совсем то, что я хотел. Полез разбираться... Автор проекта, похоже, перепутал все параметры, которые ему передаются. Понять его можно... Видимо, отлаживал он всё это на устройстве, которое было сразу и сервером и к Wi-Fi было подключено. Но это не мой случай. Пришлось переписывать скрипт provision. Вот его исправленная версия.

Да, теперь всё заработало и прописалось как нужно. Теперь нужно запустить bridge на сервере.

И снова python. Теперь минимальные требования к версии уже python v3.11. Видимо, нужно запускаться в докере, но поднимать его ради этой поделки совсем не захотелось. Обновил версию на нужном мне сервере до bookworm. Вроде получил нужную версию python. Поставил requirements через venv и попытался запуститься. Автор проекта решил очень странно подойти к хранению файла конфигурации... Но переписывать пока не буду. Попробуем взлететь на его заплатках.

Запустился bridge. Зацепился даже за MQTT и отправил туда своё торжественное приветствие. И за него даже зацепился мой RD6030! И тоже о себе что-то рассказал.

2026-03-09 09:01:47.58026 CONTENTS riden_psu/bridge/status online 2026-03-09 09:01:48.82137 CONTENTS riden_psu/psu/list [{"identity": "60301_7936", "name": "Unnamed", "model": 60301, "serial_no": 7936}] 2026-03-09 09:01:49.26608 CONTENTS riden_psu/psu/60301_7936/state {"connected": true, "period": 0, "model": 60301, "serial_no": 7936, "firmware_version": "1.47", "temp_c": 27, "temp_f": 81, "current_range": 0, "output_voltage_set": 12.1, "output_current_set": 0.5, "ovp": 62.0, "ocp": 30.2, "output_voltage_disp": 0.0, "output_current_disp": 0.0, "output_power_disp": 0.0, "input_voltage": 67.93, "protection_status": "normal", "output_mode": "cv", "output_enable": false, "battery_mode": false, "battery_voltage": 0.0, "ext_temp_c": -191, "ext_temp_f": -312, "batt_ah": 0.0, "batt_wh": 0.0, "presets": [{"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}]}

До победы ещё какое-то время, но, возможно, я на верном пути.

Попробуем включить удалённо RD6030?

2026-03-09 09:05:52.39601 CONTENTS riden_psu/psu/60301_7936/state/set {"output_enable": true} 2026-03-09 09:05:53.21347 CONTENTS riden_psu/psu/60301_7936/state {"connected": true, "period": 0, "model": 60301, "serial_no": 7936, "firmware_version": "1.47", "temp_c": 27, "temp_f": 81, "current_range": 0, "output_voltage_set": 12.1, "output_current_set": 0.5, "ovp": 62.0, "ocp": 30.2, "output_voltage_disp": 4.88, "output_current_disp": 0.04, "output_power_disp": 0.19, "input_voltage": 67.91, "protection_status": "normal", "output_mode": "cc", "output_enable": true, "battery_mode": false, "battery_voltage": 0.0, "ext_temp_c": -89, "ext_temp_f": -129, "batt_ah": 0.0, "batt_wh": 0.0, "presets": [{"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}, {"v": 5.0, "c": 30.1, "ovp": 62.0, "ocp": 30.2}]}

Включился!!! Мило. Совершенно для меня бесполезно, но крайне мило с его стороны.

Но он безобразно медленно присылает своё текущее состояние... Непонятно. А! Документация. В документации сказано, что пока "period" установлен в 0 (а он по умолчанию установлен в 0), то обновление состояния RD6030 не происходит. Но если выставить его в какое-то значение, то жизнь начинает играть новыми красками!

# send_mqtt_message.pl dirty:riden_psu/psu/60301_7936/state/set '{"period": 5}'

И оно заработало! Теперь раз в пять секунд лабораторник присылает своё полное состояние со всеми параметрами. Стабильно, вроде даже не переподключаясь. Просто присылает то, что заказывали. Правда при рестарте bridge параметр period теряется и его нужно восстанавливать заново. Но при рестарте лабораторника он сохраняется. Видимо, это происходит где-то внутри bridge. Нужно бы поправить, но не хочется. Лучше буду делать это на этапе работы с MQTT, благо туда он отправляет текущее значение period.

Немного возни на этапе настройки трансляции MQTT-сообщений в формат моих внутренних систем и я получил более чем живое устройство, которое отдаёт все нужные данные. И может управляться удалённо.

Отдельные благодарности Филу за прекрасный проект, который позволил подключить RD6030 к моей системе. Но хочется спросить - почему это не сделали сам разработчики RD6030? Зачем всё так дико усложнять? Но это, как и всегда, останется загадкой.

Подытоживая. На выходе мы имеем неплохой лабораторный блок питания с характеристиками "до 60 вольт" и "до 30 ампер", с полной интеграцией в любую систему автоматизации. И главное - возможность построения графиков!

Получилось не так увлекательно, как с Vamp. Но зато практически всё из коробки.

Бюджет мероприятия ~16500 рублей. Но это без попыток сэкономить. Если взять модель не такую мощную, то тот же RD6012 с корпусом, но без источника DC-питания, то она уже стоит 6200р. Добавив к нему какой-то блок питания из запасов (у меня, например, есть некоторое количество 36VDC-блоков) - можно получить достаточно бюджетный и живой вариант.

Из недостатков, которые я пока заметил: достаточно большое потребление на холостом ходу. Даже в выключенном состоянии. Около 8-9Вт. Столько потребляет DC-блок питания на 60VDC, который отключается только механической кнопкой на задней панели. Не очень удобно.