Zendure EV Guard
Bescherm je Zendure-batterijen tijdens het opladen van je elektrische auto
Compatibel met Zendure SolarFlow 2400 AC • Shelly Pro 3EM • Smappee • Windows, Linux, macOS
Heb je Zendure-batterijen en een elektrische auto?
Je weet het: wanneer je auto op de wallbox wordt aangesloten, zuigt hij alles op. Je Zendure-batterijen lopen razendsnel leeg, de cycli stapelen zich op en de levensduur van je kostbare cellen smelt als sneeuw voor de zon.
Als je auto een bedrijfswagen is en de elektriciteit door je werkgever wordt betaald, is het zonde om je batterijen leeg te trekken om hem op te laden terwijl je 's avonds niets meer overhoudt voor het eigen verbruik van je huis.
Een ander scenario: zelfs als het niet om een bedrijfswagen gaat, wil je misschien gewoon voorkomen dat je batterijen leeglopen tijdens het opladen, zodat je optimaal kunt profiteren van de elektriciteit die je zonnepanelen in volle zon produceren, zonder uit je Zendure-batterijen te putten.
Zendure EV Guard lost dit probleem automatisch op. Zodra het opladen van je auto wordt gedetecteerd, zet het programma je batterijen op pauze. Wanneer het opladen klaar is, activeert het ze opnieuw. Eenvoudig, automatisch, zonder risico.
Hoe werkt het?
1. Detectie
Je Shelly Pro 3EM (of Smappee) meet het verbruik. Wanneer het vermogen de drempel overschrijdt (bijv.: 5000 W), weet het programma dat je auto aan het opladen is.
2. Bescherming
De Zendure-batterijen schakelen onmiddellijk over naar OFF-modus. Ze ontladen niet meer, je cycli blijven behouden.
3. Hervatting
Klaar met opladen? Het programma activeert je batterijen automatisch opnieuw met je oorspronkelijke instellingen. Geen handmatige tussenkomst.
🔒 100% veilig voor je batterijen
Zendure EV Guard gebruikt uitsluitend de lokale HTTP-API van je Zendure-hub. Het raakt slechts twee instellingen aan, precies dezelfde die je in de Zendure-app ziet: minSoc (de ontladingsondergrens) en de outputLimit (het uitgangsvermogen). Om te pauzeren verhoogt het minSoc naar 100% en verlaagt het de uitvoer naar 0 W. Om te hervatten zet het je gebruikelijke waarden terug.
Waarom allebei? Omdat één ervan niet altijd volstaat. Als je hub in HEMS-modus draait, gebeurt het soms dat hij tijdens de pauze vanzelf zijn uitgang weer opent. Het programma merkt dat binnen enkele seconden en sluit hem weer. Meting bij mij thuis op 22 augustus 2026, batterij op 30%, auto op 18 kW: twee keer geopend, na 10 en vervolgens 5 seconden weer gesloten, in totaal 2 Wh.
Geen aangepaste firmware, geen cloudtoegang, geen risico. Het is precies hetzelfde als wanneer je de instelling handmatig in de Zendure-app zou wijzigen, maar dan automatisch en op het juiste moment.
Nieuw in 1.3.12
- Het programma spreekt Frans. Alles wat je leest (mails, Pushover, Telegram, laadrapporten) bestaat in het Frans en in het Engels. Eén configuratiesleutel,
Messages:Language, en dat is alles. De technische logboeken blijven bewust in het Engels. - Een rapport aan het einde van elke laadbeurt. Hoeveel kWh er door de meter zijn gegaan, hoeveel voor de auto, de duur, de piek, het gemiddelde. En de indicatieve kostprijs, als je de prijs van je kWh opgeeft in
Energy:PricePerKwhCents. - Het pauzelek wordt gemeten en gedicht. Een hub in HEMS-modus kan zijn uitgang tijdens de pauze opnieuw openen. Het programma merkt het, meet het, sluit het en waarschuwt je als het blijft duren.
- Het archief bevat alles om te installeren. Een script voor Linux, een voor macOS, een voor Windows, plus de gebruikershandleiding in het Frans en in het Engels. Je hoeft niet langer handmatig een servicebestand over te typen.
- Een voorzorgspauze als de meter stilvalt. Blind kan het programma niet meer zien dat je auto wordt aangesloten : het brengt de batterijen in veiligheid en geeft ze vrij bij de eerste geldige meting.
- Je batterijen worden vóór het stoppen weer in gebruik genomen, ook wanneer het systeem het programma stopt.
Vereisten
| Uitrusting | Details |
|---|---|
| Zendure SolarFlow 2400 AC | Hub met geactiveerde lokale HTTP-API (poort 80) |
| Shelly Pro 3EM of Smappee1 vereist | Stroomtang (Shelly, realtime) of Smappee-energiemonitor (cloud-API, blokken van 5 min) om het verbruik te meten |
| Wallbox / Laadpaal | Om het even welke laadpaal : de detectie is gebaseerd op het verbruik, niet op de laadpaal zelf |
| PC, server of NAS | Windows, Linux of macOS, het programma draait 24 uur per dag op de achtergrond |
Installatie
1. Pak het archief uit
Pak de inhoud van het ZIP-bestand uit in de map van je keuze, bijvoorbeeld :
- Windows :
C:\ZendureEvGuard\ - Linux :
/home/ZendureEvGuard/ - macOS :
/Applications/ZendureEvGuard/
2. Uitvoeringsrechten (alleen Linux / macOS)
Op Linux en macOS moet je het bestand uitvoerbaar maken voordat je het start :
chmod +x ZendureEvGuard
./ZendureEvGuard3. Configureer appsettings.json
Open het bestand appsettings.json dat naast het uitvoerbare bestand staat en vul je instellingen in (zie de onderstaande sectie).
4. Start het programma
# Windows
ZendureEvGuard.exe
# Linux / macOS
./ZendureEvGuardHet programma toont de verbindingsinformatie bij het opstarten. Gebruik P om handmatig te pauzeren, R om te hervatten, en Ctrl+C twee keer om netjes te stoppen.
5. Installeer het als service (aanbevolen)
Het programma beschermt je batterijen alleen als het draait. Sinds 1.3.12 bevat het archief een script per systeem : het installeert de service, activeert die bij het opstarten en start die, vanuit de map waar je het hebt uitgepakt. Er wordt niets elders gekopieerd.
# Linux
sudo sh install-linux.sh
# macOS
sudo sh install-macos.sh
# Windows (PowerShell en tant qu'administrateur)
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1Op Windows draait de service onder het SYSTEM-account, dat niet dezelfde gegevensruimte heeft als je sessie : vul Subscription.SecretKey dus goed in in appsettings.json voordat je installeert.
Het bestand README.txt dat in het archief is meegeleverd, geeft uitleg bij elk commando, de de-installatie en de update. En USER_GUIDE_FR.md bevat alle instellingen, offline.
Schrijf je de service liever zelf? Op Linux is dit de unit die het script installeert. Twee regels zijn niet decoratief: TimeoutStopSec=120 geeft het programma de tijd om je batterijen weer in gebruik te nemen voordat systemd het afschiet, en network-online.target voorkomt dat het start voordat het netwerk er echt is.
[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.targetDaarna de gebruikelijke commando's:
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-evguardVoeg niet zomaar een speciale User= toe zonder er eerst over na te denken: het programma schrijft zijn logs en zijn pauzestatus naast het uitvoerbare bestand, en een account zonder rechten op die map laat het bij de eerste herstart mislukken.
Configuratie: appsettings.json
Hier zijn alle parameters die je kunt configureren. De secties Shelly en ZendureDevice zijn verplicht.
Berichten nieuw in 1.3.12
De taal van alles wat je leest: mails, Pushover, Telegram, rapporten na het opladen. De technische logs blijven in het Engels, zodat een foutmelding vindbaar blijft.
| Parameter | Beschrijving | Standaard |
|---|---|---|
Language | Taal van de berichten: "en" of "fr". Elke andere waarde valt terug op het Engels, zonder het opstarten te verhinderen | "en" |
Let op de plaatsing: deze sleutel komt onder de sectie Messages, nooit in de hoofdmap van het bestand. Op Linux wordt een sleutel Language in de hoofdmap overschreven door de omgevingsvariabele LANGUAGE van het systeem, en je berichten springen zonder waarschuwing weer terug naar het Engels.
"Messages": {
"Language": "fr"
}⚡ Shelly vereist
Configuratie van je Shelly Pro 3EM. Dit is de sensor die het elektriciteitsverbruik van je huis meet.
| Parameter | Beschrijving | Voorbeeld |
|---|---|---|
Enabled | De Shelly als meetbron inschakelen | true |
Host | IP-adres van je Shelly Pro 3EM op je lokale netwerk | "192.168.1.50" |
UseDigestAuth | Inschakelen als je je Shelly met een wachtwoord hebt beveiligd | false |
Username | Gebruikersnaam (als auth actief is) | "admin" |
Password | Wachtwoord (als auth actief is) | "monmotdepasse" |
🔌 Smappee-laadpaal optioneel
De energie laadpaal Smappee kan op twee manieren worden gebruikt :
- Als bron voor EV-detectie (alternatief voor de Shelly): als de Shelly uitgeschakeld is, wordt Smappee de bron van de vermogensmeting om het laden van de EV te detecteren. De detectie gebeurt via de Smappee-cloud-API (blokken van 5 minuten, minder reactief dan de Shelly in realtime).
- Parallel aan de Shelly: als de Shelly actief is als detectiebron, kan Smappee toch actief blijven om continu de verbruiksinformatie (zonne-energie, huis, netwerk) en die van je Smappee EV Wall-laadpaal (laadvermogen, status, enz.) in de logs weer te geven.
| Parameter | Beschrijving | Voorbeeld |
|---|---|---|
Enabled | Smappee inschakelen (detectiebron als Shelly uitgeschakeld is, of weergave van verbruiksinformatie/EV-laadpaal parallel) | false |
ClientId | Client-ID van je Smappee-applicatie (API v3) | "votre-client-id" |
ClientSecret | Client Secret van je Smappee-applicatie | "votre-client-secret" |
Username | Gebruikersnaam van je Smappee-account | "user@email.com" |
Password | Wachtwoord van je Smappee-account | "motdepasse" |
ServiceLocationId | ID van je Smappee-locatie (zichtbaar in het Smappee-dashboard, het is niet het serienummer) | "190802" |
PollingIntervalSeconds | Frequentie waarmee de Smappee-API wordt bevraagd | 30 |
🔋 Zendure-batterij vereist
Configuratie van je Zendure SolarFlow 2400 AC-hub of andere. Het IP-adres vind je in de Zendure-app.
| Parameter | Beschrijving | Voorbeeld |
|---|---|---|
Host | IP-adres van je Zendure-hub op het lokale netwerk | "192.168.1.127" |
Port | HTTP-poort van de lokale API (standaard 80) | 80 |
DefaultOutputLimit | Maximaal uitgangsvermogen in watt dat na het EV-laden moet worden hersteld | 2400 |
DefaultMinSoc | Ondergrens voor ontlading die na het laden moet worden hersteld: het niveau waaronder je batterijen niet meer ontladen (de waarde is ×10: 100 = 10%, 200 = 20%). Dit is niet het maximale laadniveau. | 100 |
TimeoutSeconds | Wachttijd voor aanvragen naar de hub | 10 |
De DefaultMinSoc begrijpen
Deze parameter bepaalt de ontlaadvloer van je batterijen : het niveau waaronder de hub ze niet meer verder laat leeglopen. De waarde wordt in de Zendure-API vermenigvuldigd met 10 :
100= de batterijen kunnen dalen tot 10%200= de batterijen kunnen dalen tot 20%500= de batterijen stoppen bij 50%, en de helft van je capaciteit dient nergens meer voor
Niet te verwarren met de laadlimiet. Het niveau waarop je batterijen stoppen met laden, is socSet, een andere instelling, die je in de Zendure-app ziet. Hier 950 instellen betekent dus niet "laden tot 95%" maar "nooit onder 95% komen" : je batterijen worden onbruikbaar. Sinds 1.3.0 weigert het programma te starten met een waarde buiten 1 tot 999, en waarschuwt het je boven 500.
De keuze is aan jou ! Hoe lager de waarde, hoe meer je je batterijen gebruikt ; hoe hoger ze is, hoe meer je de cellen ontziet, ten koste van de beschikbare capaciteit. De meeste gebruikers kiezen tussen 100 (10%) en 200 (20%).
EvDetection
Instellingen voor de detectie van het laden van je elektrische voertuig. Het algoritme gebruikt een hysterese : er zijn meerdere opeenvolgende metingen boven de drempel nodig om het laden te bevestigen, en meerdere metingen eronder om de stop te bevestigen.
| Parameter | Beschrijving | Standaard |
|---|---|---|
PowerThresholdWatts | Vermogensdrempel (in watt) waarboven het programma ervan uitgaat dat een auto aan het laden is. Pas deze aan je wallbox aan. | 5000 |
ConfirmationReadings | Aantal opeenvolgende metingen boven de drempel om het begin van het laden te bevestigen | 2 |
ReleaseReadings | Aantal opeenvolgende metingen onder de drempel om het einde van het laden te bevestigen (24 = ~2 minuten bij 5s/meting) | 24 |
PollingIntervalSeconds | Meetfrequentie in seconden | 5 |
PauseOnSourceUnreachableMinutes | Nieuw in 1.3.0. Duur waarin de meter onbereikbaar mag blijven voordat de batterijen uit voorzorg worden gepauzeerd: blind kan het programma niet meer zien dat je auto wordt aangesloten. De pauze wordt opgeheven zodra de eerste geldige meting binnenkomt. Stel 0 in om deze beveiliging uit te schakelen. | 3 |
NotifyPrecautionaryPauseAfterMinutes | Een voorzorgspauze wordt meteen toegepast, maar je krijgt pas een melding als deze duur wordt overschreden: een meter die drie seconden knippert, is geen mail waard | 30 |
SourceUnreachableReleaseMinutes | Duur waarna een voorzorgspauze wordt opgeheven terwijl de meter nog altijd stil blijft | 10 |
ReleaseHysteresisWatts | Marge onder de drempel die opnieuw moet worden bereikt om het einde van het laden te bevestigen. Voorkomt heen-en-weer schakelen wanneer het verbruik net rond de drempel schommelt | 500 |
PostResumeCooldownSeconds | Vertraging na een hervatting waarin een nieuwe detectie wordt genegeerd | 60 |
Energy nieuw in 1.3.12
Aan het einde van elke laadbeurt zegt het programma hoeveel kWh er zijn verbruikt. Geef het je kWh-prijs en het telt het bedrag erbij op. Het is indicatief, geen factuur: niemand meet de laadpaal zelf, en de prijs ligt vast terwijl die van jou dat misschien niet is.
Het gebruik waar ik aan denk: meerdere auto's worden bij jou thuis aangesloten, en elke auto moet weten wat hij heeft verbruikt.
| Parameter | Beschrijving | Standaard |
|---|---|---|
PricePerKwhCents | Prijs van de kWh in hele centen (28 = 0,28 EUR). Vul 0 in om niets weer te geven. Een getal met een komma wordt geweigerd en gelezen als 0, zonder het opstarten te verhinderen | 28 |
Het rapport geeft twee hoeveelheden energie weer. De energie die aan de meter is gemeten, en die is een feit. En het geschatte aandeel van het voertuig, waarbij het gewone verbruik van het huis ervan wordt afgetrokken: een schatting, en een maximum op het moment waarop je panelen energie terugleverden toen je de auto aansloot.
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 WMelding optioneel
Ontvang e-mails wanneer je batterijen pauzeren, weer beginnen, of in geval van een fout. Configureer je SMTP-server.
| Parameter | Beschrijving | Standaard |
|---|---|---|
Enabled | E-mailmeldingen inschakelen | false |
SmtpHost | SMTP-server (bv: smtp.gmail.com) | "" |
SmtpPort | SMTP-poort | 587 |
UseSsl | TLS/SSL gebruiken | true |
Username / Password | SMTP-inloggegevens | "" |
FromAddress | E-mailadres van de afzender | "" |
ToAddress | Ontvanger(s), gescheiden door ; voor meerdere | "" |
RateLimitMinutes | Minimuminterval tussen twee waarschuwingen (antispam) | 15 |
📴 Pushover optioneel
Pushmeldingen op je telefoon via Pushover. Maak een applicatie aan op pushover.net om je API Token te verkrijgen.
| Parameter | Beschrijving |
|---|---|
Enabled | Pushover inschakelen (true / false) |
ApiToken | API-token van je Pushover-applicatie |
UserKey | Je Pushover-gebruikerssleutel |
RateLimitMinutes | Minimuminterval tussen waarschuwingen (standaard: 15) |
💬 Telegram optioneel
Meldingen via een Telegram-bot. Maak een bot aan met @BotFather en haal je Chat ID op.
| Parameter | Beschrijving |
|---|---|
Enabled | Telegram activeren (true / false) |
Bots | Lijst met bots. Elke bot heeft zijn eigen Name, zijn eigen BotToken en zijn eigen lijst ChatIds. Daarmee kun je verschillende mensen in verschillende groepen waarschuwen |
RateLimitMinutes | Minimuminterval tussen waarschuwingen (standaard : 15) |
Sinds 1.2.0 kun je meerdere groepen tegelijk waarschuwen : twee mensen via een eerste bot, drie anderen via een tweede. Elke verzending staat los van de andere, een onbereikbare ontvanger verhindert niet langer dat de anderen het bericht ontvangen.
"Telegram": {
"Enabled": true,
"RateLimitMinutes": 15,
"Bots": [
{
"Name": "Famille",
"BotToken": "123456:AAExxxxxxxxxxxxxxxxxxxx",
"ChatIds": [ "11111111", "22222222" ]
},
{
"Name": "Voisins",
"BotToken": "789012:BBEyyyyyyyyyyyyyyyyyyyy",
"ChatIds": [ "33333333", "44444444", "55555555" ]
}
]
}De oude vorm, met één BotToken en ChatId's die door puntkomma's van elkaar worden gescheiden, blijft werken. Als je niets aan je configuratie verandert, blijven je meldingen precies werken zoals voorheen.
📈 Monitoring optioneel
| Parameter | Beschrijving | Standaard |
|---|---|---|
HealthCheckIntervalSeconds | Frequentie van de controle van de connectiviteit van de apparaten | 30 |
LogStatusIntervalSeconds | Frequentie waarmee de volledige status naar de logbestanden wordt gelogd | 300 |
PostResumeGuardSeconds | Duur waarin het programma controleert of de hub uw instellingen na een hervatting goed heeft behouden | 300 |
DeviceUnreachableAlertMinutes | Duur waarin een apparaat onbereikbaar is waarna je wordt gewaarschuwd | 60 |
Update optioneel
Sinds 1.2.0 wordt het programma niet meer vanzelf bijgewerkt. Het controleert één keer per uur of er een nieuwere versie bestaat, en het doet niet meer dan je waarschuwen: elk uur een herinnering in de logs zolang je de nieuwe versie niet hebt geïnstalleerd, en één enkel bericht op de kanalen die je hebt geconfigureerd, met de rechtstreekse downloadlink.
De binaire versie vervangen van een dienst die je batterijen beschermt terwijl die draait, is de meest risicovolle handeling van het product. Je kunt dus maar beter zelf beslissen wanneer dat gebeurt. De oude sleutels AutoUpdateEnabled en CheckIntervalHours worden niet meer gelezen: je kunt ze in je bestand laten staan, ze worden genegeerd.
| Parameter | Beschrijving | Standaard |
|---|---|---|
CheckEnabled | Elk uur controleren of er een recentere versie bestaat | true |
NotifyOnNewVersion | Een bericht sturen naar je meldingskanalen bij de eerste detectie van een versie. Slechts één keer per versie, nooit opnieuw | true |
🔑 Licentie na de proefperiode
Na de proefperiode van 30 dagen voeg je je geheime sleutel toe om de PRO-licentie te activeren. Je sleutel vind je in je account op rechtsboven > "Mijn account". De licentie wordt automatisch op de achtergrond vernieuwd.
| Parameter | Beschrijving | Voorbeeld |
|---|---|---|
SecretKey | Je unieke geheime sleutel (GUID) uit je account bij digital3d.com. Laat dit leeg om de proefmodus te gebruiken. | d79d24cc-eb02-48d7-94f8-xxxxxxxxxxxx |
Voorbeeld van een minimale configuratie
Hier is een gebruiksklaar voorbeeld. Vervang gewoon de IP-adressen door die van jouw apparaten :
{
"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"
}
}Met deze configuratie houdt het programma jouw Shelly in de gaten, detecteert het elk verbruik van meer dan 5000W (bij wijze van voorbeeld), en laadt het jouw batterijen weer op met een minimum van 10% (100 ÷ 10) en een maximaal uitgangsvermogen van 2400W. De sectie Subscription is standaard leeg : het programma werkt 30 dagen in proefmodus. Om de PRO-licentie te activeren, voeg je jouw geheime sleutel toe vanuit je account rechtsboven.
Gratis proefperiode & abonnement
30 dagen gratis proefperiode, zonder verplichtingen !
Download Zendure EV Guard en test het gedurende 30 volledige dagen, zonder iets te betalen en zonder beperking van de functies. Je krijgt toegang tot 100% van de functies om er zeker van te zijn dat het programma perfect bij jouw installatie past.
Na afloop van de 30 dagen is een Digital3D-abonnement nodig om het programma te blijven gebruiken. Eén enkel abonnement geeft je toegang tot alle Digital3D-toepassingen (CompactForIA, AutoMouseMove, Zendure EV Guard, enz.).
Jouw licentie activeren
- Neem een abonnement op “One for All”
- Meld je aan bij jouw account op digital3d.com en kopieer jouw geheime sleutel (een unieke identificatie in GUID-formaat, bijvoorbeeld :
f89f26cc-eb03-48d7-94f8-xxxxxxxxxxxx) - Open het bestand
appsettings.jsonen voeg jouw sleutel toe in de sectieSubscription:"Subscription": { "SecretKey": "votre-clef-secrete-guid" } - Start het programma opnieuw op : de PRO-licentie wordt automatisch geactiveerd en vernieuwd zonder dat jij iets hoeft te doen.
Klaar om je batterijen te beschermen?
Download gratis, configureer in 5 minuten, en slaap gerust.
Abonnement “ One for All ”: één abonnement voor alle Digital3D-toepassingen.
Sluit je aan bij het gesprek
U moet een account hebben om dit artikel te kunnen commentariëren. Het aanmaken is gratis en duurt minder dan een minuut.
Geen opmerkingen voor het moment.