Inleiding
In een wereld waar energiebeheer steeds belangrijker wordt, zijn slimme oplossingen zoals die van Zendure en Athom Homey onmisbaar. Zendure staat bekend om zijn krachtige en betrouwbare batterijsystemen zoals de 2400AC, SF800Pro, en Hyper 2000, Homey is een veelzijdig smart home platform en biedt de mogelijkheid om al deze componenten te automatiseren en optimaliseren. In dit topic duiken we in de mogelijkheden van het koppelen van Zendure batterijen aan Homey, en hoe je hiermee verschillende strategieën mee kan toepassen.We bespreken hoe je de hardware integreert, hoe je slimme laad- en ontlaadstrategieën toepast, en hoe je met behulp van NOM- en XOM. Maximaal voordeel haalt uit je batterijopslag en zonneproductie, waarbij het vermogen aansturen via de api, NOM en XOM nog op de to-do list staan.
Ondersteunde modellen:
- 2400AC (rest api)
- Zendure SF800Pro (rest-api)
- Zendure Hyper 2000 (via de hiervoor bestemde Zendure integratie)
- Fase 1: Basis integratie & monitoring (begin van het topic- 31-7-2025)
- Fase 2: het kunnen aansturen via de lokale API (2400AC SF800Pro)
- Fase 3: Automatisering via Flows
- Fase 4: Het koppelen van je Zendure apparatuur aan de thuismonitor van Power By The Hour koppelen.
- Fase 5: Volledige zelfvoorzienendheid (NOM / XOM)
- • Gebruik maken van dynamische tarieven (bijv. via Tibber of zonneplan)
- • Veiligheidsgrenzen instellen (SOC, laadsnelheid, etc.)
Handleiding voor het koppelen via de Zendure REST-API:
Ondertussen is @ja3 gestart met de ontwikkeling van een Homey-app waarmee het mogelijk is om de 2400AC rechtstreeks te koppelen:https://homey.app/en-nl/a...ndure/Zendure-Local/test/
Hetgeen hieronder beschreven is gemaakt met een Zendure 2400AC met firmware 1.0.4 en een Homey Pro (2023). Op de Homey dienen Homey Script, Device Capabilities en Virtuele apparaten geïnstalleerd te zijn, en moeten er drie numerieke variabelen gemaakt worden, namelijk:
Zendure_power
Zendure_SoC
Zendure_Temp
Na het toevoegen van de variabele kan je het script kopieren naar homey-script en sla dit op als Zendure RestAPI en test het script. Het script ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| const zendureIP = '192.168.x.x; // pas dit aan naar jouw eigen IP const endpoint = `http://${zendureIP}/properties/report`; async function getZendureData() { try { const response = await fetch(endpoint); if (!response.ok) throw new Error('HTTP-fout: ' + response.status); const data = await response.json(); const props = data.properties; const packs = data.packData; // Batterij SoC (%): gemiddelde van alle packs const socLevels = packs.map(p => p.socLevel || 0); const avgSoc = socLevels.length > 0 ? socLevels.reduce((a, b) => a + b, 0) / socLevels.length : 0; // Totaal laad-/ontlaadvermogen van de batterijpacks (niet gebruikt voor Zendure_Power) const totaalPower = packs.reduce((sum, p) => sum + (p.power || 0), 0); // Max temperatuur in graden Celsius (waarde is *100) const maxTempRaw = Math.max(...packs.map(p => p.maxTemp || 0)); const maxTempC = maxTempRaw / 100; // Extra info const rssi = props.rssi; const outputPower = props.outputHomePower; const gridPower = props.gridInputPower; // Bepaal Zendure_Power: laden = positief, ontladen = negatief let zendurePower = 0; if (gridPower > 0) { zendurePower = gridPower; // Laden } else if (outputPower > 0) { zendurePower = -outputPower; // Ontladen } // Log naar HomeyScript-console console.log('🔋 Gemiddeld SoC (%): ' + avgSoc.toFixed(1)); console.log('⚡ Vermogen batterijpacks (W): ' + totaalPower); console.log('🌡️ Max temperatuur (°C): ' + maxTempC.toFixed(1)); console.log('📶 Signaalsterkte (RSSI): ' + rssi); console.log('🔌 Grid input (W): ' + gridPower); console.log('🔋 Output naar huis (W): ' + outputPower); console.log('➡️ Zendure Power (W): ' + zendurePower); // --- Variabelen instellen in Homey --- try { const vars = await Homey.logic.getVariables(); // Zendure_Temp await Homey.logic.updateVariable({ id: Object.values(vars).find(v => v.name === 'Zendure_Temp').id, variable: { value: parseFloat(maxTempC.toFixed(1)) } }); console.log('Variabele Zendure_Temp bijgewerkt.'); // Zendure_SoC await Homey.logic.updateVariable({ id: Object.values(vars).find(v => v.name === 'Zendure_SoC').id, variable: { value: parseFloat(avgSoc.toFixed(1)) } }); console.log('Variabele Zendure_SoC bijgewerkt.'); // Zendure_Power (laden positief, ontladen negatief) await Homey.logic.updateVariable({ id: Object.values(vars).find(v => v.name === 'Zendure_Power').id, variable: { value: zendurePower } }); console.log('Variabele Zendure_Power bijgewerkt.'); } catch (varErr) { console.error('❌ Fout bij het bijwerken van Homey variabelen: ' + varErr.message); console.warn('Controleer of de variabelen "Zendure_Temp", "Zendure_SoC" en "Zendure_Power" bestaan in Homey Logica.'); } // --- Einde variabelen instellen --- return `SoC: ${avgSoc.toFixed(0)}% | Vermogen: ${zendurePower}W | Temp: ${maxTempC.toFixed(1)}°C`; } catch (err) { console.error('❌ Fout bij ophalen Zendure-data: ' + err.message); return 'Fout bij ophalen gegevens'; } } return await getZendureData(); |
Als de test geen foutmeldingen geeft, controleer dan of de variabelen zijn aangepast naar de actuele waardes in de Zendure app, het moet er als volgt uitzien:
:strip_exif()/f/image/azvteKOzTic2Ml227hrMO32J.png?f=user_large)
Nu moeten we zorgen dat we deze waardes aan een device kunnen koppelen, dit doen we door een virtueel apparaat aan te maken: Klik op het blauwe plusje -> Nieuw apparaat -> virtuele apparaten -> apparaat -> verbinden -> vul in Zendure 2400AC -> kies een afbeelding -> !BELANGRIJK! kies batterij -> kies:
Schakelaar
Accuniveau
vermogen
Temperatuur
Als dit aangemaakt is verschijnt er een nieuw apparaat in het dashboard:
:strip_exif()/f/image/boBgOWIUoujh9F8tkU9qzsKp.png?f=user_large)
Om deze waardes te pushen naar het virtuele device is een flow nodig, die het script uitleest en vervolgens de data wegschrijft naar het virtuele apparaat -> Zendure 2400AC. Een dergelijke flow kan er zo uitzien:
:strip_exif()/f/image/fKeqnbfl3JyLwXUAAZapWIyn.png?f=user_large)
Als dit aangemaakt is verschijnt er een nieuw apparaat in het dashboard, met het icoon dat eerder is aangemaakt. Klik je op dit icoon, dan is de informatie eenvoudig zichtbaar:
:strip_exif()/f/image/6iOgumh1NkGGaZ6BZ84DBhs6.png?f=user_large)
:strip_exif()/f/image/vKv8ZE2CzlZJEn1z9LaCTGHL.png?f=user_large)
Automatisch handelen: Het koppelen van een hyper aan PBTH thuisbatterij monitor.
Voor het koppelen van een thuisbatterij aan PBTH heb je een device nodig met de classificering batterij. Volg daarom de stappen die hier boven genoemd zijn om een virtueel device aan te maken, en koppel de juiste waardes aan het device, zoals het voorbeeld hier::strip_exif()/f/image/zD7bzLWOggRAF9rZG3nzUKMe.png?f=user_large)
Controleer of de waardes ook daadwerkelijk in het apparaat komen.
Zorg ervoor dat de prijzen beschikbaar komen binnen homey, dit doe je door op de blauwe plus te klikken -> nieuw apparaat -> power by the hour -> day ahead E prijzen, en Netherlands op te zoeken in de lijst. Als het apparaat gemaakt is kan je door op instellingen te klikken de bijkomende kosten opgeven. En vul onderaan alvast een DAP(bijv. 1) in, deze heb je nodig om een thuisbatterij monitor te koppelen aan een tarief.
Zodra dit gedaan druk je nogmaals op het blauwe plusje -> nieuw apparaat -> thuisbatterij monitor -> verbinden, waar dan het virtuele apparaat zou komen te staan, selecteer deze en klik op ga door.
Als het goed is krijg je een nieuw apparaat die er zo uitziet(met de naam van het virtuele apparaat een Σ erachter)
:strip_exif()/f/image/4qCl2JFqxGeGHO1DkILqbzMy.png?f=user_large)
Vervolgens doe je rechtermuis knop de thuisbatterij monitor en druk je op instellingen, en daar vul de waardes in van je thuis batterij, zoals capaciteit, max laad en ontlaad vermogen met de verliezen. Ik ga van een RTE uit van 86, en heb bij laden en ontladen een verlies van 7 procent ingevuld. Belangrijk is het eerder ingevulde DAP nummer ook in te vullen bij de DAP(bijvoorbeeld 1) van de thuisbatterij monitor, zonder prijzen kan hij geen strategie bepalen.
Nu kan je een flow gaan bouwen, goed om te weten, is dat de hyper 2 aparte taken heeft namelijk: Laden en ontladen. De thuisbatterij monitor werkt met een positieve waarde, en een negatieve waarde. Met een variabele kunnen we zorgen dat deze goed wordt opgesplitst. Of als je werkt met een vast vermogen kan je het zoals onderstaand voorbeeld oplossen:
/f/image/oW0VVMMHWYb5Ej3xENWjSjt7.png?f=fotoalbum_large)
Als je nu op de PBTH thuisbatterij klikt krijg je een kaartje te zien met de berekende strategie:
/f/image/5jV8ODu1y2t7pJiEhvgf6lN9.png?f=fotoalbum_large)
Heb je algemene vragen over Zendure thuisaccu's? Kijk dan in dit topic:topic
[ Voor 20% gewijzigd door geert1992 op 03-08-2025 10:40 . Reden: Update 2400AC uitlezen. ]