Адаптер sunenergyxt500 для ioBroker
Интеграция и управление собственным потреблением для гибридных систем хранения энергии SunEnergyXT 500 / 500 PRO с переменным током (производитель: SunEnergyXT ) через локальный HTTP API устройства — облачная учетная запись не требуется. Один экземпляр управляет до тремя головками (хранилищами).
Язык / Sprache
- Английский (по умолчанию)
- немецкий
Функции
- Управляет от одной до трех голов в одном экземпляре, каждая в своем поддереве.
heads.<n>.*плюс объединенныйtotal.*агрегаты. - Опрашивает локальный API (
GET /read) и отображает все стабильные поля в состояниях: уровень заряда батареи, мощность батареи/сети/нагрузки/солнечной батареи, ток/напряжение для каждого MPPT, ежедневные счетчики энергии, уровень заряда батареи, информация об устройстве/прошивке и состояние счетчика. - Поля управления, доступные для записи (
POST /write(подтверждено повторным прочтением), соответствует панели управления официальной интеграции, за исключением полей, которые в документации API помечены как зарезервированные : заданное значение сетки.GSмаксимальная подачаIS, пределы SoCSI/SA/SOрежим самопотребленияMMконфигурация счетчикаMDчасовой поясTZ, перезапускRT, максимальная выходная мощность сеткиMG, тоLFB/LPS/PMпереключатели и локальный режимLM(⚠️LM=1блокирует управление облаком/приложением до сброса). Зарезервированные поля (например)PT,SI1,SA1) доступны только для чтения. - Два переключаемых режима управления : контроллер самопотребления на стороне адаптера (запись).
GSиз любого состояния счетчика ioBroker, с прямой связью + P, с сторожевым таймером/безопасным режимом, который распределяет одну заданную точку сети между всеми датчиками , или саморегулирование устройства (привязывает поддерживаемый счетчик к единому хранилищу и позволяет устройству управлять собой) — плюс режим выключения для чистого мониторинга. - Кнопка «Проверить все головки» в административной панели проверяет доступность каждой настроенной головки (модель + SoC) перед сохранением.
- Индикатор подключения (
info.connection) плюсinfo.lastUpdateи на душу населенияonline/lastError. - Полный, неизмененный вариант.
/readРеакция каждой головы сохраняется вheads.<n>.info.rawResponse(JSON), поэтому любое поле, которое адаптер не сопоставляет с выделенным состоянием, все равно можно прочитать оттуда.
Как работает этот адаптер
Этот адаптер управляет хранилищем локально , без использования облачных сервисов производителя. Один экземпляр управляет от одной до трех головок (хранилищных блоков). Самостоятельное использование может осуществляться двумя взаимоисключающими способами — выбор одного из них осуществляется через настройку режима управления :
Режим B — Адаптер-контроллер (рекомендуется по умолчанию, работает с любым счетчиком, 1–3 головки). ioBroker считывает текущую мощность сети из любого состояния, на которое вы его направите .gridPowerStateId ) и адаптер записывает заданное значение сеткиGS (прямая связь + коррекция P, с сторожевым таймером). В качестве счетчика может использоваться любой компонент, поддерживаемый ioBroker — Shelly, Tasmota, адаптер для интеллектуальных счетчиков/Modbus — включая счетчики, которые хранилище не может считывать самостоятельно . Вы предоставляете одно состояние, содержащее чистую мощность сети в ваттах .>0 = рисовать,<0 = подача электроэнергии; включить инвертирование знака источника , если он инвертирован; для кВт / раздельного импорта-экспорта / пофазных счетчиков сначала вычислить чистое сетевое значение в небольшом состоянии ioBroker). При наличии более чем одного электроусилителя контроллер вычисляет одну общую заданную точку и распределяет ее между подключенными электроусилителями — поровну, с ограничением мощности каждого электроусилителя, пропуская электроусилитель, который заполнен (во время зарядки) или пуст (во время разрядки); его доля перераспределяется между остальными. Адаптер принудительноMM=0 на каждой головке, чтобы устройства выполнялиGS При этом счетчик остается полностью работоспособным в ioBroker.
Режим A — Саморегулирование устройства (поддерживаемые счетчики, только с одной головкой). Адаптер привязывает поддерживаемый счетчик к памяти (MM=1 +MD ) и позволяет устройству регулировать себя самостоятельно — собственное потребление производителя, которое может реагировать быстрее, чем внешний контур. Этот режим доступен только с одним счетчиком ; при конфигурации с двумя или тремя счетчиками его нельзя выбрать — используйте вместо этого контроллер адаптера. Поддерживаются только четыре типа счетчиков (EcoTracker, Shelly 3EM, Shelly Pro 3EM, Tasmota), и счетчик должен быть доступен для хранилища в локальной сети. Адаптер не записывает данные.GS В этом режиме используется простое mDNS/HTTP-опрос, поэтому счетчик остается работоспособным в ioBroker — в отличие от настроек счетчика в приложении производителя, которое может перенастроить счетчик и удалить его из ioBroker; этот адаптер выполняет прямую привязку и избегает этого.
Выключено (по умолчанию, только мониторинг). Адаптер никогда не записывает данные.MM /MD /GS ; это только опрос. Вы по-прежнему можете отдавать команды.control.* штаты вручную.
В обоих режимах управления адаптер обладаетMM При каждом опросе проверяется мнение каждого руководителя.MM В зависимости от выбранного режима, система повторно подтверждает его (с предупреждением), если что-то другое изменило его — таким образом, случайное подключение счетчика или внешний скрипт не смогут незаметно отключить управление. Примечание: головной модуль выполняет только записанный запрос.GS когдаMM=0 ; с ограниченным размером (MM=1 оно саморегулируется и игнорируетGS .
Несколько блоков должны быть подключены к разным фазам. Это ответственность оператора за электроснабжение — адаптер не может (и не должен) это проверять. Контроллер регулирует суммарную мощность сети, отображаемую вашим счетчиком, — именно это учитывает стандартный немецкий двунаправленный счетчик; оптимизация по фазам выходит за рамки его компетенции.
Локальный режим (LM=1 ) требуется. Каждое устройство предоставляет доступ только к своему локальному HTTP API (/read //write ) когда локальный режим включен — при его выключении,/read Не возвращает никаких данных (подтверждено на протестированной прошивке). Включение локального режима также отключает удаленное управление через облако/приложение; следовательно, мобильное приложение производителя больше не может управлять устройством.
Требования
- От одного до трех SunEnergyXT 500 (
PK=1800 Вт) или 500 PRO (PK=2Насадки мощностью 2400 Вт, доступные в локальной сети (совместимость с разными моделями также допустима). - Локальный режим (
LM=1Эта функция включена на каждом устройстве — она необходима для передачи значений через локальный HTTP API (см. раздел « Как работает этот адаптер »). Это также отключает удаленное управление из облака/приложения. - В зависимости от режима управления требуется счётчик: для режима B (контроллер адаптера) — любой счётчик, для которого доступна информация о мощности сети в качестве состояния ioBroker ; для режима A (саморегулирование устройства, одноканальный) — один из четырёх поддерживаемых счётчиков (EcoTracker, Shelly 3EM, Shelly Pro 3EM, Tasmota), доступных из хранилища в локальной сети. В выключенном режиме не требуется.
Установка
- В административной панели ioBroker откройте раздел «Адаптеры» , найдите sunenergyxt500 и установите его.
- После установки экземпляра
sunenergyxt500.0Создан. Откройте его настройки и введите IP-адрес/имя хоста Головы 1 (добавьте Голову 2/Голову 3, если у вас больше голов). Оставьте режим управления в положении «Выкл.» для чистого мониторинга. - Сохранить и закрыть — адаптер начнет опрос и заполнит дерево объектов в подкаталоге.
sunenergyxt500.0.heads.*(иtotal.*).
Конфигурация
Связь
- IP-адрес/имя хоста головки 1 (обязательно) и головки 2/3 (необязательно) — локальные адреса ваших головок хранения, каждая с необязательной меткой. Одним экземпляром можно управлять до тремя головками. Размещайте несколько головок на разных фазах (за это отвечает оператор); адаптер регулирует суммарную мощность сети. Один и тот же адрес нельзя ввести дважды.
- Проверка всех головок — программа проверяет каждую настроенную головку и сообщает модель + SoC (или ошибку), чтобы вы могли проверить адреса перед сохранением.
- Интервал опроса (с) — как часто запрашивается каждая головная станция.
/read(по умолчанию 5 с). - Время ожидания запроса (мс) — время ожидания HTTP-запроса (по умолчанию 8000 мс).
Управление — выберите режим управления :
Выкл. (по умолчанию) — только мониторинг; адаптер никогда не записывает данные.MM /MD /GS .
Контроллер адаптера (режим B) — поля:
- Состояние источника электроэнергии из сети — иностранное государство, владеющее электроэнергией из сети вашего дома, поступающей на счётчик. Условные обозначения:
>0= рисование сетки,<0= подача электроэнергии. Включите функцию «Инвертировать знак источника», если ваш счетчик использует противоположную систему обозначений. - Адаптивное управление (по умолчанию включено): регулирует мощность в трех проверенных производителем режимах — небольшие отклонения плавно (каждые 7 с, шаг 20 Вт), средние — каждые 2,5 с (120 Вт), большие шаги нагрузки — немедленно (450 Вт), с фиксированной мертвой зоной 5 Вт. Отключите его, чтобы настроить контроллер вручную с помощью полей усиления / мертвой зоны / интервала записи / ограничения шага (они появятся только в этом случае).
- Целевая мощность сети (Вт, по умолчанию 0): 0 = нулевая подача электроэнергии в сеть; положительные значения обеспечивают небольшое преднамеренное потребление электроэнергии из сети (подача электроэнергии в сеть никогда не осуществляется), отрицательные значения — небольшую преднамеренную подачу электроэнергии в сеть — используется та же система знаков, что и для состояния источника.
>0= ничья). - Максимальная регулировка за одну коррекцию (Вт, по умолчанию 500, 0 = неограниченно): ограничивает диапазон изменения заданного значения за один шаг управления, поэтому высокое усиление не может привести к перерегулированию при скачках показаний прибора.
- Усиление (по умолчанию 0,3), Мертвая зона (Вт), Минимальный интервал записи (мс), Мертвая зона записи для каждой головки (Вт — минимальное изменение заданного значения головки перед ее перезаписью, чтобы избежать помех при разделении потока). Максимальная мощность каждой головки определяется устройством автоматически (800 Вт для 500, 2400 Вт для 500 PRO), поэтому смешанные конфигурации работают без дополнительной настройки.
- Предупреждение сторожевого таймера / аварийный режим (s) — если источник данных в сети устаревает, контроллер регистрирует предупреждение и в конечном итоге принудительно запускает
GS=0на всех головках (безопасное нейтральное положение) до восстановления источника. Телеметрия сторожевого таймера доступна подcontroller.*.
Контроллер считывает фактическую мощность каждого устройства в сети.GP ) обратно перед коррекцией, что обеспечивает естественную защиту от перенасыщения, когда устройство ограничивает мощность внутри себя (например, с помощью SoC).
Саморегулирование устройства (режим A, только для одной головки ) — области:
- Тип счетчика — EcoTracker / Shelly 3EM / Shelly Pro 3EM / Tasmota.
- Серийный номер / IP-адрес счетчика — серийный номер для Shelly/Tasmota (определяется через mDNS) или IP-адрес локальной сети для EcoTracker (напрямую). Для Tasmota используйте префикс серийного номера без последних 4 символов и установите клавишу питания в соответствии с подтипом вашего энергомонитора.
Адаптер соединяет счетчик (MM=1 +MD ) и устройство саморегулируется; адаптер не записываетGS . Привязанный счетчик остается доступным для использования в ioBroker. Этот режим скрывается/блокируется после настройки второго или третьего блока.
Безопасность: В выключенном режиме адаптер доступен только для чтения — он только опрашивает устройство.
/readи никогда не пишет, если вы не дадите команду.control.*состояние. В режиме управления адаптер обеспечиваетMMна каждой головке для этого режима и повторно активирует его при внешнем изменении; не запускайте второй раз.GSодновременно с писателем (ваш собственный сценарий или сценарий устройства)MM(с другим измерительным прибором), иначе они будут драться из-за батареи.
Контроль поведения, точности и ограничений
Что ожидать: Контроллер поддерживает мощность сети в диапазоне ±10–20 Вт вокруг нуля и корректирует скачки нагрузки — в зависимости от настроек — в течение ~1–3 секунд, но не более ~30 секунд . Постоянное, точное значение 0,0 Вт по замыслу разработчиков недостижимо — ни с одним контроллером на этом оборудовании:
- Точность и уровень шума измерителя: сам внешний измерительный прибор измеряет с погрешностью и уровнем шума в несколько ватт — регулирование ниже этого значения бессмысленно.
GSУставка имеет разрешение 1 Вт, поэтому точность установки не является пределом. - Задержка в цепочке измерений: измеритель → состояние ioBroker → контроллер →
/write→ устройство плавно переходит в режим нарастания нагрузки. Между этапом нагружения и его коррекцией неизбежно проходит ~1–3 секунды. - Динамика нагрузки: Компрессор или чайник переключаются за миллисекунды — после этого реагирует каждый контроллер. Кратковременные скачки мощности на ваших графиках — это нормально и энергетически бессмысленно (ватт-секунды).
- Контроллер регулирует мощность в соответствии с заданным целевым значением мощности сети (по умолчанию 0) и симметрично колеблется вокруг него — короткие, небольшие моменты подачи электроэнергии в сеть являются частью нулевой подачи электроэнергии. Если подача электроэнергии в сеть никогда не требуется, установите целевое значение на небольшое преднамеренное потребление (например, +10 Вт).
Как работают настройки:
| Параметр | Эффект | меньшее значение | большее значение |
|---|---|---|---|
| Прирост | доля отклонения, скорректированная за шаг | вялый, плавный (0,3 ≈ 7 шагов до ~0) | Быстродействующий (1,0 = одна коррекция), но более чувствительный к шуму измерительного прибора; значение >1 может привести к перерегулированию. |
| Целевая мощность сети (Вт) | значение, до которого регулируется мощность сети | <0 = преднамеренная подача | >0 = преднамеренная ничья ("никогда не давайте мяч в корзину") |
| Максимальная поправка за одно внесение изменений (Вт) | ограничивает изменение заданного значения за шаг | сглаживает скачки показаний индикатора на высоком уровне усиления | Более крупные значения (или 0 = неограниченное значение) быстрее реагируют на большие скачки нагрузки. |
| Мертвая полоса (Вт) | Отклонения ниже этого значения игнорируются. | Более точные записи, больше операций записи (0 = все исправлено) | более спокойный, оставляет небольшое постоянное отклонение |
| Минимальный интервал записи | ритм исправлений | Более быстрое стабилизирование (пол 1000 мс) | меньше записей в устройство, более медленное отслеживание |
| Мертвая зона записи на одного пользователя | подавляет мини-перераспределение между головками (многоголовочное) | более точный | меньше болтовни |
Адаптивное управление (по умолчанию) автоматически выбирает темп для каждого уровня. Для ручного режима доступны два проверенных профиля: «Расслабленный » (по умолчанию — спокойная работа, минимальное количество операций записи на устройство, диапазон ±20–30 Вт) и «Точный» (усиление 0,8–1,0 · мертвая зона 0 · интервал 1000 мс · мертвая зона записи 0 — диапазон ±10–20 Вт, стабилизация за 1–3 с). В течение суток оба профиля дают практически одинаковый энергетический баланс — разница заключается в визуальном оформлении графика, а не в стоимости.
Правила оформления вывесок
GP(энергия из сети):>0= подача,<0= рисовать — в противоположность метру Шелли (api.GP ≈ −shelly.gridPower).BP(питание от батареи):>0= зарядка,<0= разрядка.GS(заданное значение сетки):>0= подача/выгрузка,<0= зарядка от сети (±2400 Вт на модели Pro, разрешение 1 Вт).
Дерево объектов
Каждая голова получает собственное поддерево под собой.heads.<n>.* (n = 1…3), плюс объединенныеtotal.* агрегаты и уровень адаптераcontroller.* /info.* Внутри головного узла состояния группируются в тематические каналы; лист каждого идентификатора объекта представляет собой код поля API устройства (идентификатор сущности из официального справочника полей), а двуязычное имя объекта описывает его — таким образом, дерево соответствует документированным полям устройства в соотношении 1:1.
| Канал | Содержание |
|---|---|
heads.<n>.battery.* | SoC (SC ), питание от батареи (BP ), SoC на упаковку (SC0 –SC5 ), онлайн-пакеты (ON ), гистерезис SoC (SI1 /SA1 ) |
heads.<n>.grid.* | электроэнергия из сети (GP ), суточная энергия зарядки/подачи в сеть (GD1 /GD2 ) |
heads.<n>.load.* | мощность нагрузки (LP ), суточная автономная энергопотребляющая нагрузка (LD ) |
heads.<n>.pv.* | общий PV (PV ), суточная выработка энергии фотоэлектрическими панелями (PD ) и мощность/ток/напряжение на каждый MPPT (mppt1 –mppt4 ) |
heads.<n>.system.* | общая входная/выходная мощность (IW /OP ) |
heads.<n>.device.* | тип/модель/серийный номер/статус;network.* (IP-адрес, порт, Wi-Fi);firmware.* (ES /AS /DS программное обеспечение,EH /AH /DH аппаратное обеспечение,BS0 –BS5 BMS) |
heads.<n>.meter.* | состояние внешнего счетчика (MS ) |
heads.<n>.ups.* | Режим ИБП / зарядка от сети / обходной режим (UO /UG /FP ) |
heads.<n>.fault.* | битовые маски ошибок (TF /EF /DF1 /DF2 /AF1 /AF2 /BF ) — заполняется только во время активности разлома |
heads.<n>.control.* | все поля, доступные для записи (см. ниже) |
heads.<n>.info.* | на человекаonline ,lastError ,rawResponse (полный необработанный текст)/read ) |
total.* | объединенный взгляд: взвешенный по пропускной способностиsoc , суммированоbatteryPower /gridPower /maxPower , onlineCount |
controller.* | Телеметрия контроллера самопотребления (status (возраст источника данных в сетке) |
info.* | connection (любая доступная голова) иlastUpdate |
Элементы управления, доступные для записи (heads.<n>.control.* )
Согласно соглашениям ioBroker, все поля, доступные для записи, находятся под управлением каждого из руководителей.control.* Поскольку это упрощает тему, в таблице показано, к чему относится каждый из них:
| Объект | Поле | Относится к | Описание |
|---|---|---|---|
control.GS | ГС | сетка | Уставка мощности сети (>0 подача /<0 заряд сети) |
control.IS | ЯВЛЯЕТСЯ | сетка | Максимальный предел подачи электроэнергии в сеть / выходной мощности инвертора. |
control.MG | МГ | сетка | Максимальная выходная мощность, подключенная к сети. |
control.SI | СИ | батарея | Минимальный уровень заряда батареи (в режиме работы от сети) |
control.SA | ЮАР | батарея | Максимальный уровень заряда батареи (режим сети) |
control.SO | ТАК | батарея | Минимальный уровень заряда батареи (автономный режим) |
control.MM | ММ | режим | Локальный режим нулевого потребления электроэнергии / самопотребления (в сочетании сMD ) |
control.MD | МД | метр | JSON-файл подключения счетчика (в сочетании сMM ) |
control.LM | ЛМ | режим | Локальный режим (⚠️)1 блокирует управление облаком/приложением) |
control.LFB | LFB | режим | переключатель приоритета нагрузки |
control.LPS | ЛПС | режим | Автономный выходной переключатель |
control.PM | Премьер-министр | режим | Параллельный режим |
control.TZ | TZ | устройство | POSIX часовой пояс |
control.RT | РТ | устройство | Перезагрузите устройство (кнопка — мягкая перезагрузка, а не полное выключение и включение питания). |
Совет: в административной панели ioBroker вы также можете отфильтровать список объектов по флагу «доступен для записи» , чтобы найти все элементы управления сразу.
device.PK получено изDevType на прошивке, которая больше не отправляет отчетыPK Зарезервированные поля (PT ,SI1 ,SA1 ) доступны только для чтения. Поля, от которых отказался производитель (UP ) или которые являются артефактами, существующими только в документе (WT ,BN ) не отображаются; все не отображенные элементы по-прежнему доступны вheads.<n>.info.rawResponse .
Поля ручного управления счетчиком/режимом (MM/MD)
MM /MD Это показатели собственного потребления, измеряемые самим устройством. При выборе режима управления адаптер управляет ими автоматически (режим A устанавливаетMM=1 +MD на одной головке; режим B принужденияMM=0 на каждой голове), и его защита подтверждает соответствие режима.MM на следующем опросе — поэтому любые изменения, внесенные вручную в режиме управления, носят временный характер.
Исходные поля остаются доступными для записи при использовании экспертами/вручную (например, в выключенном режиме). Они соответствуют официальной схеме подключения: поворотMM также очищаетMD и писательствоMD включаетMM (непустое значение) или отключает его (пустое значение).MD JSON-форматы для четырех поддерживаемых счетчиков находятся в локальной справочной информации API устройства; в режиме саморегулирования устройства адаптер формирует их автоматически на основе типа счетчика и серийного номера/IP-адреса.
Ограничения
- До трех головок на один экземпляр. Работа с одной головкой проверена на реальном оборудовании; разделение на несколько головок проверено модульными тестами, но на момент написания статьи не тестировалось на реальной установке с 2–3 головками — отзывы от пользователей, использующих многоголовочные системы, приветствуются. Саморегулирование устройства доступно только для одной головки.
- Электростанции должны быть подключены к разным фазам (ответственность оператора). Адаптер регулирует суммарную мощность сети, а не мощность каждой фазы отдельно.
- Балансировка каждого блока осуществляется собственной системой управления батареей (BMS) каждой головки — адаптер управляет только общей мощностью головки и считывает показания.
battery.SC(Итого) для контроля; не управляет отдельными упаковками. - Ежедневные счетчики энергии (
PD/GD1/GD2/LD) — это необработанные Вт·ч , а не кВт·ч.PDтребуется прошивка модуля управленияES 1.1.14(продается под названием "1.1.4" — публичная нумерация отличается от внутренней)ESБолее старые версии прошивки просто опускают это поле, и состояние остается пустым. - Ежедневные счетчики обнуляются устройством при перезагрузке, поэтому обновление прошивки в середине дня возвращает их к нулю.
MDиTZВступают в силу немедленно, но нет гарантии, что устройство отобразит их в точности — подтвердите по эффекту, а не по повторному отображению.- Входы фотоэлектрических модулей не тестировались с оборудованием (эталонная установка работает без фотоэлектрических модулей, поэтому...).
PV1–4всегда равны 0). Интеграция и контроллер не зависят от типа фотоэлектрической системы и являются полными, но могут возникать особые ситуации, связанные с прошивкой фотоэлектрической системы (например, полная зарядка батареи + избыток энергии от фотоэлектрической системы, поля ИБП/байпаса).FP/UG) не проверены — отзывы приветствуются.
Поиск неисправностей
info.connectionпребываниеfalse/ Нет данных: сначала убедитесь, что используется локальный режим (LM=1Функция включена на устройстве — без нее локальный API не возвращает никаких значений. Затем убедитесь, что она включена.http://<device-ip>/readдоступен с хоста ioBroker (проверьте с помощью браузера илиcurl). На человека,heads.<n>.info.onlineиheads.<n>.info.lastErrorУкажите, какой из них не сработал.- Ничего не контролируется: проверьте режим управления — «Выкл.» никогда не записывает данные. В контроллере адаптера установите допустимое состояние источника питания от сети ; в разделе «Саморегулирование устройства» установите поддерживаемый тип счетчика и серийный номер/IP-адрес .
- Устройство игнорирует
GSБатарея не реагирует: головка только выполняет записанный код.GSкогдаMM=0В режиме контроллера адаптера это обеспечивается автоматически; если вы напишетеGSВручную убедитесь, что ни один счетчик не привязан (MM=0). С ограничением по метру (MM=1Устройство саморегулируется и игнорируетGS. - Контроллер работает слишком медленно / никогда не достигает точно 0: см. Поведение управления, точность и ограничения — измерительная цепочка добавляет задержку примерно в 1–3 секунды, а сам измеритель имеет конечную точность, поэтому физическим оптимумом является диапазон ±10–20 Вт вокруг целевого значения. Для максимально быстрой реакции используйте профиль «Точность» (усиление 0,8–1,0, мертвая зона 0, минимальный интервал записи 1000 мс); чтобы никогда не подавать сигнал на вход, установите мощность целевой сети на небольшое положительное значение.
- Временные метки состояний выглядят устаревшими / флаг качества 32: адаптер записывает состояние только тогда, когда изменяется его значение (стандартная практика — это защищает базу данных состояний от миллионов одинаковых записей). Поэтому временная метка состояния показывает последнее изменение значения, а не последний опрос. Проверьте актуальность данных с помощью
info.lastUpdate(обновляется после каждого успешного опроса) иheads.<n>.info.onlineКачество 32 («замена исходного значения») сохраняется только в тех состояниях, в которых устройство никогда не выдает значения (например, SoC модулей расширения, которые не установлены); после каждого запуска адаптера все выданные значения записываются один раз, поэтому их метки времени как минимум такие же актуальные, как и при запуске. - Накопитель вообще ничего не делает — он не заряжается и не разряжается: в режиме контроллера адаптер переключает собственную регулировку устройства.
MM) выключено, поэтому, если его собственный контур никогда не срабатывает, ничего не регулирует. Читатьcontroller.gridPower: оно остается пустым, если в контроллер не поступило ни одного значения (проверьте идентификатор состояния и убедитесь, что источник записан с использованиемack=true— Непризнанные ценности игнорируются намеренно;controller.statusидет кfailsafe(и в журнале указано состояние). Если отображается положительное значение, хотя дом действительно получает питание, то правило знаков инвертируется — включение питания от сети инвертируется . Если же значение отрицательное иcontroller.totalTargetЕсли значение тоже отрицательное, контроллер запрашивает зарядку, а устройство отказывается: проверьте.heads.<n>.device.ST(2 = бег) иheads.<n>.battery.ON. - Два контроллера борются за батарею: используйте только один. Адаптер это контролирует.
MMДля выбранного режима — отключите все внешние устройства.GSскрипт (или собственный скрипт устройства)MM(с другим измерительным прибором) перед использованием режима управления. - Некоторые штаты остаются пустыми (
0/""): устройство возвращает только те поля, которые фактически предоставляет его прошивка/топология (например, дополнительные пакеты).SC2–SC5или только маски битов ошибок во время ошибки). Полный необработанный ответ всегда доступен вheads.<n>.info.rawResponse. - После обновления с одноголовочной версии дерево выглядит неправильно: структура дерева объектов была изменена следующим образом:
heads.<n>.*В версии 0.2.0 адаптер автоматически удаляет устаревшие объекты при запуске; если что-то осталось, удаляет старые объекты (или повторно добавляет экземпляр). - Устройства периодически отключаются / происходит таймаут пинга: модуль Wi-Fi устройства работает слабо, а при установке нескольких устройств друг на друга металлический корпус оказывается прямо над антенной. Проверено.
heads.<n>.device.network.WR(Уровень сигнала в дБ) — ниже −75 дБ связь становится ненадежной. Разделите установленные блоки и увеличьте интервал опроса до 10–15 с (качество управления практически не страдает: контроллер реагирует на источник питания сети, а не на этот опрос). Чтобы исключить адаптер, остановите экземпляр и пингуйте головной блок в течение нескольких минут — если обрывы связи продолжаются, причина не в опросе. Сам адаптер отправляет один пинг./readдля каждого источника и с заданным интервалом, задействует несколько источников поочередно, закрывает каждое соединение после использования и автоматически отключается после неудачных опросов.
Changelog
0.2.10 (2026-08-03)
- (Creekhail) Gentler on the heads' Wi-Fi: with two or three heads the adapter no longer polls them all in the same instant — each head now runs its own cycle, staggered by up to 1 s. After a failed poll that head is backed off (doubling up to 60 s) instead of being polled at full rate, which only added to the congestion that made it drop out. The other heads keep their own rhythm either way.
- (Creekhail) Every HTTP connection is closed after use (
Connection: close, a dedicated connection pool per head). Node's default keeps a socket open for 5 s, which at a 5 s poll means permanently — a slot the head's ESP32 cannot reclaim if the close is lost on a weak link. Reads and writes to the same head are now serialized as well, so a control write no longer opens a second parallel connection while a poll is running, and all sockets are closed on unload. - (Creekhail) The request timeout now covers the whole request instead of only the phase after a socket was assigned.
- (Creekhail) Admin: the poll interval carries a help text recommending 10–15 s for two or more heads or a weak Wi-Fi signal; new troubleshooting entry for sporadic head drop-outs.
0.2.9 (2026-08-02)
- (Creekhail) The controller now publishes what it actually sees:
controller.gridPoweris the house grid power the way the loop understands it (after the inverted option,>0= draw) and is updated for every accepted value — even while the dead band suppresses any write, so "no value arrives" and "values arrive but nothing happens" are finally distinguishable.controller.totalTargetshows the total setpoint before it is split across the heads; a negative value means the controller wants to charge, so a storage that stays idle anyway is a device-side problem. - (Creekhail) Fixed a silent standstill: if the configured grid-power source never delivered a single value (wrong state id, or a state written with
ack=false), the controller sat atGS=0forever without any warning — while control mode had already switched the device's own regulation (MM) off. Nothing regulated at all, and the status still readok. The watchdog now escalates tofailsafeafter the configured failsafe time and logs the state id together with what to check. - (Creekhail) A grid-power source that is written with
ack=falseis still ignored (an unacknowledged value must not drive the battery), but the adapter now warns once, names the state and points at both remedies instead of dropping every value silently. - (Creekhail) Renamed
total.gridPowerto "Storage grid-port power, total" — it sums the storages' grid ports and was too easily mistaken for the house connection. The object id is unchanged, so history and existing scripts keep working.
0.2.8 (2026-07-29)
- (Creekhail) Support for control module firmware
ES 1.1.14(marketed by the manufacturer as "1.1.4"): the reinstated fieldPDis now exposed asheads.<n>.pv.PD— today's PV generation energy in raw Wh. Verified against a 500 PRO before and after the update: no field was removed and no control value was reset, so older firmware keeps working unchanged — the state simply stays empty where the device does not deliverPD. - (Creekhail) Documentation: noted that the device's public firmware numbering differs from the internal one reported in
ES(public1.1.4= internal1.1.14) — feature availability is therefore detected by field presence, never by comparing version strings; and that the daily counters (PD/GD1/GD2/LD) are reset by the device on reboot, so a firmware update mid-day drops them to 0.
0.2.7 (2026-07-05)
- (Creekhail) New adaptive control (enabled by default): the controller regulates in three manufacturer-proven tiers — small deviations gently (every 7 s, 20 W steps), medium ones every 2.5 s (120 W), large load steps immediately (450 W), with a fixed 5 W dead band. Disable the new checkbox to keep tuning gain, dead band, write interval and step limit manually. Existing installations are switched to adaptive by this update (uncheck to return to your manual tuning).
- (Creekhail) Admin: help texts for gain, dead band and min. write interval; requires admin >= 7.8.23; CHANGELOG_OLD.md added and the Dependabot auto-merge workflow aligned with the canonical template (iobroker-bot).
0.2.6 (2026-07-04)
- (Creekhail) Controller: new target grid power (deliberate small draw or feed-in — e.g. +10 W to never feed in; the manufacturer's HA blueprint offers the same option) and a maximum adjustment per correction step (default 500 W) that allows a high gain without overshoot on meter spikes.
- (Creekhail) Documentation: corrected the setpoint-granularity statement — the device accepts
GSwith 1 W resolution (previously documented as 10 W steps); the practical accuracy limits are measurement-chain latency and meter noise.
0.2.5 (2026-07-02)
- (Creekhail) Review follow-up: added the manufacturer/product link to the README, and the controller now only accepts acknowledged grid-power values (
ack=true) from the configured meter state (a manually written test value can no longer drive the battery).
0.2.4 (2026-07-02)
- (Creekhail) State names are now provided in all ioBroker languages: English and German stay hand-written, the other languages are machine-translated (generated file, merged at object creation; existing installations are updated in place).
0.2.3 (2026-07-02)
- (Creekhail) Object-tree compliance for the repository review:
- The
headscontainer is now a folder so the hierarchy follows the required device→channel→state order. - The switch states
control.MM/LM/LFB/LPS/PMare now real booleans (previously 0/1 numbers) — adjust scripts that read or write them; the device still receives 0/1. - Corrected roles:
GS/IS/MGuselevel,ups.UOusesvalue. - Object definitions are merged onto existing objects on start, so role/type/name updates reach existing installations (user settings like history configs are preserved).
- The
0.2.2 (2026-07-02)
- (Creekhail) Repository-checker compliance: complete admin translations in all languages (including the validator messages), release notes translated into all languages, removed an unknown jsonConfig property from the test button and use the adapter-managed timer during unload.
0.2.1 (2026-07-01)
- (Creekhail) Controller robustness and hardening:
- Config values of 0 are respected (gain / dead bands) instead of silently becoming defaults.
- A failing GS write on one head no longer aborts the setpoints of the other heads.
- Anti-windup: when a device visibly limits internally (SoC/temperature), the controller adopts the reported grid power as its feed-forward base.
- GS is neutralized to 0 on all reachable heads when the controller stops (adapter stop/restart or leaving controller mode), so no head keeps executing a stale setpoint unwatched.
- Heads are polled in parallel (one unreachable head no longer stretches the poll cycle); fewer state-DB reads per poll.
- The startup object cleanup only touches adapter-managed subtrees; user-created states in the namespace survive.
- Missing MG falls back to the model's power limit (500 → 800 W) instead of assuming a PRO; device responses are size-capped.
- Manual GS writes are rejected (with a warning) while the controller is active; failsafe no longer retries offline heads every tick.
- New unit tests for the controller (regulation, dead bands, throttling, failsafe, anti-windup).
0.2.0 (2026-06-30)
- (Creekhail) Multi-head support: manage up to three SunEnergyXT heads in one instance. The adapter controller now computes one grid setpoint and splits it across all online heads (equal split, gated by each head's SoC headroom, with per-head power caps and overflow redistribution). New per-head object tree
heads.<n>.*and combinedtotal.*aggregates; a "Test all heads" connectivity button; device self-regulation is restricted to a single head. The object tree was restructured — existing single-head instances should be re-created (delete the old objects / re-add the instance).
0.1.1 (2026-06-29)
- (Creekhail) Released via npm trusted publishing (provenance) and a package metadata fix.
0.1.0 (2026-06-28)
- (Creekhail) Initial release: local-API polling to states; writable control fields; two switchable control modes — an adapter-side self-consumption controller (any ioBroker meter state, feed-forward + P, with watchdog/failsafe) and device self-regulation (binds a supported meter: EcoTracker / Shelly 3EM / Shelly Pro 3EM / Tasmota); plus a monitoring-only mode, with an MM-mode guard.
License
MIT License
Copyright (c) 2026 Marcus Bortel (Creekhail)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.