-
Notifications
You must be signed in to change notification settings - Fork 40
4. Ondersteuning
DAO rekent standaard met uurprijzen, maar is vanaf 2025年10月1日 ook geschikt voor kwartierprijzen. Als je wilt overstappen op kwartierprijzen doe je dit als volgt.
- Voeg in je config de key
intervaltoe:
"interval": "15min", - Voeg in je scheduler een berekening toe op de kwartieren (Let daarbij op dat er geen andere actie (b.v. meteo ophalen) op dezelfde tijd gepland staat. Het programma kan vooralsnog per minuut maar 1 taak uitvoeren. Pas in dat geval de planning van de andere taak aan):
"xx15": "calc_optimum",
"xx30": "calc_optimum",
"xx45": "calc_optimum",
- Vul bij price-source een providor in die het leveren van kwartierprijzen ondersteunt. Vooralsnog zijn dat nordpool, tibber (beide getest) en entsoe (niet getest)
- Haal ("met de hand" via het run menu) de prijzen voor vandaag opnieuw op (vul de datum van vandaag in bij het "vanaf"-veld). En na 13:00 opnieuw de prijzen voor morgen (vanaf veld kan leeg blijven).
DAO gebruikt entiteiten van Home Assistant om gegevens van devices uit te lezen en ook om devices aan te sturen. Via de configuratie geef je aan welke entiteiten dat zijn. Voor de entiteiten die DAO gebruikt om iets uit te lezen (bijvoorbeeld de State of Charge van een Accu) kun je de entiteit best rechtstreeks opnemen in de configuratie, mits het type en waardenbereik van de entiteit overeenkomen met het definitie van de subkey.
Voor de entiteiten die DAO gebruikt om devices aan te sturen, of die voor lezen omgezet moeten worden, kun je deze ontkopelen.
Hoe doe je dat? Voor de entiteit die DAO aanstuurt of uitleest maak je een helper. Als naam gebruik je dan de naam van de subkey zoals aangegen bij het Overzicht alle instellingen. Bijvoorbeeld dao <naam apparaat> <naam subkey in dao configuratie>, je weet dan precies waarvoor deze helper gebruikt wordt. Dus bijvoorbeeld dao sessy 1 set power feedin voor het door DAO ingestelde vermogen van de thuisbatterij met de naam Sessy 1.
Je koppelt deze helper entiteit aan de daadwerkelijke entiteit via een automatisering. Daarin heb je ook de mogelijkheid om andere acties uit te voeren, zoals bijvoorbeeld iets omrekenen, opsplitsen, of een melding geven. Deze automatisering kun je bovendien uitschakelen als je de aansturing van DAO even wilt pauzeren.
De automatisering trigger je door de state change van de helper die DAO aanstuurt of de entiteit die DAO uitleest.
Voorbeeld van zo'n automatisering:
alias: dao sessy 1 change setpoint
description: Instellen van setpoint voor Sessy 1 vanuit dao
triggers:
- trigger: state
entity_id:
- input_number.dao_sessy_1_set_power_feedin
conditions: []
actions:
- action: number.set_value
data_template:
entity_id: number.sessy_1_power_setpoint
value: >
{{ (states('input_number.dao_sessy_1_set_power_feedin') |
float) * -1}}
mode: restart
Als je een sensor hebt in HA waarvan de waarde verandert (state change) omdat iemand de auto gaat laden, de vaatwasser aanzet of anderszins dan kun je al vanuit HA een berekening van DAO initiëren
Maak in configuration.yaml van HA een restcommando aan (bijvoorbeeld zoals hieronder, vervang <ip-address> en <port> door je eigen gegevens)
rest_command:
start_dao_calc:
url: http://<ip-address>:<port>/api/run/calc_zonder_debug
verify_ssl: false
Maak een automation in HA die wordt getriggerd door de genoemde state-change(s) (hier bijvoorbeeld door een input_button en een direct starten trigger, vervang de <entiteiten> door die van jezelf):
alias: Start berekening DAO via rest
description: Start berekening DAO
mode: single
triggers:
- entity_id:
- input_button.start_day_ahead_berekening
- input_boolean.<entity_instant_start>
trigger: state
conditions: []
actions:
- data: {}
action: rest_command.start_dao_calc
Vanaf versie 202580 heeft DAO de mogelijkheid om een aantal apparaten (electric vehicle, boiler, machine) direct te starten. Je kunt tussendoor aangeven dat een apparaat meteen moet starten. Hiermee overrule je in feite de planning van DAO, maar daarna berekent DAO wel weer de optimale planning van al je apparaten, rekening houdend met die handmatige actie.
Je hebt hiervoor een aantal zaken nodig:
- De configuratie van de betreffende optionele entiteit(en) als subkey (entity instant start) bij het apparaat in je config. Zie hiervoor bij Overzicht alle instellingen bij het desbetreffende apparaat.
- Het tussendoor kunnen triggeren van een DAO optimalisatie berekening. Dit kan met een restcommando en een automatisering die dit restcommando uitvoert op basis van een trigger. Zie hiervoor Triggeren van calculatie vanuit Home Assistant
- Het toevoegen van de entiteit uit stap 1 bij de triggers in de automatisering van stap 2.
- Het automatiseren van het uitzetten van de entiteit uit stap 1 zodra het doel is bereikt (anders gaat DAO elke volgende berekening weer de actie op het apparaat inplannen). Dit kan het beste met een automatisering in HA. De trigger hiervoor kan heel verschillend zijn, bijvoorbeeld het loskoppelen van een EV van de laadpaal, of het bereiken van het ingestelde laadniveau. Zier hieronder een voorbeeld automatisering van dit laatste (vervang de entiteiten door je eigen entiteiten):
alias: Stop direct laden auto
description: ""
triggers:
- entity_id:
- sensor.<entity_actual_level>
above: input_number.<entity_instant_level>
trigger: numeric_state
actions:
- data: {}
entity_id: input_boolean.<entity_instant_start>
action: switch.turn_off
mode: single
Hierna kun je het apparaat direct starten via DAO door de desbetreffende entiteit (input_boolean.<entity_instant_start>) op 'true' te zetten (bijvoorbeeld vanuit een dashboard, of met een automatisering getriggerd door een bepaalde gebeurtenis). DAO voert een nieuwe optimalisatie berekening uit en zorgt ervoor dat het desbetreffende apparaat wordt aangezet en eventueel dat andere apparaten anders worden aangestuurd.
Gebruik entity min soc end opt en entity max soc end opt om vanuit HA dynamisch de minimale en maximale SOC van je battery in te stellen. Met deze twee instellingen geef je aan dat DAO de batterij tot de aangegeven SOC (ont-)laadt. Een lage batterij kan zinvol zijn als je de dag(en) na de berekening veel goedkope stroom en/of veel pv productie verwacht. Een volle batterij kan zinvol zijn als je juist dure stroom en/of weinig eigen pv-productie verwacht.
Buiten DAO om kun kun je met behulp van bijvoorbeeld Utility Meter Next Generation het totaal verbruik en bijbehorende kosten over een periode bijhouden. Voor een import tarief geef je deze helper de meterkast import kWh meter en het dynamische tarief. De helper rekent dan de totale kosten uit. Met behulp van een andere helper kun je dan het tarief uitrekenen. Voorbeeld voor dagelijks import tarief:
{% set cost = states("sensor.import_kwh_meter_totale_kosten") | float(0) %}
{% set grid = states("sensor.import_kwh_meter") | float(0) %}
{% if grid > 0 %}
{{ (cost / grid) | round(2) }}
{% else %}
0
{% endif %}
De if statement voorkomt gekke sprongen indien rond middernacht de meter reset.
Op een vergelijkbare manier kun je uit rekenen wat het tarief was geweest wanneer je geen accu had gehad. Je meet waarschijnlijk alles behalve de normale consumptie in huis. Maar dat is uit te rekenen, omdat het de balans is van alles wat je wel meet. Maak een template helper aan die de huis-consumptie berekent. (Voeg hier EV's aan toe met - teken er voor, indien aanwezig). Dit voorbeeld reset dagelijks.
{{
(states("sensor.dagelijkse_electriciteit_van_grid")|float(0)) - (states("sensor.dagelijkse_electriciteit_naar_grid")|float(0))
+ (states("sensor.dagelijkse_electriciteit_van_sessy")|float(0))- (states("sensor.dagelijkse_electriciteit_naar_sessy")|float(0))
+ (states("sensor.solaredge_modbus_daily_energy")|float(0)) }}
Geef dit aan de Next Gen utility meter hierboven en je kunt het tarief 'zoals het vroeger was' uitrekenen.
DAO kan het laden van je (PH)EV aansturen. Daarvoor is naast een connectie met de laadpaal ook een connectie met de auto nodig. Bijvoorbeeld om te controleren of de auto wel thuis is, is ingeplugd en hoe vol de accu nog zit (SoC). Afhankelijk daarvan plant DAO een laadsessie in voor het opgegeven tijdstip. Heb je in home assistant niet de beschikking over de gegevens van je auto, dan kun je met wat work arounds toch gebruik maken van deze functionaliteit.
Configureer de subkey's voor de EV (zie Overzicht EV instellingen) als volgt:
| Subkey | Opmerking |
|---|---|
| entity position | Maak een input_select helper met "home" en "away". Zet deze handmatig op "home" als de auto thuis is, of doe dit geautomatiseerd op basis van entity plugged in, of laat deze gewoon op "home" staan. DAO plant het laden toch pas in als entity plugged in optrue staat |
| entity actual level | Maak een input_number helper en vul hier het startniveau van de accu in zoals je dat op het dashboard van de auto kunt uitlezen. Maak ook een template sensor (b.v. EV calculated level) waarin je het berekende laadniveau bijhoudt (zie hieronder) |
| entity plugged in | Kijk of de laadpaal dit ook aangeeft. Zoniet, maak een input_boolean helper en zet die handmatig op "Aan" als je klaar bent om te laden en op "Uit" als het laden klaar is. (Uitzetten kan eventueel ook automatisch op basis van entity actual level) |
De andere subkeys configureer je volgens de beschrijving. Die hebben te maken met je laadpaal en de inplanning.
De magie zit in een juiste berekening van de het laadniveau tijdens het laden. Hiervoor moet je weten hoeveel energie er geladen is. Bijvoorbeeld door een energiemeter op je laadpaal, of omdat je weet dat de laadpaal met een bepaald vermogen laad (bijvoorbeeld 3400W voor een één fase lader, dat is dus 3,4kWh per uur). De berekening start als het laden start (DAO zet charge switch op on). Op basis van het huidige laadniveau, de geladen energie en de totale inhoud van de accu kun je het actuele laadniveau (in %) uitrekenen. Deze plaats je tussendoor in de helper, of als de charge switch uit gaat.
Er is een maximum van 500 keer per maand voor het gratis account. Omdat DAO vaak de "harmonie"-data aanvult met gfs-data telt iedere keer voor twee! Vier kier per dag volstaat omdat ze maar eens in de 6 uur worden ververst. In een maand van 31 dagen heb je dan 31 x 4 x 2 = 248 dataverzoeken. Je kunt inloggen op meteoserver en kijken hoe vaak je deze maand een call heb gedaan.
-
Geen warmtevraag? Controleer
entity hp heat demand. Bij false is het eerste interval altijd 0. -
Te korte HP-runs (on/off)? Verhoog
min run length(1–5) voor minder schakelen en vaak betere COP. -
Stooklijn wordt niet aangepast: zet
"adjustment": "heating curve"en definieerentity adjust heating curve+adjustment factor. -
Piekvermogen beperken: gebruik exclusie via
boiler heated by heatpump = trueen/of beperk HP-stages. -
Debug-run: in
debugworden geen prognoses naar HA/DB geschreven; logging toont wél tabellen (df_hp, boiler-planning).
-
Boiler verwarmt niet: check
heating allowed belowversus actuele T, setpoint en hysterese. Alsboiler_start_index > boiler_end_indexvalt er niets te verwarmen binnen de horizon. -
Piekvermogen beperken: gebruik exclusie via
boiler heated by heatpump = trueen/of beperk HP-stages. -
Debug-run: in
debugworden geen prognoses naar HA/DB geschreven; logging toont wél tabellen (df_hp, boiler-planning).
- Tweakers Forum – Community-discussies en inzichten over DAO.