Zendure EV Guard
Защити свои батареи Zendure во время зарядки электромобиля
Совместим с Zendure SolarFlow 2400 AC • Shelly Pro 3EM • Smappee • Windows, Linux, macOS
У тебя есть батареи Zendure и электромобиль ?
Ты это знаешь : когда твоя машина подключается к wallbox, она высасывает всё. Твои батареи Zendure разряжаются со скоростью света, циклы накапливаются, а срок службы твоих драгоценных элементов тает как снег на солнце.
Если твоя машина служебная и электричество оплачивает работодатель, обидно разряжать батареи для её зарядки, а вечером уже ничего не оставить для собственного потребления в доме.
Другой вариант : даже если это не служебная машина, ты, возможно, просто хочешь не дать батареям разряжаться во время зарядки, чтобы в полной мере пользоваться электричеством, которое солнечные панели производят под ярким солнцем, не забирая энергию из батарей Zendure.
Zendure EV Guard решает эту проблему автоматически. Как только зарядка машины обнаружена, программа ставит батареи на паузу. Когда зарядка заканчивается, она снова их активирует. Просто, автоматически, без риска.
Как это работает ?
1. Обнаружение
Твой Shelly Pro 3EM (или Smappee) измеряет потребление. Когда мощность превышает порог (например: 5000W), программа понимает, что твоя машина заряжается.
2. Защита
Батареи Zendure мгновенно переходят в режим OFF. Они больше не разряжаются, циклы сохраняются.
3. Возобновление
Зарядка закончена ? Программа автоматически активирует батареи с твоими исходными настройками. Никаких действий вручную.
🔒 100% безопасно для твоих батарей
Zendure EV Guard использует исключительно локальный HTTP API твоего хаба Zendure. Он изменяет только две настройки, те самые, которые ты видишь в приложении Zendure : minSoc (нижний предел разряда) и outputLimit (выходная мощность). Чтобы поставить батареи на паузу, он поднимает minSoc до 100% и снижает выходную мощность до 0 W. Чтобы возобновить работу, он восстанавливает твои обычные значения.
Почему две ? Потому что одной не всегда достаточно. Если твой хаб работает в режиме HEMS, иногда он сам открывает выход во время паузы. Программа замечает это через несколько секунд и закрывает его. Проверено у меня дома 22 августа 2026 года, батарея на 30%, машина на 18 kW : два открытия, закрытые через 10 и затем 5 секунд, всего 2 Wh.
Никаких изменённых прошивок, никакого облачного доступа, никакого риска. Это ровно то же самое, как если бы ты вручную менял настройку в приложении Zendure, только автоматически и в нужный момент.
Новое в версии 1.3.12
- Программа говорит по-французски. Всё, что вы читаете (письма, Pushover, Telegram, отчёты о зарядке), существует на французском и английском. Один ключ конфигурации,
Messages:Language, и всё. Технические журналы намеренно остаются на английском. - Отчёт после каждой зарядки. Сколько кВт·ч прошло через счётчик, сколько ушло в автомобиль, длительность, пик, среднее значение. И ориентировочная стоимость, если вы укажете цену своего кВт·ч в
Energy:PricePerKwhCents. - Утечка во время паузы измеряется и устраняется. Хаб в режиме HEMS может снова открыть выход во время паузы. Программа это видит, фиксирует, закрывает выход и предупреждает вас, если это продолжается.
- В архиве есть всё необходимое для установки. Скрипт для Linux, скрипт для macOS, скрипт для Windows, а также руководство пользователя на французском и английском. Больше не нужно вручную копировать файл службы.
- Пауза на всякий случай, если счётчик замолчал. Ослепнув, программа больше не может увидеть, как ваш автомобиль подключается: она прячет батареи и выпускает их при первом корректном измерении.
- Ваши батареи снова вводятся в работу перед остановкой, в том числе когда программу останавливает система.
Требования
| Оборудование | Подробности |
|---|---|
| Zendure SolarFlow 2400 AC | Хаб с включённым локальным HTTP API (порт 80) |
| Shelly Pro 3EM или Smappeeтребуется 1 | Токовые клещи (Shelly, в реальном времени) или энергетический монитор Smappee (облачный API, интервалы по 5 минут) для измерения потребления |
| Wallbox / зарядная станция | Любая зарядная станция: обнаружение основывается на потреблении, а не на самой станции |
| ПК, сервер или NAS | Windows, Linux или macOS, программа работает в фоновом режиме 24 часа в сутки |
Установка
1. Распакуйте архив
Извлеките содержимое ZIP-файла в выбранную вами папку, например:
- Windows :
C:\ZendureEvGuard\ - Linux :
/home/ZendureEvGuard/ - macOS :
/Applications/ZendureEvGuard/
2. Права на выполнение (только Linux / macOS)
В Linux и macOS нужно сделать файл исполняемым перед его запуском :
chmod +x ZendureEvGuard
./ZendureEvGuard3. Настройте appsettings.json
Откройте файл appsettings.json, расположенный рядом с исполняемым файлом, и заполните свои параметры (см. раздел ниже).
4. Запустите программу
# Windows
ZendureEvGuard.exe
# Linux / macOS
./ZendureEvGuardПри запуске программа выводит информацию о подключении. Используйте P, чтобы поставить её на паузу вручную, R, чтобы продолжить, и Ctrl+C дважды, чтобы корректно остановить.
5. Установите его как службу (рекомендуется)
Программа защищает ваши батареи только пока работает. Начиная с версии 1.3.12, архив содержит скрипт для каждой системы : он устанавливает службу, включает её при запуске системы и запускает её из папки, в которую вы распаковали архив. Ничего больше никуда не копируется.
# Linux
sudo sh install-linux.sh
# macOS
sudo sh install-macos.sh
# Windows (PowerShell от имени администратора)
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1В Windows служба работает под учётной записью SYSTEM, у которой другое пространство данных, чем у вашей сессии : обязательно укажите Subscription.SecretKey в appsettings.json до установки.
Файл README.txt, который входит в архив, подробно описывает каждую команду, удаление и обновление. А в USER_GUIDE_FR.md собраны все настройки, офлайн.
Предпочитаешь написать сервис сам? В Linux вот юнит, который устанавливает скрипт. Две строки здесь не для красоты: TimeoutStopSec=120 даёт программе время вернуть твои батареи в рабочее состояние, прежде чем systemd её убьёт, а network-online.target не даёт ей запуститься, пока сеть действительно не будет доступна.
[Unit]
Description=ZendureEvGuard - EV Charging Battery Protection Daemon
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/ZendureEvGuard
ExecStart="/home/ZendureEvGuard/ZendureEvGuard"
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
SyslogIdentifier=zendure-evguard
Environment=DOTNET_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.targetДальше обычные команды:
sudo systemctl daemon-reload
sudo systemctl enable --now zendure-evguard
# Voir le statut
sudo systemctl status zendure-evguard
# Voir les logs en temps reel
sudo journalctl -u zendure-evguard -f
# Redemarrer apres une mise a jour
sudo systemctl restart zendure-evguardНе указывай отдельный User=, не подумав как следует: программа записывает свои журналы и состояние паузы рядом с исполняемым файлом, а учётная запись без прав на эту папку заставляет её упасть при первом перезапуске.
Настройка: appsettings.json
Вот все параметры, которые можно настроить. Секции Shelly и ZendureDevice обязательны.
Сообщения новое в 1.3.12
Язык всего, что ты читаешь: писем, Pushover, Telegram, отчётов о завершении зарядки. Технические журналы остаются на английском, чтобы сообщение об ошибке можно было найти.
| Параметр | Описание | По умолчанию |
|---|---|---|
Language | Язык сообщений: "en" или "fr". Любое другое значение переключается на английский, не препятствуя запуску | "en" |
Обратите внимание на размещение: этот ключ должен находиться под секцией Messages, никогда не в корне файла. В Linux ключ Language, помещённый в корень, перезаписывается переменной окружения LANGUAGE системы, и ваши сообщения снова переходят на английский без предупреждения.
"Messages": {
"Language": "fr"
}⚡ Shelly требуется
Настройка вашего Shelly Pro 3EM. Это датчик, который измеряет потребление электроэнергии в вашем доме.
| Параметр | Описание | Пример |
|---|---|---|
Enabled | Активировать Shelly как источник измерений | true |
Host | IP-адрес вашего Shelly Pro 3EM в локальной сети | "192.168.1.50" |
UseDigestAuth | Активируйте, если вы защитили свой Shelly паролем | false |
Username | Имя пользователя (если аутентификация активирована) | "admin" |
Password | Пароль (если аутентификация активирована) | "monmotdepasse" |
Зарядная станция Smappee необязательно
Энергетическая зарядная станция Smappee может использоваться двумя способами:
- В качестве источника обнаружения EV (альтернатива Shelly): если Shelly отключён, Smappee становится источником измерения мощности для обнаружения зарядки EV. Обнаружение выполняется через облачный API Smappee (блоки по 5 минут, менее оперативно, чем Shelly в реальном времени).
- Параллельно с Shelly: если Shelly активен в качестве источника обнаружения, Smappee всё равно можно активировать, чтобы постоянно отображать в логах информацию о потреблении (солнечная энергия, дом, сеть) и о вашей зарядной станции Smappee EV Wall (мощность зарядки, состояние и т. д.).
| Параметр | Описание | Пример |
|---|---|---|
Enabled | Включить Smappee (источник обнаружения, если Shelly отключён, или отображение информации о потреблении/зарядной станции EV параллельно) | false |
ClientId | ID клиента вашего приложения Smappee (API v3) | "votre-client-id" |
ClientSecret | Секрет клиента вашего приложения Smappee | "votre-client-secret" |
Username | Имя пользователя вашей учётной записи Smappee | "user@email.com" |
Password | Пароль вашей учётной записи Smappee | "motdepasse" |
ServiceLocationId | ID вашего местоположения Smappee (виден в панели управления Smappee, это не серийный номер) | "190802" |
PollingIntervalSeconds | Периодичность обращения к API Smappee | 30 |
Батарея Zendure требуется
Настройка вашего хаба Zendure SolarFlow 2400 AC или других моделей. IP-адрес находится в приложении Zendure.
| Параметр | Описание | Пример |
|---|---|---|
Host | IP-адрес вашего хаба Zendure в локальной сети | "192.168.1.127" |
Port | HTTP-порт локального API (по умолчанию 80) | 80 |
DefaultOutputLimit | Максимальная выходная мощность в ваттах, которую нужно восстановить после зарядки EV | 2400 |
DefaultMinSoc | Минимальный уровень разряда, который нужно восстановить после зарядки: уровень, ниже которого ваши батареи больше не будут разряжаться (значение умножается на 10: 100 = 10%, 200 = 20%). Это не максимальный уровень заряда. | 100 |
TimeoutSeconds | Тайм-аут для запросов к хабу | 10 |
💡 Что такое DefaultMinSoc
Этот параметр определяет нижний предел разряда ваших батарей: уровень, ниже которого хаб больше не позволит им разряжаться. В API Zendure значение умножается на 10:
100= батареи могут разрядиться до 10%200= батареи могут разрядиться до 20%500= батареи останавливаются на уровне 50%, и половина вашей ёмкости больше ни на что не годится
Не путайте его с верхним пределом заряда. Уровень, на котором ваши батареи прекращают заряжаться, задаётся параметром socSet, это другая настройка, которую вы видите в приложении Zendure. Поэтому установить здесь 950 означает не «заряжать до 95%», а «никогда не опускаться ниже 95%»: ваши батареи становятся бесполезными. Начиная с версии 1.3.0 программа отказывается запускаться со значением вне диапазона от 1 до 999 и предупреждает вас при значении выше 500.
Выбирайте сами! Чем ниже значение, тем больше вы используете свои батареи; чем оно выше, тем бережнее вы относитесь к ячейкам, жертвуя доступной ёмкостью. Большинство пользователей выбирают между 100 (10%) и 200 (20%).
🚗 EvDetection
Настройки обнаружения зарядки вашего электромобиля. Алгоритм использует гистерезис: для подтверждения зарядки нужно несколько последовательных показаний выше порога, а для подтверждения остановки, несколько показаний ниже него.
| Параметр | Описание | По умолчанию |
|---|---|---|
PowerThresholdWatts | Порог мощности (в ваттах), выше которого программа считает, что автомобиль заряжается. Подстройте его под свою wallbox. | 5000 |
ConfirmationReadings | Количество последовательных показаний выше порога для подтверждения начала зарядки | 2 |
ReleaseReadings | Количество последовательных показаний ниже порога для подтверждения окончания зарядки (24 = ~2 минуты при 5 с/показание) | 24 |
PollingIntervalSeconds | Частота измерений в секундах | 5 |
PauseOnSourceUnreachableMinutes | Новое в версии 1.3.0. Время, в течение которого счётчик может оставаться недоступным, прежде чем батареи будут поставлены на паузу в целях предосторожности: ослепнув, программа больше не может увидеть, как вы подключаете автомобиль. Пауза снимается сразу после первого корректного измерения. Укажите 0, чтобы отключить эту защиту. | 3 |
NotifyPrecautionaryPauseAfterMinutes | Защитная пауза применяется сразу, но уведомление о ней вы получите только по истечении этого времени: трёхсекундное мигание счётчика не стоит письма | 30 |
SourceUnreachableReleaseMinutes | Время до снятия защитной паузы, когда счётчик всё ещё молчит | 10 |
ReleaseHysteresisWatts | Запас ниже порога для повторного прохождения с целью подтверждения окончания зарядки. Предотвращает метания туда-сюда, когда потребление колеблется прямо вокруг порога | 500 |
PostResumeCooldownSeconds | Задержка после возобновления с игнорированием нового обнаружения | 60 |
Energy новое в 1.3.12
В конце каждой зарядки программа сообщает, сколько кВт⋅ч прошло. Укажите ей цену вашего кВт⋅ч, и она добавит сумму. Это ориентировочно, а не счёт: никто не измеряет саму зарядную станцию, и цена фиксирована, тогда как ваша, возможно, нет.
Я думаю об использовании в такой ситуации: у вас подключаются несколько машин, и каждая должна знать, сколько она потребила.
| Параметр | Описание | По умолчанию |
|---|---|---|
PricePerKwhCents | Цена кВт⋅ч в целых центах (28 = 0,28 EUR). Укажите 0, чтобы ничего не отображать. Число с запятой отклоняется и читается как 0, не препятствуя запуску | 28 |
В отчёте указаны две энергии. Измеренная счётчиком, которая является фактом. И оценочная доля автомобиля, из которой вычитается обычное потребление дома: это оценка, и максимум, когда ваши панели экспортировали энергию в момент подключения.
Charge terminee : 1h03 | 11,30 kWh au compteur (3,16 EUR) |
~11,30 kWh pour le vehicule (3,16 EUR) | pointe 14627 W | moyenne 11169 W📬 Уведомление опционально
Получайте письма, когда ваши батареи ставятся на паузу, возобновляют работу или в случае ошибки. Настройте свой SMTP-сервер.
| Параметр | Описание | По умолчанию |
|---|---|---|
Enabled | Включить уведомления по email | false |
SmtpHost | SMTP-сервер (например: smtp.gmail.com) | "" |
SmtpPort | Порт SMTP | 587 |
UseSsl | Использовать TLS/SSL | true |
Username / Password | Учётные данные SMTP | "" |
FromAddress | Адрес email отправителя | "" |
ToAddress | Получатель(и), разделённые символом ; при указании нескольких | "" |
RateLimitMinutes | Минимальный интервал между двумя оповещениями (защита от спама) | 15 |
📴 Pushover необязательно
Push-уведомления на ваш телефон через Pushover. Создайте приложение на pushover.net, чтобы получить свой API Token.
| Параметр | Описание |
|---|---|
Enabled | Включить Pushover (true / false) |
ApiToken | API-токен вашего приложения Pushover |
UserKey | Ваш пользовательский ключ Pushover |
RateLimitMinutes | Минимальный интервал между оповещениями (по умолчанию: 15) |
💬 Telegram необязательно
Уведомления через Telegram-бота. Создайте бота с помощью @BotFather и получите свой Chat ID.
| Параметр | Описание |
|---|---|
Enabled | Включить Telegram (true / false) |
Bots | Список ботов. У каждого есть своё поле Name, свой BotToken и свой список ChatIds. Именно это позволяет предупреждать разных людей в разных группах |
RateLimitMinutes | Минимальный интервал между оповещениями (по умолчанию: 15) |
Начиная с версии 1.2.0, ты можешь одновременно предупреждать несколько групп: двух человек через одного бота, ещё троих через второго. Каждая отправка изолирована, недоступный получатель больше не мешает остальным получить сообщение.
"Telegram": {
"Enabled": true,
"RateLimitMinutes": 15,
"Bots": [
{
"Name": "Famille",
"BotToken": "123456:AAExxxxxxxxxxxxxxxxxxxx",
"ChatIds": [ "11111111", "22222222" ]
},
{
"Name": "Voisins",
"BotToken": "789012:BBEyyyyyyyyyyyyyyyyyyyy",
"ChatIds": [ "33333333", "44444444", "55555555" ]
}
]
}Старая форма, с одним BotToken и несколькими ChatId, разделёнными точками с запятой, продолжает работать. Если ты ничего не меняешь в своей конфигурации, уведомления продолжают приходить точно так же, как раньше.
Мониторинг необязательно
| Параметр | Описание | По умолчанию |
|---|---|---|
HealthCheckIntervalSeconds | Частота проверки доступности устройств | 30 |
LogStatusIntervalSeconds | Частота записи полного статуса в файлы логов | 300 |
PostResumeGuardSeconds | Продолжительность проверки программой того, что хаб сохранил ваши настройки после возобновления работы | 300 |
DeviceUnreachableAlertMinutes | Продолжительность недоступности устройства, по истечении которой вы получите оповещение | 60 |
Обновление необязательно
Начиная с версии 1.2.0 программа больше не обновляется автоматически. Она раз в час проверяет, существует ли более новая версия, и просто предупреждает вас: каждый час в логах появляется напоминание, пока вы не установите новую версию, и одно сообщение в настроенных вами каналах со ссылкой на прямое скачивание.
Замена бинарного файла сервиса, который защищает ваши батареи во время работы, это самый рискованный шаг в продукте. Пусть именно вы решаете, когда это делать. Старые ключи AutoUpdateEnabled и CheckIntervalHours больше не читаются: можете оставить их в своём файле, они игнорируются.
| Параметр | Описание | По умолчанию |
|---|---|---|
CheckEnabled | Проверять каждый час наличие более новой версии | true |
NotifyOnNewVersion | Отправлять сообщение в ваши каналы уведомлений при первом обнаружении версии. Только один раз для каждой версии, без повторных уведомлений | true |
Лицензия после пробного периода
После 30-дневного пробного периода добавьте свой секретный ключ, чтобы активировать лицензию PRO. Ваш ключ находится в вашей учётной записи по адресу в правом верхнем углу > «Моя учётная запись». Лицензия обновляется автоматически в фоновом режиме.
| Параметр | Описание | Пример |
|---|---|---|
SecretKey | Ваш уникальный секретный ключ (GUID) из вашей учётной записи digital3d.com. Оставьте пустым, чтобы использовать пробный режим. | d79d24cc-eb02-48d7-94f8-xxxxxxxxxxxx |
Пример минимальной конфигурации
Вот готовый к использованию пример. Просто замените IP-адреса на адреса ваших устройств :
{
"Messages": {
"Language": "fr"
},
"Energy": {
"PricePerKwhCents": 28
},
"Shelly": {
"Enabled": true,
"Host": "192.168.1.50"
},
"ZendureDevice": {
"Host": "192.168.1.127",
"Port": 80,
"DefaultOutputLimit": 2400,
"DefaultMinSoc": 100
},
"EvDetection": {
"PowerThresholdWatts": 5000
},
"Subscription": {
"SecretKey": "d79d24cc-eb02-48d7-94f8-xxxxxxxxxxxx"
}
}С этой конфигурацией программа следит за вашим Shelly, обнаруживает любое потребление выше 5000W (например), и восстанавливает заряд батарей до минимума в 10% (100 ÷ 10) с максимальной выходной мощностью 2400W. Раздел Subscription по умолчанию пуст : программа работает в пробном режиме в течение 30 дней. Чтобы активировать лицензию PRO, добавьте свой секретный ключ из аккаунта в правом верхнем углу.
Бесплатный пробный период и подписка
🎉 30 дней бесплатного пробного периода, без обязательств !
Скачайте Zendure EV Guard и тестируйте его в течение полных 30 дней, ничего не платя и без ограничений по функциональности. Вы получите доступ к 100% функций, чтобы убедиться, что программа идеально подходит для вашей установки.
По истечении 30 дней для продолжения использования программы необходима подписка Digital3D. Одна подписка даёт вам доступ ко всем приложениям Digital3D (CompactForIA, AutoMouseMove, Zendure EV Guard и т. д.).
🔑 Как активировать лицензию
- Оформите подписку на "One for All"
- Войдите в свой аккаунт на digital3d.com и скопируйте свой секретный ключ (уникальный идентификатор в формате GUID, например :
f89f26cc-eb03-48d7-94f8-xxxxxxxxxxxx) - Откройте файл
appsettings.jsonи добавьте свой ключ в разделSubscription:"Subscription": { "SecretKey": "votre-clef-secrete-guid" } - Перезапустите программу : лицензия PRO активируется автоматически и продлевается без каких-либо действий с вашей стороны.
Готов защитить свои батареи?
Скачай бесплатно, настрой за 5 минут и спи спокойно.
Подписка « One for All » : одна подписка для всех приложений Digital3D.
Join the conversation
You need an account to comment on this article. Creating one is free and takes under a minute.
No comments yet.