Адаптер Zendure Solarflow для ioBroker
Адаптер ioBroker для чтения и управления устройствами Zendure Solarflow через API Zendure Cloud, а также локально через zenSDK (HTTP) или MQTT для устаревших устройств.
Пожертвовать
Если вам пригодился адаптер и вы хотите поддержать мою работу, пожалуйста, сделайте пожертвование через PayPal. Спасибо! (личная ссылка для пожертвований Nograx, не имеющая отношения к проекту ioBroker)
Функции
- Полная телеметрия с ваших устройств Solarflow, включая значения, не отображаемые в официальном приложении (например, напряжение батареи).
- Управляйте устройствами так же, как и официальным приложением — большинство настроек доступны.
- Установите ограничения на вход/выход для сценариев с нулевым входным напряжением без Shelly Pro EM или создавайте более сложные автоматизации с помощью скриптов/Blockly.
- Защита батареи: отключение подачи питания при низком напряжении батареи (требуется установка ограничения выходного напряжения через адаптер).
- Управляйте несколькими устройствами Solarflow одновременно с более точными расчетами.
- Встроенная система автоматизации без потери электроэнергии (управляемая по ПИ-регулятору, распределение мощности между несколькими устройствами с учетом уровня заряда батареи), работающая от сетевого счетчика.
- Совместимо со всеми устройствами Zendure Solarflow.
- zenSDK : локальное управление HTTP для совместимых устройств, при этом данные продолжают передаваться в облако Zendure, что позволяет сохранять полный контроль даже при отключении интернета/серверов Zendure.
Режимы
- Аутентификация с помощью Cloud Key (рекомендуется): официальный метод Zendure. Получите Cloud Key из приложения. По умолчанию для совместимых устройств в той же сети, что и ioBroker, используется zenSDK, что обеспечивает полный локальный контроль при одновременной передаче данных в облако. Также возможна аутентификация только через облако. Устаревшие устройства, уже подключенные к локальному MQTT-серверу, также могут передавать данные в облако без каких-либо недостатков.
- Локальный режим : только локальный режим. Направьте адаптер на локальный MQTT-сервер для устаревших устройств (см. ниже); устройства zenSDK обнаруживаются через mDNS.
- Только zenSDK (mDNS / IP) : нет облачной платформы Zendure и вообще нет MQTT-сервера. Устройства обнаруживаются с помощью обнаружения mDNS или настраиваются по IP-адресу и опрашиваются/управляются локально только через zenSDK, поэтому поддерживаются только устройства, совместимые с zenSDK.
Обнаружение мДНС
При включении zenSDK адаптер просматривает сеть через mDNS/Bonjour в поисках устройств, объявляющих себя как Zendure-<model>-<serialNumber> Пока он работает. Сеть запрашивается повторно через 5, 15, 30 и 60 секунд, а затем каждые 5 минут, поэтому устройства, подключенные к сети позже (или пропущенные при предыдущем запросе), по-прежнему обнаруживаются без перезапуска адаптера. Это заполняет или исправляет IP-адреса для известных облачных устройств и автоматически создает аксессуары (серия Mix, интеллектуальные счетчики), у которых нет облачного ключа продукта и которые невозможно создать иным способом. Устройства сопоставляются по полному серийному номеру, а не по IP-адресу или сокращенному суффиксу. Отключить можно с помощью параметра «Добавить устройства, найденные с помощью обнаружения mDNS».
устройства zenSDK по IP-адресу
mDNS использует многоадресную рассылку, которая обычно не маршрутизируется между сегментами сети. Если ваши устройства Zendure находятся в другой VLAN/подсети, отличной от ioBroker, введите их IP-адреса (или имена хостов) в разделе «Устройства zenSDK по IP-адресу» в настройках адаптера. Адаптер запрашивает каждый адрес через zenSDK. http://<ip>/properties/report) при запуске, а затем каждые 5 минут, идентифицирует устройство по сообщаемому серийному номеру: устройство, уже известное (например, из списка устройств облака Zendure), сохраняет свои существующие состояния и переключается на локальное управление zenSDK; создается неизвестное устройство с его серийным номером в качестве ключа, как и устройство, найденное через mDNS. Работает во всех режимах подключения, пока включен zenSDK. Присвойте устройствам фиксированный IP-адрес (резервирование DHCP) и убедитесь, что ioBroker может связаться с ними через TCP-порт 80.
Поддерживаемые устройства
Устройства, совместимые с zenSDK ✅ (полное локальное управление через HTTP)
Zendure рекомендует использовать режим аутентификации Cloud Key, описанный выше — он обеспечивает полный локальный контроль, сохраняя при этом подключение к облаку для удобства. Нет необходимости отключать эти устройства от облака.
- Solarflow 1600 AC Plus, 2400 AC, 2400 AC Plus, 2400 Pro, 800, 800 Plus, 800 Pro
- Solarflow 3000 Mix AC+, 4000 Mix AC+, 4000 Mix Pro (ключ продукта для облачного сервиса пока отсутствует — добавлен только через обнаружение mDNS )
Аксессуары для умных счетчиков 📊 (только для чтения, только для zenSDK/mDNS)
- Интеллектуальный счетчик 3CT — полная мощность на фазу (A/B/C) и общая мощность, передаваемая через трансформаторы тока.
- «Умный» счетчик D0 — отображение показаний счетчика коммунальных услуг в режиме реального времени через оптический интерфейс IEC 62056-21.
Устаревшие устройства 🔄 (локальный режим MQTT через Zendure Cloud Disconnector)
- HUB 1200, HUB 2000, Hyper 2000, AIO 2400, ACE 1500 — все они поддерживают локальный режим и могут передавать данные в облако.
Преимущества локального режима: данные не отправляются на серверы Zendure (рекомендуется отправлять их через ретранслятор), прямая/более быстрая связь по протоколу MQTT, полная автоматизация в автономном режиме, а также возможность повторного включения облачного ретранслятора в любое время. Обновления прошивки через официальное приложение/Bluetooth по-прежнему работают.
Автономный режим (отключение от Zendure Cloud) для устаревших устройств
⚠️ Предупреждение о гарантии: Изменение MQTT-сервера непосредственно на устройстве (с помощью инструментов Bluetooth или перенаправления DNS) официально не поддерживается и аннулирует гарантию на ваше устройство . Действуйте на свой страх и риск.
Чтобы отключить устаревшее устройство от облака, используйте Solarflow Bluetooth Manager от Райнхарда Брандштеттера или мой Zendure Cloud Disconnector — оба инструмента устанавливают MQTT-адрес устройства через Bluetooth. В качестве альтернативы, перенаправьте DNS-запросы для "mq.zen-iot.com" на ваш собственный MQTT-сервер через маршрутизатор.
Примечание: эти инструменты Bluetooth работают только с устаревшими устройствами . Для устройств zenSDK используйте официальный автономный метод Zendure.
Оба инструмента принудительно используют порт MQTT по умолчанию (1883 или 8883 с SSL) и требуют отключения аутентификации на вашем сервере, поскольку устройство использует жестко закодированный пароль. Вы можете использовать это в сочетании с ключом облачной аутентификации или в полностью локальном режиме.
Важный
Для управления зарядкой/подачей электроэнергии через скрипт или Blockly используйте...** setDeviceAutomationInOutLimit ** Параметр управления — управляет устройством без записи во флэш-память. Отрицательные значения запускают зарядку от сети.
Автоматизация адаптера (управление с нулевым входным сигналом)
Адаптер включает в себя встроенный контроллер нулевого уровня подачи электроэнергии. Он считывает показания вашего сетевого счетчика и непрерывно регулирует подачу электроэнергии. setDeviceAutomationInOutLimit для всех участвующих устройств, чтобы мощность сети оставалась близкой к настраиваемой заданной точке — внешний скрипт не требуется. Работает как с одним устройством, так и с группой из нескольких устройств.
Настраивать
- Откройте настройки адаптера, раздел «Автоматизация» и установите флажок «Включить автоматизацию адаптера» .
- Выберите состояние триггера : состояние вашей сети/умного счетчика с указанием текущей мощности сети в Вт ( положительное значение = импорт из сети, отрицательное = экспорт в сеть ). Каждое изменение значения этого состояния запускает один цикл управления, поэтому оно должно обновляться часто (идеально — каждые 1-5 секунд).
- Сохраните — адаптер перезагрузится и создаст файл.
adapterAutomationштатов. - Включите автоматизацию для каждого устройства, которое необходимо контролировать:
<productKey>.<deviceKey>.adapterAutomation.automationEnabled = true. - Включите глобальный переключатель
adapterAutomation.automationEnabled = true.
⚠️ Пока для устройства активна автоматизация, не пишите. setDeviceAutomationInOutLimit Если вы используете собственные скрипты для этого устройства, автоматизация перезапишет их. Устройства с automationEnabled = false остаются совершенно нетронутыми.
Штаты
Глобальный (zendure-solarflow.X.adapterAutomation.*):
| Состояние | По умолчанию | Описание |
|---|---|---|
automationEnabled | false | Глобальный выключатель для автоматизации. |
setPoint | 10 | Целевая мощность сети в Вт. Небольшое положительное значение (незначительный импорт) исключает подачу электроэнергии в сеть. |
setPointNearlyFull | -100 | Целевая мощность сети в Вт, используемая вместо setPoint Когда все батареи заряжены как минимум на 90% и есть солнечная энергия. Отрицательные значения позволяют подавать энергию в сеть. |
acOnlyPenalty | 50 | Показатель опережающего устройства по проценту заряда батареи, необходимому для того, чтобы стать ведущим устройством, определяется после того, как средний уровень заряда батареи других устройств превысит 35%. 0 Отключает штраф. |
surplusChargeTrigger | 100 | Экспорт электроэнергии из сети в Вт сверх заданного значения, при котором простаивающие устройства, работающие только от сети переменного тока, начинают заряжаться от избытка электроэнергии. Минимум 30. |
ignoreSuggestedInverseMaxPower | false | Если true, устройства inverseMaxPower используется в качестве максимального выходного значения вместо рекомендуемого значения (см. ниже). |
deviceOrder | Только для чтения. Текущий порядок устройств: первое устройство является ведущим. |
На каждое устройство (<productKey>.<deviceKey>.adapterAutomation.*):
| Состояние | Описание |
|---|---|
automationEnabled | Добавить это устройство в автоматизацию (по умолчанию) false). |
forceAcCharging | Заряжайте это устройство от электросети до полной емкости. chargeMaxLimit до полного заполнения, независимо от текущего спроса (по умолчанию). false). |
acChargingAllowed | Только для устройств, которые могут заряжаться от сети переменного тока, но не являются устройствами, работающими только от сети переменного тока (например, SF 800 / 2400 Pro, Hyper 2000): заряжайте это устройство от избыточной мощности сети, как устройство, работающее только от сети переменного тока (по умолчанию). false). |
suggestedInverseMaxPower | Только для чтения. Максимальная выходная мощность, потребляемая этим устройством в рамках автоматизации, рассчитана на основе уровня заряда батареи (SOC) и минимального напряжения ячейки для защиты аккумулятора. |
suggestedInverseMaxPowerInfo | Только для чтения. Причина текущего рекомендуемого значения. |
status | Только для чтения. То, что система автоматизации в данный момент хочет, чтобы это устройство делало (например, подача энергии, режим ожидания, зарядка от избытка энергии), на языке системы ioBroker (немецкий или английский). |
Как это работает
- ПИ-регулятор: требуемая выходная мощность рассчитывается исходя из текущего потребления электроэнергии в доме (мощность сети + текущая выходная мощность) плюс ПИ-коррекция в сторону заданного значения. В пределах небольшой мертвой зоны (от заданного значения до заданного значения + 10 Вт) ничего не изменяется, чтобы избежать постоянных корректировок.
- Распределение мощности: необходимая мощность распределяется между активными устройствами в зависимости от их уровня заряда батареи (SOC) — устройства с более высоким уровнем заряда батареи получают большую долю. Устройства с более низким уровнем заряда батареи получают большую долю мощности.
minSocНе получают никакой доли. Энергия, которую устройство не может обеспечить (превышая свой максимальный запас), передается устройствам, имеющим запас мощности. - Ведущее устройство: Устройства ранжируются по уровню заряда батареи (SOC) и потреблению солнечной энергии (пересортировка производится каждый час). Ведущее устройство всегда активно; дополнительные устройства добавляются при увеличении спроса (при загрузке активных устройств более 70%) или когда они почти полностью загружены. После добавления устройства остаются активными не менее 5 минут, чтобы избежать нестабильности. Неактивные устройства несколько минут находятся в режиме ожидания с потреблением 10 Вт, чтобы быстрее реагировать.
- Защита батареи:
suggestedInverseMaxPowerОграничение выходной мощности происходит при низком уровне заряда батареи (SOC) / низком напряжении элементов (например, всего 60-500 Вт при слабых элементах), а ночью (0-5 часов) ограничение определяется уровнем заряда батареи. Оно никогда не превышает мощность устройства.inverseMaxPower. - Устройства, работающие только от сети переменного тока (например, SF 2400 AC, SF 1600 AC+, SF 3000/4000 Mix AC+), менее предпочтительны в качестве ведущего устройства, когда уровень заряда других батарей превышает 35%. Когда сетевой счетчик показывает избыток (как минимум, экспорт),
surplusChargeTriggerВт сверх заданного значения, по умолчанию 100 Вт), неактивные устройства, работающие только от сети переменного тока (и устройства сacChargingAllowed) пополнить этот излишек, в пределах своих возможностейchargeMaxLimit(Мощность в Вт). - Безопасность зарядки: устройство переключается в режим зарядки только после того, как оно проработало в режиме ожидания с потребляемой мощностью 0 Вт не менее 5 минут, поэтому оно не переключается напрямую между разрядкой и зарядкой.
Примечания
Этот адаптер выполняет аутентификацию на официальных серверах MQTT с помощью кода авторизации облака, который можно сгенерировать в приложении Zendure.
Sentry (отчет об ошибках и статистика устройств)
Этот адаптер использует библиотеки Sentry для автоматического сообщения разработчику об исключениях и ошибках в коде. Кроме того, адаптер отправляет анонимную статистику устройств через 5 минут после запуска, а затем один раз в 24 часа: одно событие для каждого используемого класса устройств, содержащее только класс устройства, ключ продукта, название продукта и режим подключения. Ключи устройств, серийные номера, IP-адреса или учетные данные не передаются. Эта статистика помогает определить, какие устройства используются и где отсутствует поддержка.
Более подробную информацию, а также сведения о том, как отключить отчеты об ошибках, см. в документации Sentry-Plugin . Система отчетности Sentry используется начиная с js-controller 3.0.
Changelog
WORK IN PROGRESS
- zenSDK devices: smartMode is no longer turned off in standby (automation limit 0), Note: Currently it'S uncertain whether a permanently enabled smartMode increases the device's standby consumption.
6.0.0-alpha.7 (2026-10-06)
- (Schattenwelt) Add setting "zenSDK devices by IP address": zenSDK devices can be configured by IP address, so they also work if mDNS doesn't reach them (e.g. devices in another network segment / VLAN). Known devices are matched by serial number and keep their states, unknown devices are created with their serial number as key.
- Zero-feed in: charging devices are now accounted with their measured AC input power (gridInputPower) instead of their commanded charge limit once settled. Fixes grid import when a nearly full battery charges with much less power than requested (e.g. 80 W instead of 600 W).
- Output limit can now be set on devices without an autoModel state (previously rejected because autoModel was not '0').
6.0.0-alpha.6 (2026-10-06)
- Better tracking if device command is accepted
- Wait for wake up of specific device - don't set the whole script to sleep
6.0.0-alpha.5 (2026-10-04)
- zenSDK devices: in standby (automation limit 0), smartMode is now only turned off after at least 10 minutes and only when solar input is below 50 W and the battery level is below 98%. This is checked every minute, so the internal inverter stays on and the device reacts faster when the limit changes again.
- zenSDK devices: smartMode is now enabled before acMode when switching to charging/discharging, so these writes go to RAM instead of flash.
6.0.0-alpha.4 (2026-10-01)
- Zero-feed in: non-lead devices no longer get pulled out of idle into 30/10 W standby for a tiny share, and fully charged devices without solar input are released from standby to 0 W.
- Zero-feed in: devices are no longer added as extra feed-in device just because they have more than 100 W solar input.
6.0.0-alpha.3 (2026-10-01)
- Remove 0-5h reduction of suggested inverseMaxPower as this was related to Octopus Energy in personal setup.
For older changes see CHANGELOG_OLD.md.
License
MIT License
Copyright (c) 2026 Peter Frommert peter.frommert@outlook.com
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.