Setpoint-schema's beheren
Met Setpoint-schema's bekijk, vergelijk en dien je tijdgebonden opdrachten in voor omvormerbegrenzing en batterijaansturing. Dit onderdeel is beschikbaar wanneer het voor je account is ingeschakeld. Selecteer eerst de juiste installatie en open Setpoint-schema's.
De voorbeelden gebruiken Noorderlicht Distributiecentrum — Zwolle, met de labels optimizer, manual en solar. Vermogens en tijden zijn voorbeeldwaarden, geen aanbevolen instellingen voor je eigen installatie. Controleer vóór indienen of de opdracht past bij de aangesloten apparatuur en de afgesproken aansturing.
Schema, label en record
Een setpoint bevat een starttijd, duur, opdracht en vermogen. Een schema bevat een verzameling setpoints. Een label identificeert een onafhankelijke schemastroom binnen één installatie. Iedere ingediende versie wordt als een record bewaard met ontvangst- en evaluatiegegevens.
Gebruik bijvoorbeeld optimizer voor een automatisch plan, manual voor afzonderlijke handmatige opdrachten en solar voor omvormerbegrenzing. Deze namen geven op zichzelf geen voorrang: manual is geen automatisch prioriteitslabel.
Een nieuw schema op een bestaand label vervangt het volledige eerdere schema voor dat label, ook wanneer een eerdere opdracht nog loopt. Het is geen aanvulling op losse rijen. Andere labels blijven bestaan. Neem alle opdrachten die je wilt behouden dus mee in de nieuwe versie.
Een label begint met een kleine letter en bevat daarna alleen kleine letters, cijfers en koppeltekens. De lengte is 1–64 tekens. manual, solar en battery-plan zijn geldig; Manual, battery_plan en namen met spaties niet. Het label vul je afzonderlijk in: het staat niet in de schema-JSON.
Tijden en eenheden
Alle tijden op deze pagina, in de editor en in de historische tijdkeuze zijn UTC. Op 15 september 2026 is 10:30 UTC gelijk aan 12:30 in Nederland. De lokale tijdzone van je browser verandert de schemaweergave niet. Controleer bij zomer- en wintertijd altijd de omzetting voor de datum van je opdracht.
Vermogen vul je in watt, niet in kilowatt of kilowattuur: 25000 betekent 25 kW. Kilowattuur is energie en hoort niet in een vermogensveld. Gebruik een niet-negatieve gehele wattwaarde in JSON; de tabeleditor vraagt een vermogen groter dan nul.
Het overzicht lezen
Bovenaan zie je Status op EnviBase, het aantal geplande schema's en de historische tijdkeuze. Daaronder staan Gecombineerd EnviBase-schema, Actieve schema's per label en de recordtabel Schema's.

Ontvangen is niet hetzelfde als geëvalueerd
Ontvangen is het moment waarop SetpointService de versie heeft opgeslagen. Geëvalueerd is het gemelde moment waarop EnviBase het schema heeft verwerkt. Een nieuwe versie kan al ontvangen zijn terwijl de vorige geëvalueerde versie nog in het gecombineerde overzicht staat.
| Status | Betekenis | Wat je controleert |
|---|---|---|
| In afwachting | De nieuwste ontvangen versie voor het label heeft nog geen evaluatietijd. | Vergelijk deze versie met het eerdere geëvalueerde schema. |
| Gepland | Het geselecteerde geëvalueerde schema begint later dan het getoonde moment. | Controleer starttijd en UTC. |
| Actief | Het getoonde moment valt binnen het tijdsvenster van het geselecteerde geëvalueerde schema. | Controleer de individuele opdrachten en eventuele gaten of overlap. |
| Voltooid | Het tijdsvenster van dat schema is verstreken, of het geëvalueerde schema is leeg. | Bekijk de historie en meetgegevens voor het resultaat. |
| Inactief | De versie is niet meer de geselecteerde geëvalueerde of wachtende versie. | Gebruik deze als historische referentie, niet als huidig plan. |
Het schema-tijdsvenster loopt van de vroegste starttijd tot de laatste starttijd plus duur. Het kan gaten bevatten zonder opdracht. Actief betekent daarom niet dat er gedurende het hele venster een setpoint loopt. Voltooid betekent niet dat alle opdrachten aantoonbaar zijn uitgevoerd.
Doorlooptijd is de tijd tussen ontvangst en evaluatie. Voor een wachtende versie zie je hoe lang de evaluatie al uitblijft. Een oudere, nog niet geëvalueerde versie kan inmiddels door een nieuwere inzending zijn ingehaald.
Per label controleren
Open Configuratie tonen op een labelkaart. Bekijk de eerdere geëvalueerde versie en, indien aanwezig, de nieuwe versie in afwachting. Gebruik de starttijd, eindtijd en individuele setpoints om vast te stellen of er op het gekozen moment een opdracht geldt.
In het voorbeeld is manual ontvangen om 08:00 UTC en geëvalueerd om 08:01 UTC. Een gewijzigde versie is om 10:25 UTC ontvangen, maar nog niet geëvalueerd. De batterijopdracht in het gecombineerde overzicht komt daarom nog uit de versie van 08:00 UTC.
Overlappende schema's begrijpen
Open Gecombineerd schema tonen. Kies Tijdlijn om de tijdvensters per label te bekijken, of Lijst voor de individuele opdrachten, hun bron en overschrijvingsinformatie. De lijst biedt 10, 25 of 50 setpoints per pagina.
Watt combineert de relevante geëvalueerde versies. Een wachtende inzending doet nog niet mee. Een voltooid label kan zichtbaar blijven wanneer het overlapt met het tijdsvenster van nog actieve of geplande schema's.
Voorrang bij overlap
Voor de overschrijvingsweergave gelden twee opdrachtfamilies:
- Batterij: laden en ontladen concurreren met elkaar, ook wanneer ze uit verschillende labels komen.
- Omvormerbegrenzing: twee begrenzingsopdrachten concurreren met elkaar. Een begrenzing en een batterijopdracht overschrijven elkaar niet.
Binnen dezelfde familie heeft bij overlap de opdracht met de latere starttijd voorrang. Bij dezelfde starttijd heeft de opdracht uit het later ontvangen schema voorrang. De labelnaam, het vermogen en de volgorde van de JSON-rijen geven geen voorrang.
De overschrijving geldt alleen tijdens het overlappende tijdvak. Een langere opdracht kan daarvoor en daarna nog gelden. Twee opdrachten die precies op elkaar aansluiten, zonder gezamenlijk tijdvak, vormen geen overlap. Vermijd concurrerende opdrachten met zowel dezelfde starttijd als dezelfde ontvangsttijd: de twee voorrangsregels maken die keuze niet eenduidig.
Noorderlicht-voorbeeld: drie labels
Alle tijden hieronder zijn op 15 september 2026 in UTC. De geëvalueerde versies zijn ontvangen om 07:00 (optimizer), 08:00 (manual) en 09:00 (solar).
| Label | Tijdvak | Opdracht |
|---|---|---|
optimizer | 10:00–12:00 | Batterij laden met 25.000 W. |
manual | 10:30–11:00 | Batterij ontladen met 12.000 W. |
solar | 10:15–11:45 | Gezamenlijke omvormer-output begrenzen tot 60.000 W. |
optimizer | 12:00–13:00 | Batterij ontladen met 18.000 W. |
manual | 12:00–13:00 | Batterij laden met 10.000 W. |
Dit levert in de gecombineerde overschrijvingsweergave de volgende batterijvensters op:
| Tijdvak | Batterijopdracht met voorrang | Reden |
|---|---|---|
| 10:00–10:30 | optimizer: laden, 25.000 W | Nog geen concurrerende opdracht. |
| 10:30–11:00 | manual: ontladen, 12.000 W | Latere starttijd dan de laadopdracht. |
| 11:00–12:00 | optimizer: laden, 25.000 W | De kortere ontlaadopdracht is afgelopen. |
| 12:00–13:00 | manual: laden, 10.000 W | Gelijke starttijd; de versie van manual is later ontvangen. |
De omvormerbegrenzing van solar blijft daarnaast afzonderlijk zichtbaar: die behoort tot een andere familie. De laadopdracht van optimizer om 10:00 is Deels overschreven; de ontlaadopdracht om 12:00 is volledig Overschreven. Bekijk bij een gedeeltelijke overschrijving ook de genoemde vensters Nog actief.

Sleep de tijdlijn of de blauwe navigatiebalk om een ander tijdvak te bekijken. Maak de balk breder of smaller om de zoom aan te passen. De markering Nu volgt het huidige moment, of het gekozen historische moment.
Deze weergave verklaart de schema-opdrachten, niet het gemeten batterij- of omvormervermogen. Controleer fysieke resultaten afzonderlijk bij Details en, waar beschikbaar, in de actiehistorie.
Configuraties bekijken en vergelijken
- Zoek het gewenste record in Schema's. De nieuwste ontvangst staat bovenaan; de tabel toont tien records per pagina.
- Kies Configuratie bekijken.
- Gebruik Samenvatting voor type, start, duur en doelvermogen. Schakel naar JSON voor de exacte ontvangen inhoud.
- Controleer het label en de ontvangsttijd: dezelfde labelnaam kan meerdere versies hebben.

Selecteer precies twee records op dezelfde tabelpagina en kies Vergelijk selectie. De vergelijking zet de oudere ontvangst links en de nieuwere rechts en markeert toegevoegde en verwijderde regels. Gebruik Vergelijk manual actief met in afwachting om direct de twee betreffende versies van dat label te vergelijken.
In het voorbeeld verandert het ontlaadvermogen van 12000 naar 15000 W. De vergelijking toont de inhoudswijziging; pas na evaluatie verandert de geselecteerde versie in het gecombineerde overzicht.

Een onbekende berichtversie of onleesbaar formaat kan geen samenvatting krijgen. Bekijk dan de ruwe JSON. Een ontbrekende samenvatting betekent niet dat de inhoud leeg is.
Een eerder moment onderzoeken
Kies een datum en tijd bij Bekijk op een moment (UTC). Watt selecteert per label een record dat op dat moment al geëvalueerd was en toont ook de toen ontvangen, nog wachtende inzendingen. Bij de historische selectie telt eerst de evaluatietijd; bij gelijke evaluatietijd de ontvangsttijd.
Zo kun je onderzoeken welk schema zichtbaar was vóór een gewijzigde versie werd geëvalueerd. Je bekijkt historie; je herstelt of herstart geen schema. Gebruik Nu om terug te keren naar de actuele weergave. Een toekomstig tijdstip wordt naar het huidige moment teruggezet, niet als toekomstsimulatie uitgevoerd.
Bij Mogelijk onvolledige historie zijn voor één of meer labels geen oudere records geladen voor het gekozen moment. Trek dan geen conclusie dat er destijds geen schema bestond. Controleer de recordhistorie en kies zo nodig een recenter moment.
Een schema maken in de tabel
- Keer terug naar Nu en controleer de installatie.
- Open Nieuw schema en vul Schema-label in.
- Kies bij Kopieer van een bestaande versie als startpunt, of Leeg voor een nieuw plan. Controleer altijd de gekopieerde rijen: een leeg plan heeft een wisfunctie.
- Kies Tabel en gebruik Rij toevoegen voor iedere opdracht.
- Vul per rij Setpointtype, Starttijd (UTC), Duur in uren/minuten en Vermogen (W) in.
- Gebruik Verwijderen alleen voor opdrachten die niet in de nieuwe versie moeten staan.
- Controleer het volledige plan en kies Schema indienen.
- Controleer de nieuwe ontvangst in de tabel en daarna de evaluatietijd en het gecombineerde overzicht.
De tabeleditor vraagt een geldige starttijd, een positieve duur van minimaal één minuut en vermogen groter dan nul. Beginwaarden in een nieuwe rij zijn geen installatieadvies. Je kunt een record ook openen en Bewerk dit schema kiezen: dit maakt een nieuw concept en wijzigt niet het historische record.

JSON-formaat en alle ondersteunde opdrachten
Kies JSON in Nieuw schema voor de berichtinhoud. JSON formatteren maakt geldige JSON leesbaar; het controleert niet of de opdracht voor je installatie geschikt is. Gebruik de berichtversie 2026-06-03 en maximaal 1.000 setpoints per schema.
| Veld | Invullen |
|---|---|
version | Exact "2026-06-03". Dit is de formaatversie, niet de plandatum. |
setpoints | Een array met opdrachten; een lege array wist het plan voor het gekozen label. |
start_time | ISO 8601-tijd met tijdzone; gebruik UTC met Z, bijvoorbeeld 2026-09-15T10:00:00Z. |
duration | ISO 8601-duur, bijvoorbeeld PT30M, PT1H of PT2H30M. Gebruik een positieve duur. |
setpoint_type | Eén van de drie typen hieronder. |
| Het bijbehorende vermogensveld | Een niet-negatieve gehele waarde in W. Gebruik uitsluitend het veld bij het gekozen type. |
setpoint_type | Vermogensveld | Betekenis |
|---|---|---|
curtailment_watts | limit_watts | Maximale gezamenlijke output van de omvormers in de installatie. Geen percentage en geen afzonderlijke limiet per omvormer. |
battery_charge | charge_watts | Gewenst gezamenlijk laadvermogen van de batterijen. |
battery_discharge | discharge_watts | Gewenst gezamenlijk ontlaadvermogen van de batterijen. |
Een laad- of ontlaadwaarde boven het beschikbare batterijvermogen levert geen extra vermogen op: de batterij kan slechts haar beschikbare capaciteit leveren. Een geaccepteerd schema is geen garantie dat iedere opdracht volledig wordt uitgevoerd.
Dit complete Noorderlicht-voorbeeld bevat laden, ontladen en omvormerbegrenzing. Het is een afzonderlijk plan om de drie typen te demonstreren, niet een vierde label naast de eerder beschreven configuratie:
{
"version": "2026-06-03",
"setpoints": [
{
"setpoint_type": "battery_charge",
"start_time": "2026-09-15T10:00:00Z",
"duration": "PT2H",
"charge_watts": 25000
},
{
"setpoint_type": "battery_discharge",
"start_time": "2026-09-15T12:00:00Z",
"duration": "PT1H",
"discharge_watts": 18000
},
{
"setpoint_type": "curtailment_watts",
"start_time": "2026-09-15T10:15:00Z",
"duration": "PT1H30M",
"limit_watts": 60000
}
]
}
Gebruik geen extra velden, opmerkingen of komma achter het laatste veld. charge_watts hoort bijvoorbeeld niet bij battery_discharge. Het backendformaat accepteert nul watt; de tabeleditor niet. Gebruik JSON voor een nulwaarde en blijf in die modus bij het indienen.
Voor seconden of andere duraties die de uren/minuten-editor niet exact weergeeft, blijf je eveneens in JSON. Controleer de berichtinhoud na iedere wissel van editorweergave: de tabel is geen verliesloze editor voor alle ISO 8601-duurvarianten.
Data ophalen en aanleveren via SetpointService
Voor een eigen integratie gebruikt SetpointService dezelfde versiegebonden JSON als de editor. De installatie en het label staan in het API-pad, niet in de berichtinhoud. De API vereist een installatiegebonden token met scope building-setpoint-service; de installatie-UUID in het pad moet bij het token horen. Watt regelt zijn toegang zelf: plaats geen Watt-sessietokens in je eigen browsercode of schema-JSON.
De volgende paden zijn relatief aan het SetpointService-adres van je omgeving:
| Methode en pad | Gebruik |
|---|---|
GET /api/v1/{building_uuid}/setpoint/schedule-labels/ | Laatste ontvangst en bijbehorende evaluatiestatus per label. |
GET /api/v1/{building_uuid}/setpoint/schedules/ | Ontvangen records over alle labels, nieuwste ontvangst eerst. |
GET /api/v1/{building_uuid}/setpoint/schedules/{label}/ | Records voor één label. |
GET /api/v1/{building_uuid}/setpoint/schedules/{label}/{received_datetime}/ | Exact ontvangen JSON voor één versie. Gebruik de ontvangen tijdwaarde uit het record. |
POST /api/v1/{building_uuid}/setpoint/schedules/{label}/ | Compleet plan indienen of met lege setpoints wissen. |
Voor recordlijsten kun je label op de lijst over alle labels, received_after/received_before, evaluated_after/evaluated_before, schedule_start_after/schedule_start_before en schedule_end_after/schedule_end_before gebruiken. De tijdgrenzen zijn inclusief en verwachten ISO 8601-tijden. Een evaluatiefilter selecteert geen records zonder evaluatietijd. Filters op schemabegin/einde selecteren het totale venster, niet iedere individuele opdracht daarbinnen.
Lijsten ondersteunen page vanaf 1 en page_size van 1–100; standaard tien resultaten. De response bevat count, next, previous en results. Volg de paginering: alleen de eerste pagina ophalen geeft geen complete historie.
Bij indienen krijg je een record terug, geen bewijs van uitvoering:
| Recordveld | Betekenis |
|---|---|
building_uuid, label | Installatie en schemastroom. |
received_datetime | Ontvangsttijd in UTC met milliseconden; gebruik deze exacte waarde voor het ophalen van die versie. |
evaluated_datetime | Gemelde evaluatietijd, of null zolang niet bekend. |
schedule_start_datetime, schedule_end_datetime | Vroegste start en laatste einde; beide null voor een leeg plan. |
file_url | Detailadres om de ontvangen berichtinhoud op te halen; ook daarvoor is toegangscontrole nodig. |
Bewaar de teruggegeven ontvangsttijd en controleer later het record op evaluatie. De labelsamenvatting beschrijft de nieuwste ontvangen versie: een null-evaluatietijd daarin zegt niet dat er geen oudere geëvalueerde versie bestaat. Haal de records van dat label op om het onderscheid te maken.
Een bestaand plan vervangen of wissen
Kopieer voor vervangen de juiste versie, behoud het gewenste label en neem alle opdrachten op die nog moeten gelden. Controleer andere labels ook: vervangen van optimizer schakelt manual of solar niet uit. Een oudere historische versie terugzetten gebeurt door deze opnieuw als nieuw schema in te dienen, niet door het historische record te activeren.
Om alleen het plan van manual te wissen, open je Nieuw schema, vul je manual in en dien je deze inhoud in:
{
"version": "2026-06-03",
"setpoints": []
}
In Tabel kun je hetzelfde doen door alle rijen te verwijderen. Controleer bewust de waarschuwing voor het lege plan. Wacht na indienen op evaluatie en controleer dat de opdrachten van dat label niet meer in het gecombineerde schema staan. Historische records blijven beschikbaar. Wissen is geen algemene noodstop; andere labels en overige aansturing blijven bestaan.
Grenzen en identieke inzendingen
Per installatie mogen maximaal vijf labels een plan hebben dat doorloopt na de start van een nieuw schema. Bij die controle telt de nieuwste ontvangen versie per ander label; het label dat je vervangt telt niet mee. Dit is geen maximum van vijf historische records of vijf opdrachten.
De teller bovenaan volgt de nog doorlopende geëvalueerde plannen op het bekeken moment. De backend controleert ook nieuwe, nog wachtende versies bij het indienen. Daardoor kan een inzending worden geweigerd terwijl de zichtbare teller nog lager is. Controleer in dat geval ook de wachtende schema's. Werk een bestaand label bij, wis een niet meer nodig plan of plan de nieuwe start na het einde van de bestaande plannen.
Een identieke herinzending van het laatst ontvangen plan voor hetzelfde label levert het bestaande record op, zonder nieuwe ontvangst of nieuwe evaluatieaanvraag. Ook alleen de volgorde van de opdrachten wijzigen maakt geen nieuwe versie. Verwacht dus niet bij iedere klik een extra tabelrij.
Problemen gericht controleren
| Probleem | Controle en vervolgstap |
|---|---|
| Schema blijft in afwachting | Controleer of dit de nieuwste ontvangst voor het label is, ververs en bekijk de evaluatietijd. Dien niet steeds hetzelfde plan opnieuw in: identieke inhoud maakt geen nieuwe versie. |
| Opdracht ontbreekt in het gecombineerde schema | Controleer label, evaluatie, start/einde en het gekozen historische moment. Open de configuratie; let op laadfouten en onbekende formaatversies. |
| Opdracht is deels of volledig overschreven | Vergelijk dezelfde opdrachtfamilie, starttijden en ontvangsttijden. Bekijk de effectieve vensters; alleen de labelnaam veranderen geeft geen prioriteit. |
| Verkeerd tijdstip | Controleer UTC en de zomer-/wintertijdomzetting voor de plandatum. Gebruik niet automatisch de lokale kloktijd in het UTC-veld. |
| Rij wordt afgekeurd | Controleer starttijd, positieve duur en vermogen groter dan nul. Gebruik JSON wanneer je bewust nul watt nodig hebt. |
| Server wijst JSON af | Open Serverresponse bekijken. Controleer versie, veldnamen, type, gehele niet-negatieve wattwaarde en maximaal 1.000 opdrachten. HTTP 422 wijst op ongeldige invoer. |
| Limietmelding of HTTP 409 | Controleer doorlopende plannen en wachtende versies per label. Lees de response: 409 kan ook een conflict met een bestaande ontvangsttijd zijn. |
| Fout bij opslaan of afleveren | Ververs eerst en controleer of een record al is ontvangen voordat je opnieuw indient. Een afleverfout kan optreden nadat het schema is opgeslagen; ontvangst is nog geen evaluatie. |
| Overzicht verandert niet automatisch | Sluit detail-, vergelijkings- en invoerpanelen, keer terug naar Nu en maak het tabblad zichtbaar. Gebruik de verversbediening bij Live. |
| Geëvalueerd, maar ander gemeten vermogen | Controleer overlap, tijd, beschikbaar vermogen en de metingen. Evaluatie bewijst geen volledige fysieke uitvoering. |
Liveverversing pauzeert tijdens historische weergave, een geopend paneel of een verborgen tabblad. Gebruik voor de eindcontrole steeds de actuele weergave en controleer ontvangst, evaluatie én de relevante meetgegevens afzonderlijk.