Zendure EV Guard
Proteja suas baterias Zendure durante o carregamento do seu carro elétrico
Compatível com Zendure SolarFlow 2400 AC • Shelly Pro 3EM • Smappee • Windows, Linux, macOS
Você tem baterias Zendure e um carro elétrico?
Você sabe: quando seu carro é conectado à wallbox, ele suga tudo. Suas baterias Zendure se esvaziam em uma velocidade absurda, os ciclos se acumulam, e a vida útil das suas preciosas células derrete como neve ao sol.
Se seu carro é um veículo da empresa e a eletricidade é paga pelo seu empregador, é uma pena esvaziar suas baterias para recarregá-lo quando não vai sobrar mais nada à noite para o autoconsumo da sua casa.
Outro caso: mesmo que não se trate de um carro da empresa, talvez você simplesmente queira impedir que suas baterias se esvaziem durante o carregamento, para aproveitar plenamente a eletricidade produzida pelos seus painéis solares sob o sol forte, sem consumir suas baterias Zendure.
Zendure EV Guard resolve esse problema automaticamente. Assim que o carregamento do seu carro é detectado, o programa pausa suas baterias. Quando o carregamento termina, ele as reativa. Simples, automático, sem risco.
Como isso funciona?
1. Detecção
Seu Shelly Pro 3EM (ou Smappee) mede o consumo. Quando a potência ultrapassa o limite (ex: 5000W), o programa sabe que seu carro está carregando.
2. Proteção
As baterias Zendure entram instantaneamente no modo OFF. Elas não descarregam mais, seus ciclos são preservados.
3. Retomada
Carregamento terminado? O programa reativa suas baterias automaticamente com suas configurações originais. Nenhuma intervenção manual.
🔒 100% seguro para suas baterias
O Zendure EV Guard usa exclusivamente a API local HTTP do seu hub Zendure. Ele só mexe em duas configurações, exatamente aquelas que você vê no aplicativo Zendure: o minSoc (o limite mínimo de descarga) e o outputLimit (a potência de saída). Para pausar, ele aumenta o minSoc para 100% e reduz a saída para 0 W. Para retomar, ele restaura seus valores habituais.
Por que os dois? Porque um só nem sempre é suficiente. Se seu hub funciona no modo HEMS, às vezes ele reabre a saída sozinho durante a pausa. O programa percebe isso em poucos segundos e fecha novamente. Medição feita em casa no dia 22 de agosto de 2026, bateria a 30%, carro a 18 kW: duas aberturas, fechadas em 10 e depois 5 segundos, 2 Wh no total.
Nenhum firmware modificado, nenhum acesso à nuvem, nenhum risco. É exatamente a mesma coisa que se você alterasse a configuração manualmente no app Zendure, mas automaticamente e no momento certo.
Novidades na 1.3.12
- O programa fala francês. Tudo o que você lê (e-mails, Pushover, Telegram, relatórios de carga) existe em francês e em inglês. Uma chave de configuração,
Messages:Language, e é só. Os registros técnicos continuam em inglês, de propósito. - Um relatório no fim de cada carga. Quantos kWh passaram pelo contador, quantos foram para o carro, a duração, o pico, a média. E o custo indicativo, se você informar o preço do seu kWh em
Energy:PricePerKwhCents. - O vazamento da pausa é medido e encerrado. Um hub no modo HEMS pode reabrir sua saída durante a pausa. O programa percebe, registra, fecha, e alerta você se isso durar.
- O arquivo contém tudo para instalar. Um script para Linux, um para macOS, um para Windows, mais o guia do usuário em francês e em inglês. Não é mais preciso copiar um arquivo de serviço manualmente.
- Uma pausa de precaução se o contador ficar mudo. Cego, o programa não consegue mais ver seu carro se conectar: ele coloca as baterias em segurança e as libera na primeira medição válida.
- Suas baterias são colocadas novamente em serviço antes da parada, inclusive quando é o sistema que para o programa.
Pré-requisitos
| Equipamento | Detalhes |
|---|---|
| Zendure SolarFlow 2400 AC | Hub com API local HTTP ativada (porta 80) |
| Shelly Pro 3EM ou Smappee1 necessário | Alicate amperimétrico (Shelly, tempo real) ou monitor de energia Smappee (API na nuvem, blocos de 5 min) para medir o consumo |
| Wallbox / Carregador | Qualquer carregador: a detecção se baseia no consumo, não no próprio carregador |
| PC, Servidor ou NAS | Windows, Linux ou macOS, o programa funciona em segundo plano 24h/24 |
Instalação
1. Descompacte o arquivo
Extraia o conteúdo do arquivo ZIP para o diretório de sua escolha, por exemplo:
- Windows :
C:\ZendureEvGuard\ - Linux :
/home/ZendureEvGuard/ - macOS :
/Applications/ZendureEvGuard/
2. Permissões de execução (apenas Linux / macOS)
No Linux e no macOS, você precisa tornar o arquivo executável antes de iniciá-lo:
chmod +x ZendureEvGuard
./ZendureEvGuard3. Configure appsettings.json
Abra o arquivo appsettings.json localizado ao lado do executável e preencha suas configurações (veja a seção abaixo).
4. Inicie o programa
# Windows
ZendureEvGuard.exe
# Linux / macOS
./ZendureEvGuardO programa exibe as informações de conexão na inicialização. Use P para pausar manualmente, R para retomar, e Ctrl+C duas vezes para parar corretamente.
5. Instale-o como serviço (recomendado)
O programa só protege suas baterias se estiver em execução. Desde a 1.3.12, o arquivo compactado contém um script para cada sistema: ele instala o serviço, ativa-o na inicialização e o inicia, a partir da pasta onde você descompactou. Nada é copiado para outro lugar.
# Linux
sudo sh install-linux.sh
# macOS
sudo sh install-macos.sh
# Windows (PowerShell como administrador)
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1No Windows, o serviço é executado com a conta SYSTEM, que não tem o mesmo espaço de dados que a sua sessão: preencha corretamente Subscription.SecretKey em appsettings.json antes de instalar.
O arquivo README.txt incluído no arquivo compactado detalha cada comando, a desinstalação e a atualização. E USER_GUIDE_FR.md reúne todas as configurações, offline.
Preferes escrever o serviço tu mesmo? No Linux, esta é a unidade que o script instala. Duas linhas não são decorativas: TimeoutStopSec=120 dá tempo ao programa para voltar a pôr as tuas baterias em serviço antes que o systemd o mate, e network-online.target evita que ele arranque antes de a rede estar realmente disponível.
[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.targetE depois os comandos habituais :
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-evguardNão ponhas um User= dedicado sem pensares bem no assunto: o programa escreve os seus registos e o seu estado de pausa ao lado do executável, e uma conta sem permissões nessa pasta faz com que ele falhe no primeiro reinício.
Configuração : appsettings.json
Aqui estão todos os parâmetros que podes configurar. As secções Shelly e ZendureDevice são obrigatórias.
Mensagens novo em 1.3.12
A língua de tudo o que tu lês: e-mails, Pushover, Telegram, relatórios de fim de carregamento. Os registos técnicos continuam em inglês, para que uma mensagem de erro continue a ser pesquisável.
| Parâmetro | Descrição | Padrão |
|---|---|---|
Language | Idioma das mensagens: "en" ou "fr". Qualquer outro valor recorre ao inglês, sem impedir o arranque | "en" |
Atenção ao posicionamento: esta chave fica sob a secção Messages, nunca na raiz do ficheiro. No Linux, uma chave Language colocada na raiz é substituída pela variável de ambiente LANGUAGE do sistema, e as suas mensagens voltam ao inglês sem aviso.
"Messages": {
"Language": "fr"
}Shelly necessário
Configuração do seu Shelly Pro 3EM. É o sensor que mede o consumo elétrico da sua casa.
| Parâmetro | Descrição | Exemplo |
|---|---|---|
Enabled | Ativar o Shelly como fonte de medição | true |
Host | Endereço IP do seu Shelly Pro 3EM na sua rede local | "192.168.1.50" |
UseDigestAuth | Ativar se você protegeu o seu Shelly com uma palavra-passe | false |
Username | Nome de utilizador (se a autenticação estiver ativa) | "admin" |
Password | Palavra-passe (se a autenticação estiver ativa) | "monmotdepasse" |
Borne Smappee opcional
O carregador de energia Smappee pode ser utilizado de duas formas :
- Como fonte de deteção de VE (alternativa ao Shelly): se o Shelly estiver desativado, o Smappee passa a ser a fonte de medição de potência para detetar o carregamento de VE. A deteção é feita através da API cloud do Smappee (blocos de 5 minutos, menos reativa do que o Shelly em tempo real).
- Em paralelo com o Shelly: se o Shelly estiver ativo como fonte de deteção, o Smappee pode ainda ser ativado para apresentar continuamente as informações de consumo (solar, casa, rede) e da sua borne Smappee EV Wall (potência de carregamento, estado, etc.) nos logs.
| Parâmetro | Descrição | Exemplo |
|---|---|---|
Enabled | Ativar o Smappee (fonte de deteção se o Shelly estiver desativado, ou exibição das informações de consumo/posto de carregamento EV em paralelo) | false |
ClientId | ID do cliente da sua aplicação Smappee (API v3) | "votre-client-id" |
ClientSecret | Client Secret da sua aplicação Smappee | "votre-client-secret" |
Username | Nome de utilizador da sua conta Smappee | "user@email.com" |
Password | Palavra-passe da sua conta Smappee | "motdepasse" |
ServiceLocationId | ID da sua localização Smappee (visível no dashboard Smappee, não é o número de série) | "190802" |
PollingIntervalSeconds | Frequência de consulta da API Smappee | 30 |
🔋 Bateria Zendure obrigatório
Configuração do seu hub Zendure SolarFlow 2400 AC ou outros. O endereço IP encontra-se na aplicação Zendure.
| Parâmetro | Descrição | Exemplo |
|---|---|---|
Host | Endereço IP do seu hub Zendure na rede local | "192.168.1.127" |
Port | Porta HTTP da API local (80 por padrão) | 80 |
DefaultOutputLimit | Potência máxima de saída em watts a restaurar após o carregamento EV | 2400 |
DefaultMinSoc | Limite mínimo de descarga a restaurar após o carregamento : o nível abaixo do qual as suas baterias deixarão de descarregar (o valor é ×10 : 100 = 10%, 200 = 20%). Não é o nível máximo de carga. | 100 |
TimeoutSeconds | Tempo limite de espera para as solicitações ao hub | 10 |
Compreender o DefaultMinSoc
Este parâmetro define o limite inferior de descarga das tuas baterias: o nível abaixo do qual o hub já não as deixará descarregar. O valor é multiplicado por 10 na API Zendure:
100= as baterias podem descer até 10%200= as baterias podem descer até 20%500= as baterias param nos 50%, e metade da tua capacidade deixa de servir para alguma coisa
Não confundas com o limite superior de carga. O nível a que as tuas baterias deixam de carregar é o socSet, outra definição, aquela que vês na aplicação Zendure. Colocar 950 aqui não quer, portanto, dizer "carrega até 95%" mas sim "nunca desças abaixo de 95%" : as tuas baterias tornam-se inutilizáveis. Desde a 1.3.0, o programa recusa arrancar com um valor fora de 1 a 999 e avisa-te acima de 500.
Tu é que escolhes ! Quanto mais baixo for o valor, mais usas as tuas baterias ; quanto mais alto for, mais poupas as células, à custa da capacidade disponível. A maioria dos utilizadores escolhe entre 100 (10%) e 200 (20%).
EvDetection
Definições da deteção de carregamento do teu veículo elétrico. O algoritmo utiliza uma histerese : são necessárias várias leituras consecutivas acima do limiar para confirmar um carregamento, e várias leituras abaixo para confirmar a paragem.
| Parâmetro | Descrição | Padrão |
|---|---|---|
PowerThresholdWatts | Limite de potência (em watts) acima do qual o programa considera que um carro está carregando. Adapte-o à sua wallbox. | 5000 |
ConfirmationReadings | Número de leituras consecutivas acima do limite para confirmar o início do carregamento | 2 |
ReleaseReadings | Número de leituras consecutivas abaixo do limite para confirmar o fim do carregamento (24 = ~2 minutos a 5s/leitura) | 24 |
PollingIntervalSeconds | Frequência de medição em segundos | 5 |
PauseOnSourceUnreachableMinutes | Novo na versão 1.3.0. Duração durante a qual o medidor pode ficar inacessível antes que as baterias sejam colocadas em pausa por precaução: às cegas, o programa já não consegue ver seu carro sendo conectado. A pausa é suspensa assim que a primeira medição válida é feita. Coloque 0 para desativar essa proteção. | 3 |
NotifyPrecautionaryPauseAfterMinutes | Uma pausa de precaução é aplicada imediatamente, mas só é informada a você depois dessa duração: um medidor que pisca por três segundos não merece um e-mail | 30 |
SourceUnreachableReleaseMinutes | Duração depois da qual uma pausa de precaução é liberada enquanto o medidor continua em silêncio | 10 |
ReleaseHysteresisWatts | Margem abaixo do limite que deve ser ultrapassada para confirmar o fim do carregamento. Evita o vai e vem quando o consumo oscila bem em torno do limite | 500 |
PostResumeCooldownSeconds | Intervalo após uma retomada durante o qual uma nova detecção é ignorada | 60 |
Energia novo na 1.3.12
No fim de cada carregamento, o programa diz-lhe quantos kWh passaram. Dê-lhe o preço do seu kWh e ele acrescenta o valor. É indicativo, não é uma fatura: ninguém mede a própria estação, e o preço é fixo, embora o seu talvez não seja.
O uso em que estou a pensar: vários carros ligam-se em sua casa, e cada um tem de saber quanto consumiu.
| Parâmetro | Descrição | Predefinição |
|---|---|---|
PricePerKwhCents | Preço do kWh em cêntimos inteiros (28 = 0,28 EUR). Coloque 0 para não mostrar nada. Um número com vírgula é recusado e lido como 0, sem impedir o arranque | 28 |
O relatório quantifica duas energias. A medida no contador, que é um facto. E a parte estimada do veículo, que retira o consumo habitual da casa: uma estimativa, e um máximo quando os seus painéis estavam a exportar no momento de ligar.
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 WNotificação opcional
Receba emails quando as suas baterias entrarem em pausa, retomarem, ou em caso de erro. Configure o seu servidor SMTP.
| Parâmetro | Descrição | Padrão |
|---|---|---|
Enabled | Ativar notificações por email | false |
SmtpHost | Servidor SMTP (ex: smtp.gmail.com) | "" |
SmtpPort | Porta SMTP | 587 |
UseSsl | Usar TLS/SSL | true |
Username / Password | Credenciais SMTP | "" |
FromAddress | Endereço de email do remetente | "" |
ToAddress | Destinatário(s), separados por ; para vários | "" |
RateLimitMinutes | Intervalo mínimo entre dois alertas (anti-spam) | 15 |
📴 Pushover opcional
Notificações push no seu telefone via Pushover. Crie uma aplicação em pushover.net para obter seu API Token.
| Parâmetro | Descrição |
|---|---|
Enabled | Ativar o Pushover (true / false) |
ApiToken | Token da API da sua aplicação Pushover |
UserKey | Sua chave de usuário do Pushover |
RateLimitMinutes | Intervalo mínimo entre alertas (padrão: 15) |
💬 Telegram opcional
Notificações por meio de um bot do Telegram. Crie um bot com @BotFather e obtenha seu Chat ID.
| Parâmetro | Descrição |
|---|---|
Enabled | Ativar o Telegram (true / false) |
Bots | Lista de bots. Cada um tem seu Name, seu BotToken e sua lista ChatIds. É isso que permite avisar pessoas diferentes em grupos diferentes |
RateLimitMinutes | Intervalo mínimo entre alertas (padrão: 15) |
Desde a 1.2.0, você pode avisar vários grupos ao mesmo tempo: duas pessoas por meio de um primeiro bot, outras três por meio de um segundo. Cada envio é isolado, um destinatário que não pode ser contatado não impede mais os outros de receberem a mensagem.
"Telegram": {
"Enabled": true,
"RateLimitMinutes": 15,
"Bots": [
{
"Name": "Famille",
"BotToken": "123456:AAExxxxxxxxxxxxxxxxxxxx",
"ChatIds": [ "11111111", "22222222" ]
},
{
"Name": "Voisins",
"BotToken": "789012:BBEyyyyyyyyyyyyyyyyyyyy",
"ChatIds": [ "33333333", "44444444", "55555555" ]
}
]
}O formato antigo, com um único BotToken e ChatId separados por ponto e vírgula, continua funcionando. Se você não mudar nada na sua configuração, suas notificações continuam exatamente como antes.
Monitoring opcional
| Parâmetro | Descrição | Padrão |
|---|---|---|
HealthCheckIntervalSeconds | Frequência de verificação da conectividade dos dispositivos | 30 |
LogStatusIntervalSeconds | Frequência de registro do status completo nos arquivos de log | 300 |
PostResumeGuardSeconds | Duração durante a qual o programa verifica se o hub manteve as suas configurações após uma retomada | 300 |
DeviceUnreachableAlertMinutes | Duração da inacessibilidade de um dispositivo além da qual você é alertado | 60 |
Atualização opcional
Desde a 1.2.0, o programa já não se atualiza sozinho. Ele verifica uma vez por hora se existe uma versão mais recente, e limita-se a avisar você: um lembrete nos logs a cada hora enquanto você não tiver instalado a nova versão, e uma única mensagem nos canais que você configurou, com o link de download direto.
Substituir o binário de um serviço que protege suas baterias enquanto ele está rodando é o gesto mais arriscado do produto. Mais vale que seja você a decidir o momento. As antigas chaves AutoUpdateEnabled e CheckIntervalHours não são mais lidas: você pode deixá-las no seu arquivo, elas são ignoradas.
| Parâmetro | Descrição | Padrão |
|---|---|---|
CheckEnabled | Verificar a cada hora se existe uma versão mais recente | true |
NotifyOnNewVersion | Enviar uma mensagem para seus canais de notificação na primeira detecção de uma versão. Uma única vez por versão, nunca um novo aviso | true |
Licença após o teste
Após o período de teste de 30 dias, adicione sua chave secreta para ativar a licença PRO. Sua chave está na sua conta em no canto superior direito > "Minha conta". A licença é renovada automaticamente em segundo plano.
| Parâmetro | Descrição | Exemplo |
|---|---|---|
SecretKey | Sua chave secreta única (GUID) a partir da sua conta digital3d.com. Deixe em branco para usar o modo de teste. | d79d24cc-eb02-48d7-94f8-xxxxxxxxxxxx |
Exemplo de configuração mínima
Aqui está um exemplo pronto para usar. Basta substituir os endereços IP pelos dos seus dispositivos :
{
"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"
}
}Com esta configuração, o programa monitora o seu Shelly, detecta qualquer consumo superior a 5000W (por exemplo), e restaura as suas baterias com um mínimo de 10% (100 ÷ 10) e uma saída máxima de 2400W. A seção Subscription fica vazia por padrão : o programa funciona em modo de teste durante 30 dias. Para ativar a licença PRO, adicione a sua chave secreta a partir da sua conta no canto superior direito.
Teste gratuito & Assinatura
30 dias de teste gratuito, sem compromisso !
Baixe o Zendure EV Guard e teste-o durante 30 dias completos, sem pagar nada e sem limite de funcionalidades. Você terá acesso a 100% das funções para se certificar de que o programa corresponde perfeitamente à sua instalação.
Ao fim dos 30 dias, é necessária uma assinatura Digital3D para continuar a usar o programa. Uma única assinatura dá acesso a todas as aplicações Digital3D (CompactForIA, AutoMouseMove, Zendure EV Guard, etc.).
Como ativar a sua licença
- Faça uma assinatura em "One for All"
- Entre na sua conta em digital3d.com e copie a sua chave secreta (um identificador único no formato GUID, por exemplo :
f89f26cc-eb03-48d7-94f8-xxxxxxxxxxxx) - Abra o arquivo
appsettings.jsone adicione a sua chave na seçãoSubscription:"Subscription": { "SecretKey": "votre-clef-secrete-guid" } - Reinicie o programa : a licença PRO é ativada automaticamente e renovada sem qualquer intervenção da sua parte.
Pronto para proteger as tuas baterias?
Descarrega gratuitamente, configura em 5 minutos, e dorme descansado.
Assinatura « One for All » : uma única assinatura para todas as aplicações Digital3D.
Join the conversation
You need an account to comment on this article. Creating one is free and takes under a minute.
Nenhum comentário por enquanto.