Om mijn thuisbatterij slim lokaal aan te sturen met Home-Assistant heb ik diverse software uitgeprobeerd. Ik ben begonnen met de Gielz integratie aangezien dit een van de eerste software was die de Zendure SolarFlow 3000 Mix AC+ ondersteunde. Deze software ondersteunt standaard maar 1 batterij, maar door gebruikte maken van een Node RED oplossing ondersteunt Gielz ook tot 3 batterijen.

Ik heb hier een aantal weken mee proefgedraaid en dit werkte best goed. Je kunt verschillende strategieën kiezen en deze heb ik allemaal uitgeprobeerd. Met Smart-Matching kon ik mooi “nul-op-de-meter” houden en met “Dynamisch” handelen werden de batterijen gevuld met elektriciteit als deze het goedkoopst op de dag zijn. Ik vond het alleen niet handig dat je deze software niet via HACS kunt installeren en updaten, wat inhoud dat je alle installatie-stappen weer moet doorlopen als er een update is. Tevens vond ik dat de user-interface wel wat mooier en handiger kon zijn.

Ik ben toen wat verder gaan rond kijken en stootte op OmniBattery die op dat moment nog niet de Zendure SolarFlow 3000 Mix AC+ ondersteunde. Ik heb vervolgens contact opgenomen met de maker van deze software en hierna was snel ondersteuning voor de Zendure SolarFlow 3000 Mix AC+ toegevoegd met V1.5 van de software.

Vervolgens ben ik overgestapt naar OmniBattery om mijn thuis-batterijen slim aan te sturen en hiervan heb ik geen spijt. Er is uitgebreide documentatie beschikbaar over deze software en het installeren via HACS gaat erg eenvoudig. Sinds Home-Assistant 2026.11 wordt HACS verplaatst naar de instellingen onder de nieuwe naam ‘Marketplace’. De werking blijft echter hetzelfde.

Er loopt op Tweakers een mooi draadje in het Forum over OmniBattery. Hier heeft Tweakers JBS een aantal erg informatieve posts geschreven hoe OmniBattery precies werkt en ik heb deze hieronder overgenomen (alle credits voor de sectie hieronder over de werking van OmniBattery gaan dus naar JBS).

Werking OmniBattery

Wat is er per se nodig om te starten en te blijven lopen?

Om het huishoudelijk verbruiksprofiel op te bouwen en continu bij te werken, stelt de integratie een paar harde eisen:

  • Actieve stroomdata: Het systeem moet het verbruik kunnen berekenen of aflezen. Dit vereist dat de data van de netstroom-sensor (slimme meter) en de telemetrie van de batterij continu binnenkomen, óf dat er een specifieke optionele sensor voor het huisverbruik is ingesteld.
  • Vakantiemodus (Vacation Mode) uitgeschakeld: Deze modus is expliciet bedoeld om het inleren van verbruik te pauzeren. Om nieuwe data op te nemen in het profiel, moet deze schakelaar uit staan.
  • Tijd (Samples): Hoewel het systeem direct start met een tijdelijke schatting, is het pas écht in staat tot nauwkeurige voorspellingen zodra het voldoende overeenkomende dagen (samples voor doordeweeks en weekend) heeft geleerd of uit de database heeft kunnen ophalen.

De rol van de batterij (De Meetbasis)

Het systeem leert het gedrag van het huishouden niet via een aparte meter, maar gebruikt de batterij en slimme meter als cruciale rekencomponenten.

  • De batterij als meetinstrument: De basis voor het profiel wordt live berekend met de formule: Huisverbruik = Netstroom (Grid) + Batterij (AC) + Zonnepanelen. De integratie trekt het opladen van de batterij (vanuit het net) af van het netverbruik, en telt het ontladen van de batterij op bij het huisverbruik. Hierdoor vervuilt het opladen van de batterij de verbruikshistorie van het huis niet.
  • Correcties bij offline of lege batterijen: Als een batterij de verbinding verliest, wordt deze genegeerd zodat vastgelopen data (“frozen ac_power”) het profiel niet opblaast. Zodra batterijen helemaal leeg zijn (Min SOC), wordt het stroomverbruik uit het net verzameld in een speciale teller (Grid at Min SOC) en toegevoegd aan het profiel, zodat het totale verbruik niet wordt onderschat.

Hoe het historische verbruiksprofiel wordt opgebouwd

  • 28-daags kwartierprofiel: Op basis van de meetdata verdeelt het systeem een dag in 96 lokale kwartieren en leert het een 28-daags verbruiksprofiel met behulp van trapezium-integratie.
  • Slimme patroonherkenning: Bij de analyse wordt rekening gehouden met de overgang tussen zomer- en wintertijd (DST-aware binning) en worden specifieke wegingen voor doordeweekse dagen, weekenden en dagtypes toegepast.
  • Filteren van externe factoren: Externe grootverbruikers (zoals een EV-lader) worden automatisch van dit basisprofiel afgetrokken, zodat ze de normale voorspelling niet in de war schoppen.
  • Historische backfill & Onvolwassen profielen: Bij een nieuwe installatie haalt het systeem via een “Recorder backfill” historische verbruiksdata stilletjes op de achtergrond op uit Home Assistant. Als er toch onvoldoende data is, wordt het reeds verbruikte deel van de dag aangevuld met een tijdelijke, genormaliseerde dagcurve.
  • Handmatige correctie: Uitzonderlijke verbruiksdagen kunnen achteraf (tot maximaal de laatste 35 hele dagen) handmatig uit de geleerde consumptie worden gehaald met de actie omnibattery.exclude_consumption_days.

De rol van zonne-energie (PV) en onvoorspelbaarheid

Zonne-energie is weerafhankelijk. Daarom gebruikt Omnibattery hiervoor geen 28-daags historisch profiel, maar actuele data en dynamische correcties:

  • Focus op actuele voorspellingen: De integratie gebruikt actuele zonne-voorspellingen (bijv. Solcast) als directe input voor de uren die nog komen.
  • Live accumulator: Het systeem berekent continu de nog verwachte zonne-energie door de daadwerkelijk geproduceerde energie af te trekken van de initiële voorspelling (resterend = voorspelling – al_geproduceerd).
  • Veiligheidsmarges (Safety Margins): Omdat zon-voorspellingen vaak optimistisch zijn, maakt de integratie gebruik van een instelbare “Solar Forecast Safety Margin” (een veiligheidsmarge in kWh). Deze functie heeft de eerdere instelling voor een procentuele marge (“Predictive grid charge margin”) volledig overgenomen. Bij nieuwe installaties wordt deze kWh-buffer standaard ingesteld op 5% van de totale batterijcapaciteit.
  • Directe herberekening (Re-evaluatie): Zodra de voorspelling voor zonne-energie met 1,5 kWh of meer verandert, herrekent het systeem direct het laadplan.
  • Avond-correctie (Evening re-evaluation): Ongeveer 1,5 uur voordat de zonneproductie eindigt, controleert het systeem of de opwek is tegengevallen of het verbruik hoger was. Is dit het geval, dan worden er dynamisch extra net-laadmomenten in de avond ingepland.

Triggers voor re-evaluatie

De Omnibattery integratie kent verschillende automatische en handmatige triggers om het actuele laadplan en de bijbehorende voorspelling (re-evaluatie) gedurende de dag te herzien. Op basis van de codebase zijn dit de specifieke triggers:

  • Zonne-voorspelling wijzigt: Het systeem herrekent het laadplan direct zodra de voorspelling voor de verwachte zonne-energie met 1,5 kWh of meer verschuift.
  • Publicatie van nieuwe prijzen: Er vindt een her-evaluatie plaats op het moment dat de elektriciteitsprijzen voor de volgende dag worden gepubliceerd.
  • Wijziging in instellingen (Runtime opties): Het systeem triggert een herberekening wanneer instellingen zoals de max SOC, de minimum SOC grens (floor), of een veiligheidsmarge worden aangepast.
  • Pre-slot controle: Bij het gebruik van Dynamic Pricing is er een automatische mid-day herziening 1 uur voordat een geplande goedkope laad-sessie (slot) begint, waarbij de actuele capaciteit en zonne-verwachting worden gecontroleerd om te verifiëren of het laden via het net nog steeds nodig is.
  • Avond-evaluatie (Evening re-evaluation): Een vaste automatische check die 1,5 uur voor het verwachte einde van de zonneproductie (of om 16:00 uur als er geen zon is gedetecteerd) draait. Deze trigger controleert of het actuele verbruik hoger uitviel of de zonneproductie is tegengevallen, waarna er dynamisch extra net-laadmomenten in de avond kunnen worden ingepland.
  • SOC-daling (SOC-drop trigger): Bij een onverwachte daling in de State of Charge (SOC) van de batterij (bijvoorbeeld in de ochtend na een sterke nachtelijke afname) wordt een opwaartse her-evaluatie geactiveerd om gemiste goedkope momenten te ondervangen.
  • Systeemopstart en herstel (Startup & Retry): Een her-evaluatie wordt getriggerd bij het opstarten van de integratie (bijvoorbeeld na een Home Assistant herstart als de initiële nachtelijke planning was gemist), of wanneer ontbrekende/falende prijs- of zonne-forecastdata succesvol is hersteld via retries.
  • Handmatig: De herziening kan op elk gewenst moment handmatig worden gestart via de “Re-evaluate” knop in het dashboard, die beschikbaar is in zowel Dynamic Pricing als Time Slot modes.

Hoe en waar wordt de data opgeslagen?

De data-opslag werkt in drie fysieke en logische lagen om slijtage te voorkomen en snelheid te garanderen.

De opslaglocaties

  1. JSON-bestanden (.storage/): De opgebouwde profielen worden opgeslagen in de verborgen map /config/.storage/ van Home Assistant. Schrijfacties worden gegroepeerd en vertraagd (debounced, met een ~5 minuten throttle) om slijtage aan SSD’s of SD-kaarten te voorkomen, en geforceerd weggeschreven (flush) bij een herstart.
  2. Home Assistant Database (Recorder): Hierin staan de ruwe sensordata. Bij een herstart vult het systeem via Recorder queries eventueel ontbrekende profieldagen (tot 28 dagen) met terugwerkende kracht aan.
  3. Werkgeheugen (RAM): In het actieve Python-proces van de integratie wordt het model vastgehouden voor bliksemsnelle, real-time berekeningen.

Hoe wordt het historische profiel bewaard?

  • Voor elke dag uit het 28-daagse venster ligt er een opgeslagen JSON-array met exact 96 intervallen (per 15 minuten).
  • Elk interval bevat de netto-vraag (gecorrigeerd voor uitgesloten apparaten en de batterij).
  • De opslag is tijdsbewust (DST-aware), waardoor dagen met 23 of 25 uur bij zomer-/wintertijd netjes kloppen.

Hoe wordt de HUIDIGE dag vastgelegd? (Live-tracking & Afsluiting)

  • Live Accumulator: In het geheugen draait continu een teller (accumulator) die de exacte kWh-stand van het verbruik en de opwek van vandaag tot nu toe bijhoudt. Deze wordt elke ~5 minuten als back-up naar de .storage geschreven.
  • Intraday combinatie: Voor de voorspelling van vandaag combineert het systeem de werkelijk gemeten kwartieren (uit de accumulator) met de nog verwachte kwartieren (uit de historie).
  • 23:55 Dagafsluiting (Capture): Om exact 23:55 uur (lokale tijd) wordt de actuele dag definitief bevroren. Het systeem valideert of er genoeg datadekking was, en voegt deze dag vervolgens toe aan de permanente 28-daagse historie in de .storage JSON-files. Om middernacht reset de live-teller zich naar 0.0 kWh voor de volgende dag.

Wat doet de Arbitragemarge (Arbitrage margin)?

De arbitragemarge (Minimum arbitrage margin) beschermt je tegen onvoordelige laad- en ontlaadcycli bij dynamische energiecontracten.

Wanneer je batterij laadstroom inkoopt en later weer gebruikt of teruglevert, treedt er altijd energieverlies op (het rendement of de round-trip efficiency, vaak rond de 80–90%). De arbitragemarge zorgt ervoor dat het prijsverschil (de spread) tussen het goedkoopste uur en het duurste uur groot genoeg is om:

  1. De conversieverliezen te dekken (het verlies van laden en ontladen).
  2. Jou de ingestelde winstmarge per kWh op te leveren.
    • Bij laden vanaf het net: Er wordt alleen een laadslot ingepland als de verwachte ontlaadprijs op een later moment voldoende hoger is dan de inkoopprijs + verliezen + jouw marge.
    • Bij terugleveren/verkopen (High Price Sale): Er wordt alleen energie geëxporteerd als de actuele verkoopprijs hoog genoeg is ten opzichte van de inkoopprijs.

Instelling op 0 zet deze controle uit.

Waar stel je dit in?

Je kunt de arbitragemarge op twee manieren instellen:

Methode 1: Via het Omnibattery Dashboard (Snelst)

  1. Open in de linkerbalk van Home Assistant het Omnibattery paneel.
  2. Ga bovenin naar het tabblad Bediening (Control).
  3. Zoek het blok Voorspellend laden (Predictive Charging) of Dynamische prijzen.
  4. Pas de schuifbalk of het veld Minimale arbitragemarge aan (in €/kWh, bijvoorbeeld 0.02 voor 2 cent winstmarge per kWh).

Methode 2: Via de Integratie-instellingen van Home Assistant

  1. Ga naar Instellingen → Apparaten & Diensten.
  2. Zoek de Omnibattery integratie en klik op Opties (Options).
  3. Selecteer het onderdeel Voorspellend laden (Predictive charging) of Dynamische prijzen (Dynamic Pricing).
  4. Vul de gewenste waarde in bij Minimum arbitrage margin (in €/kWh) en sla op.

Binnen de Omnibattery integratie verwijst Efficiëntie (of Levensduurrendement) naar de Round-Trip Efficiency (RTE). Dit is een sensor (zichtbaar op de device card) die het procentuele rendement van de batterij berekent, oftewel de verhouding tussen de energie die erin is gegaan en de energie die er weer uit is gekomen na conversieverliezen.

De berekening van dit levensduurrendement werkt als volgt in de codebase:

  • Lange termijn (Levensduurbasis): Voor AC-only batterijen berekent het systeem de efficiëntie altijd op basis van de hardwaretellers voor de totale levensduur (lifetime charge and discharge counters) in plaats van dagelijkse data. Dit zorgt voor een consistente langetermijnmeting over verschillende batterijmodellen heen.
  • Correctie voor directe zonnepanelen (Venus D/A modellen): Bij DC-gekoppelde systemen waar zonnepanelen direct op de batterij zijn aangesloten, kon de efficiëntiesensor onjuiste waardes (boven de 100%) aangeven omdat de AC-laadteller het directe DC-laden niet registreerde. Voor deze units berekent de sensor het werkelijke vermogen op de batterijcellen (true terminal power: battery_cell_power = battery_power + MPPT) en integreert en bewaart deze totalen over herstarts heen.
  • Inclusief Backup/Off-grid gebruik: Stroom die via de backup-poort wordt ontladen, wordt in de gedeelde berekeningen meegenomen bij de totale ontlading, zodat de berekening van de Round-Trip Efficiency (RTE) kloppend blijft.

Integratie in Home-Assistant

De integratie in Home-Assistant ziet er erg mooi uit en overal vind je help-schermen wat een setting precies betekent. Na het installeren en configureren vind je entiteiten voor je algeheel systeem en voor elke batterij apart.




In het Energie dashboard van Home-Assistant kun je de systeem entititeiten gebruiken om je batterij te definiëren:



Na het installeren van OmniBattery vind je in je sidebar van Home-Assistant een aparte entry voor OmniBattery die erg mooi en overzichtelijk is.



Het plaatje geeft meteen real-time aan hoe de elektriciteit zich in je huis beweegt en hoe de verdeling tot nu toe van de dag is verlopen. Onderaan vind je tevens het plan voor deze dag hoe en waar de elektriciteit vandaan komt.

Teven kun je in een apart tab-blad de gegevens over de geconfigureerde batterijen opvragen.




Tenslotte kun je in het laatste tabblad ‘bediening’ nog heel veel instellingen plegen waarbij er veel help-informatie beschikbaar is.



In de documentatie wordt aangegeven dat er met een leercyclus van 28 dagen wordt gewerkt: Omnibattery slaat gegevens op voor maximaal 28 lokale dagen, verdeeld over 96 intervallen van een kwartier. Het systeem integreert meetwaarden met behulp van de trapeziumregel over intervalgrenzen, middernacht en wijzigingen in de zomertijd heen. Het profiel geeft de voorkeur aan de overeenkomende weekdag, vervolgens aan het overeenkomende type (weekdag/weekend) en ten slotte aan alle bruikbare dagen. Je moet OmniBattery dus even de tijd geven om zich “in te leren” en je zult merken dat het systeem je huis steeds beter begrijpt.

Voorlopige conclusie

Vooralsnog ben ik erg tevreden met OmniBattery. Het is gemakkelijk te installeren, heeft een erg mooi user-interface en doet precies wat ik er van verwacht. Volg vooral ook het draadje op het Tweakers Forum met ervaringen en tips van gebruikers over OmniBattery.