🔧 Описание
Адаптер smartloadmanager используется для динамического управления нагрузкой на основе значения подаваемой мощности от фотоэлектрических систем. Цель — локальное потребление излишков электроэнергии, что позволяет минимизировать или полностью исключить подачу электроэнергии в общую сеть. Адаптер поддерживает как включение/выключение нагрузки, так и устройства с процентным управлением и аккумуляторные батареи.
🚀 Особенности
- ✅ Мониторинг настраиваемой точки ввода данных
- ✅ Динамическое подключение потребителей в случае избытка
- ✅ Динамическое отключение в случае дефицита или отсутствия подключения к сети
- ✅ Поддерживает двоичные, процентные, отопление и батарею потребителей
- ✅ Процентное регулирование с задержкой (плавное регулирование), опционально настраиваемое для каждого потребителя
- ✅ Динамическая зарядная мощность для хранения аккумулятора с целевым уровнем заряда
- ✅ Временное окно для логики включения/выключения для каждого потребителя (включая «только во время выключения»)
- ✅ Автоматическое создание объектов с расширенной информацией для каждого потребителя
- ✅ Режим управления: Выкл./Ручной Вкл./Авто для каждого потребителя отдельно
- ✅ Управление гистерезисом посредством отдельных пределов включения/выключения
- ✅ Задержка переключения, специфичная для потребителя (переопределение глобальной)
- ✅ Логика последовательности подключения (по мощности) и отключения (наоборот)
- ✅ Глобальная задержка переключения батареи (
batteryDelaySeconds) - ✅ Проверка записи для режима управления батареей (вывод отладки в журнале)
- ✅ Отложенное включение и выключение по таймеру
- ✅ Отображение работающих таймеров в журнале отладки с указанием оставшегося времени
- ✅ Дополнительные уведомления о включении/выключении, процентном контроле и заряде батареи (Telegram / Gotify)
- ✅ Оптимизация для точек данных 0/1 для устройств с логическим или числовым управлением 0/1
- ✅ Подробное протоколирование всех таймеров, излишков и операций переключения
- ✅ Уведомления по типу потребителя (бинарный, процентный, батарея, отопление), с возможностью активации
- ✅ Управление нагревом/нагревательным стержнем с проверкой температуры, выпуска и пульсации
⚙️ Конфигурация
🔹 Основные настройки
| Сеттинг | Описание |
|---|---|
| Точка данных о поступлении | Идентификатор объекта значения подачи (например, излишек фотоэлектрических систем) |
| Базовая нагрузка | Всегда вычитается из значения подаваемой электроэнергии (например, потребление в режиме ожидания) |
| Порог включения | Порог в ваттах, выше которого включаются потребители |
| Лимит отключения | Порог в ваттах, выше которого потребители отключаются |
| Задержка (секунды) | Задержка двоичного отключения (сглаживание гистерезиса) |
| Процентная задержка (сек.) | Глобальная задержка при снижении энергопотребления процентных потребителей (например, настенной розетки) |
| Задержка батареи (сек.) | Глобальная задержка управления батареей |
| Значение подачи отрицательное | Если активно: отрицательное значение = подача / положительное значение = покупка в сети |
| Режим управления батареей-DP | Дополнительная точка данных управления для переключения режима работы от батареи (Авто/Ручной/Выкл.) |
| Уведомления | Активация для двоичного кода / процентов / батареи / нагрева, включая экземпляры Telegram/Gotify |
🔹 Потребитель
| Поле | Описание |
|---|---|
| Имя | Отображаемое имя |
| Активно | Активирует управление для этого потребителя |
| Тип правила | "binary", "percent" или "battery" |
| Точка данных управления | Идентификатор для переключения или управления, также поддерживается 0/1-DP |
| Мощность [Вт] | Реальная электрическая мощность потребителя |
| Лимит включения [Вт] | Требуемый излишек для активации |
| Лимит выключения [Вт] | Нижний предел деактивации |
| Максимальная мощность [Вт] | Контрольное значение для процентного регулирования |
| Процент задержки [с] | Дополнительная задержка только для обратного регулирования этого потребителя |
| Переопределение задержки [с] | Задержка переключения, специфичная для потребителя (например, возможно немедленное переключение) |
| Время включения (ЧЧ:ММ) | Время, с которого управление может быть активным |
| Время выключения (ЧЧ:ММ) | Время прекращения управления |
| Выключать только в указанное время | Флажок: Выключать только в указанное время |
| batterySetpoint (только аккумулятор) | Точка данных, в которую записывается желаемая мощность зарядки |
| batterySOC / targetSOC | Дополнительно: SOC и target SOC для предотвращения зарядки при полной батарее |
| Таймер / ТаймерОкончания | Внутренний таймер для отложенного переключения, оставшееся время отображается в журнале |
| мин.температура / макс.температура | Нижний и верхний пределы для режима отопления |
| Точка данных о температуре (только нагрев) | Точка данных о температуре для проверки мин./макс. пределов |
| enableDatapoint (только нагрев) | Необязательная точка данных: нагревательный элемент может работать только в том случае, если установлено значение true |
| heartbeatDatapoint (только нагрев) | Необязательно: должно циклически возвращать значение true, в противном случае отключается |
🔋 Поддержка аккумуляторной батареи
- Потребители с
"ruletype": "battery"регулируют заданное значение зарядки в зависимости от текущего излишка. - Если установлены значения
batterySOCиbatteryTargetSOC, зарядка больше не будет производиться при уровне заряда выше целевого. - При желании можно установить
batteryControlModeDatapoint: 0 = Выкл,1 = Ручной,2 = Автоматический- Контроль осуществляется только в пределах настроенных временных окон.
- Управление выполняется повторно с каждым обновлением FeedIn по истечении настроенной задержки (
batteryDelaySeconds). - Задержки для всех цепей (бинарных, процентных, батарейных) можно настраивать для каждого потребителя отдельно или глобально.
- Подробное ведение журнала и дополнительные уведомления о переключении батареи.
🌡️ Поддержка отопления
- Потребители с «типом правила»: «нагрев» предназначены для нагревательных элементов или аналогичных потребителей.
- Управление происходит только в том случае, если: - Текущая температура ниже maxTemperature - Необязательно: зафиксировано значение выше minTemperature - Необязательно: enableDatapoint активен - Необязательно: heartbeatDatapoint действителен
- Если требования не выполняются, схема немедленно прерывается и таймер останавливается.
- Поддержка таймера включения/выключения (onTimerRemaining / offTimerRemaining) с отображением оставшегося времени.
- Подробное ведение журнала и дополнительные уведомления для потребителей тепла.
🧠 Логика управления
- Значение измерения точки данных интерпретируется на основе конфигурации (положительное = потребление сети или подача)
- Излишек > базовая нагрузка + предел включения:
→ Потребители включаются (бинарно) по возрастанию мощности
- Дефицит < Базовая нагрузка - предел отключения:
→ Потребители отключаются в обратном порядке
- Регулирование процентного соотношения потребителей:
→ % = избыток/максимальная мощность → Управляется задержкой (глобально или для каждого потребителя) → Возможны дополнительные переопределения для каждого потребителя
- Регулирование для потребителей аккумуляторных батарей:
→ Мощность зарядки = мин. (избыточная, максимальная мощность), если целевой уровень заряда не достигнут → Задержка через batteryDelaySeconds или на потребителя
- Проверка временного окна для всех потребителей
→ Активно только если текущее время находится в диапазоне от switchOnTime до switchOffTime
- Управление осуществляется только в режиме управления «Авто (2)»
→ Ручные вмешательства (режим 1 или 0) остаются нетронутыми
- Отложенное переключение по таймеру
→ Таймер отменяется перед повторным переключением, оставшееся время можно отобразить в журнале
- Дополнительные уведомления о включении/выключении, проценте и заряде батареи
- Оптимизация для 0/1 точек данных
→ Автоматически поддерживает логическое или числовое управление 0/1
- Подробное протоколирование всех операций переключения, излишков и таймеров
- Управление потребителями тепла:
→ Переключение только в пределах минимальной/максимальной температуры и при наличии допустимых состояний включения/тактового сигнала → Таймеры отключаются, как только условия перестают выполняться
💡 Пример: Wallbox
| Параметр | Значение |
|---|---|
| Подача | 1000 Вт |
| Базовая нагрузка | 100 Вт |
| Максимальная мощность | 11000 Вт |
Расчет:
- Излишки: 1000 - 100 = 900 Вт
- Процент: 900 / 11000 ≈ 8,2% → Wallbox отрегулирован на 8%
📋 Структура объекта
Для каждого потребителя создается отдельный канал со следующими состояниями:
.controlMode→ 0 = Выкл., 1 = Ручной, 2 = Автоматический.switchOnTime/.switchOffTime.alwaysOffAtTime→ правда/ложь.performance,.switchOnPoint,.switchOffPoint.batterySetpoint(только для "battery").temperatureDatapoint(только для «отопления»).onTimerRemaining / .offTimerRemaining→ Оставшееся время для таймера включения/выключения.timer→ внутренний таймер для отложенного переключения.timerEnd→ Временная метка истечения таймера (для журнала)
🚫 Ограничения
- Нет истории SOC, нет долгосрочной логики
- Не допускается повторное использование идентичных точек данных.
- Управление аккумулятором основано исключительно на подаче, без учета мощности разряда.
- Невозможно определить минимальный процентный предел (например, 10% мин. для настенного устройства)
- Отопление без прямого измерения производительности – только предельные значения и проверки допуска
🛣️ Будущие функции
- Управление на основе прогноза фотоэлектрических установок (бета)
- Поддержка комбинированных потребителей
Профили приоритетов- Перегрев или обработка ошибок на каждом устройстве
Минимальные и максимальные процентные пределы регулирования- Настраиваемая логика группы или комнаты
Changelog
0.0.7 (2025-09-09)
- (quorle) modified Readme
- (quorle) German and English description created
- (quorle) chore: cleanup devDependencies
- (quorle) Add "label" to jsonConfig.json everywhere
- (quorle) Fixed bugs in timeouts in functions
- (quorle) setTimeout/setInterval allowed maximum values implemented
- (quorle) adapter-core 3.2.3 to 3.3.2 updated
- (quorle) eslint-config 2.0.2 to 2.1.0 updated
- (quorle) testing 5.0.4 to 5.1.0 updated
0.0.6 (2025-09-03)
- (quorle) Adjustments package.json
- (quorle) Code changed
0.0.3 (2025-09-03)
- (quorle) Adjustments package.json
- (quorle) Code changed
0.0.2 (2025-09-03)
- (quorle) Adjustments package.json
- (quorle) Code changed
0.0.1 (2025-09-02)
- (quorle) Release
License
MIT License
Copyright (c) 2025 quorle quorle12@gmail.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.