De Live MQTT-bediening is bedoeld voor live bediening. Als u vooraf schema's wilt verzenden, raadpleeg dan Scheduled MQTT Control instead.
Deze handleiding helpt u MQTT te configureren op uw SmartgridOne Controller om batterij- en zonnepaneelinstallaties op afstand te bedienen en te monitoren.
Ik heb een SmartgridOne Controller die ik wil instellen voor MQTT Remote Control.
Zorg ervoor dat uw netwerk en apparaten gereed zijn door de MQTT SetupScheduler-interval
Vraag de vereiste Eniris MQTT-gebruikersnaam en het wachtwoord aan via deEniris-webshop voordat u met de configuratie begint. Supporttickets en SmartgridX/Insights zijn geen provisioningkanalen voor nieuwe MQTT-inloggegevens.
De time-out van het fallbackmechanisme vertelt de SmartgridOne Controller hoe lang deze op nieuwe opdrachten moet wachten. Wanneer de SmartgridOne Controller geen opdrachten meer ontvangt, neemt deze na deze time-out automatisch de standaardstrategie over.
Selecteer vervolgens alle apparaten die u in MQTT Remote Control wilt opnemen.
De interface voor MQTT Remote Control is nu geactiveerd op de SmartgridOne Controller.
We zijn nu klaar om met een eenvoudig voorbeeld enkele basisopdrachten te verzenden. De kolom Status geeft aan of er een opdracht actief is.
Een goed begin is om uw nieuw geconfigureerde integratie met een eenvoudig voorbeeld te testen.
Deze testcode verzendt continu de volgende opdrachten:
De SmartgridOne Controller reageert continu met een 'feedback'-bericht met de waargenomen waarden voor net- en assetvermogen. Deze functie is ook in dit voorbeeld opgenomen.
Download het onderstaande bestand in uw favoriete Python-IDE. Vul uw serienummer en de MQTT-inloggegevens in die u via de Eniris-webshop, en voer vervolgens het script uit:
Als het bovenstaande succesvol is, kunt u doorgaan met het verzenden van andere typen opdrachten. Alle opdrachten worden beschreven in onze documentatie voor MQTT Remote Control.
In dit gedeelte worden de MQTT-berichtenindeling en payloadvereisten beschreven voor het op afstand beheren van vermogensbeleid op apparaten binnen het netwerk van de SmartgridOne Controller's netwerk.
Het MQTT-topic voor het verzenden van opdrachten heeft de volgende structuur:
standard1/rp_one_s/remoteControlMetrics/'controller SN'
Waarbij 'controller SN' moet worden vervangen door het werkelijke serienummer van de SmartgridOne Controller die u wilt bedienen.
Opdrachten worden verzonden als JSON-payloads. De payloadstructuur is ontworpen om verschillende vermogensbeheerstrategieën en setpoints voor verschillende componenten van het smartgrid-systeem te specificeren. De volgende voorbeelden gebruiken fictieve identificatiegegevens en illustratieve limieten. Vervang de site-node-ID, tijdstempel en waarden door de waarden die bij uw installatie horen:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "setpoint",
"storage_power_setpoint_w": 5000,
"site_policy": "limit",
"site_import": 25000
}
}
Meerdere apparaattypen (bijvoorbeeld batterijen + zonnepanelen) kunnen tegelijkertijd worden bediend.
<Component>_policy (String): Beleidstype voor de component. Als dit wordt weggelaten, kan een eerder groepsbeleid actief blijven tot de oorspronkelijke time-out. Gebruik een expliciete fallback-beleid om de besturing vrij te geven.<Component>_power_setpoint_w (Float): Gewenste vermogenssetpoint in watt voor de component. Dit is optioneel en alleen relevant als een overeenkomstig beleid is opgegeven.Assets van hetzelfde type (bijvoorbeeld twee batterijen) worden gecombineerd tot één component. Als er bijvoorbeeld twee batterijen van 5 kWh zijn geïnstalleerd, worden deze behandeld als één batterij van 10 kWh.
Elke component in het fields object kan een beleid en een instelpunt voor het vermogen bevatten. De volgende componenten kunnen worden bediend:
solar_policy en solar_power_setpoint_w:
storage_policy en storage_power_setpoint_w:
heat_pump_policy:
switched_load_policy:
variable_power_load_policy en variable_power_load_power_setpoint_w:
In plaats van bedieningsstrategieën en instelpunten in te stellen, kunnen ook vermogenslimieten voor opslag- en zonne-energieapparaten worden ingesteld.
Bijvoorbeeld:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "limit",
"storage_maxChargePower_W": 10000,
"storage_maxDischargePower_W": 10000,
"solar_policy": "limit",
"solar_maxProductionPower_W": 15000
}
}
Het veldvoorvoegsel is storage, solar of de node-ID van het betreffende apparaat. Neem het bijbehorende limit-beleid op wanneer u uitsluitend limietopdrachten verzendt, zoals hierboven. Limietwaarden in opdrachten zijn niet-negatieve grootheden: bijvoorbeeld storage_maxDischargePower_W: 10000 betekent een ontladingslimiet van 10 kW. Dit verschilt van feedback, waarin max_discharge_power_W negatief of nul is.
De site kan afzonderlijk worden bediend. De volgende siteopdrachten kunnen naar de controller worden verzonden:
default of fallback
Actieve siteopdrachten verwijderenexport
De exportlimiet van de site instellenimport
De importlimiet van de site instellensetpoint
Een site-instelpunt kan in beide richtingen maximaal 5% variërensetpoint_A
Nog niet geïmplementeerdDe volgende variabelen zijn peak-shavingparameters en worden alleen toegepast wanneer de batterijstrategie is ingesteld op peak-shaving.
startChargeBelow_WstopChargeAbove_WstartDischargeAbove_WstopDischargeBelow_WEen site-instelpunt is NIET compatibel met een import-/exportlimiet.
Bijvoorbeeld:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "self-consumption",
"site_policy": "limit",
"site_export": 10000,
"site_import": 25000
}
}
Specifieke apparaten kunnen ook worden bediend in plaats van apparaatgroepen op basis van hun type. Het bericht heeft dezelfde structuur:
nodeId_policy en nodeId_power_setpoint_wWanneer twee opdrachten naar hetzelfde asset worden verzonden (bijvoorbeeld een apparaatspecifieke opdracht naar een zonne-omvormer en een opdracht naar alle zonneapparaten), krijgt de apparaatspecifieke bediening voorrang op de bediening op basis van het apparaattype.
Het weglaten van een groepsbeleid annuleert de opdracht niet onmiddellijk: een eerder ontvangen groepsopdracht kan actief blijven tot de oorspronkelijk geconfigureerde time-out is verstreken. Gebruik een expliciete fallback-opdracht voor de groep of het apparaat wanneer u de bediening op afstand wilt vrijgeven. Apparaatspecifieke opdrachten worden niet bewaard in dezelfde cache voor groepsopdrachten; zie de onderstaande waarschuwing over lege opdrachten.
Als er helemaal geen opdracht wordt verzonden, worden na 60 seconden (of de geconfigureerde time-outperiode) de standaardbeleidsregels voor de assets opnieuw geactiveerd.
Een actieve opdracht kan worden geannuleerd door een fallbackopdracht message.
Een fallbackopdracht zal de bestaande opdracht cancelonmiddellijk annuleren en de immediately en de SmartgridOne Controller neemt de besturing van de installatie over. Het uitgevoerde beleid hangt af van wat is ingesteld in de SmartgridOne Controller Settings.
Dit kan ook worden gebruikt wanneer een secundair besturingssignaal, zoals een schema, als fallback wordt gebruikt.
Voorbeelden van berichten:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "fallback"
}
}
Een lege opdracht retourneert geaggregeerde feedback van de site, maar is geen alleen-lezenstatusaanvraag. De opdracht vervangt het laatst ontvangen bericht en kan eerdere apparaatspecifieke opdrachten verwijderen. Nog geldige groepsbeleidsregels kunnen opnieuw worden gebruikt totdat hun oorspronkelijke fallback-time-out verstrijkt. Gebruik dit niet als polling wanneer u verwacht dat de apparaatspecifieke bediening ongewijzigd blijft.
De lege opdracht heeft de volgende structuur:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {}
}
Hieronder staat een voorbeeld van een payload om verschillende beleidsregels en instelpunten in te stellen:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1714652046,
"fields": {
"solar_policy": "setpoint",
"solar_power_setpoint_w": 5000,
"storage_policy": "setpoint",
"storage_power_setpoint_w": -5000
}
}
In dit voorbeeld wordt de zonneproductie beperkt tot 5000 watt en vraagt het negatieve opslagsetpoint om 5000 watt ontlading. Een positief opslagsetpoint zou opladen aanvragen. Het weglaten van een groepsbeleid annuleert de eerdere opdracht niet noodzakelijk; gebruik een expliciet fallback-beleid wanneer u die groep wilt terugbrengen naar lokale bediening.
Abonneer u op het feedbacktopic om de status van de site en het resultaat van een verwerkte opdracht te lezen:
standard1/outbound/remoteControlMetrics/feedback/<Controller SN>
Vervang <Controller SN> door het serienummer van de controller. Het serienummer in het topic en de siteNodeId van de site zijn verschillende identificatiegegevens: gebruik altijd de werkelijke site-node-ID, die niet noodzakelijk eindigt op _site_0.
De standaardverbinding voor live bediening retourneert een statusmomentopname wanneer deze een opdracht accepteert en de verwerking van de bediening start. Dit bevestigt niet dat het fysieke apparaat het nieuwe setpoint al heeft bereikt.
Een lege opdracht met "fields": {} retourneert ook geaggregeerde status, maar is geen polling zonder bijwerkingen: de opdracht vervangt het laatste bericht en kan eerder gerichte apparaatspecifieke opdrachten verwijderen. Eerdere groepsbeleidsregels kunnen alleen actief blijven binnen hun oorspronkelijke fallback-time-out. Gebruik geen lege opdrachten om te pollen wanneer u verwacht dat de apparaatspecifieke bediening ongewijzigd blijft.
Sommige provider-specifieke MQTT-verbindingen publiceren ook ongeveer elke 30 seconden ongevraagde feedback. Deze periodieke publicatie is verbindingsspecifiek en geen gegarandeerd interval voor elke MQTT-integratie. Periodieke momentopnamen en antwoorden op lege opdrachten bevatten geen status van afzonderlijke apparaten.
Gebruik het JSON Schema om feedbackpayloads te valideren, of het AsyncAPI-document om het feedbackkanaal van de controller te beschrijven. Beide beschrijven feedback, niet de volledige opdrachtinterface of provider-specifieke uitbreidingen.
| Veld | Type | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
time | Geheel getal | Feedbacktijdstempel, in Unix-seconden. |
requestTime | Geheel getal | Tijdstempel gekopieerd uit de gehele getalwaarde time van de opdracht. Dit is 0 wanneer die waarde ontbreekt of geen geheel getal is. Periodieke integraties kunnen hier de tijdstempel van de momentopname gebruiken. Ga er daarom niet van uit dat een ongevraagde momentopname overeenkomt met een opdracht. |
siteNodeId | Tekenreeks | Werkelijke node-ID van de site die feedback verzendt. Stel deze niet samen op basis van het serienummer. |
fields | Object | Leeg object in feedbackberichten. |
data.responseCode | Geheel getal | 0 voor een succesvol samengesteld feedbackantwoord; 1 voor een verwerkingsfout. Spelling en hoofdlettergebruik zijn van belang. |
data.state | Object | Status gegroepeerd per assettype. Aanwezig bij succes, afwezig bij een fout. |
data.errors | Tekenreeks | Fout-/statustekst die met succesvolle feedback wordt geretourneerd; "" wanneer er geen tekst is. Dit is geen object of array. |
data.error | Tekenreeks | Fouttekst die wordt geretourneerd met responseCode: 1, in plaats van state en errors. |
responseCode: 0 bewijst niet dat elk apparaat het aangevraagde setpoint heeft bereikt. Lees ook het gemeten vermogen, uitgevoerde setpoints, beperkingslabels en foutcodes van apparaten uit.
Deze illustratieve momentopname gebruikt fictieve identificatiegegevens en een bewust beperkte selectie metingen. Andere beschikbare velden worden hieronder beschreven.
{
"time": 1791547201,
"requestTime": 1791547200,
"siteNodeId": "DEMO_CONTROLLER_SiteA",
"fields": {},
"data": {
"responseCode": 0,
"errors": "",
"state": {
"load": { "load_power_W": 12000 },
"grid": { "active_power_W": 7000, "import_limit_W": 25000 },
"storage": {
"active_power_W": -5000,
"mean_soc_perc": 60,
"max_charge_power_W": 10000,
"max_discharge_power_W": -10000,
"dynamic_max_charge_power_W": 8000,
"dynamic_max_discharge_power_W": -9000,
"executed_power_W": -5000,
"executed_policy": ["setpoint"],
"errorCodes": {},
"nr_devices": 1
}
}
}
}
Probeer bij een verwerkingsfout niet data.state:
{
"time": 1791547201,
"requestTime": 1791547200,
"siteNodeId": "DEMO_CONTROLLER_SiteA",
"fields": {},
"data": {
"responseCode": 1,
"error": "Command could not be processed"
}
}
De sectienamen zijn grid, load, storage, solar, heat_pump, switched_load en variable_power_load. Elke assetsectie combineert apparaten van dat type. Twee zonneapparaten met elk een capaciteit van 3 kW leveren bijvoorbeeld een geaggregeerde capaciteit van 6 kW.
solar en storage kan lege objecten zijn ({}) wanneer er geen overeenkomende apparaten zijn. De secties voor warmtepompen, geschakelde belastingen en belastingen met variabel vermogen behouden in dat geval nultellingen, lege arrays/maps en toepasselijke vermogenswaarden die null kunnen zijn.
Behandel een ontbrekend veld of nullpoortals niet beschikbaar, niet als nul. Veel metingen worden weggelaten wanneer ze onbekend zijn; sommige velden bevatten expliciet null. Een totaal kan alleen de apparaten bevatten waarvoor een waarde beschikbaar is. Leid niet uitsluitend uit nr_devices af dat alle metingen beschikbaar zijn.
De volgende algemene velden zijn van toepassing op storage, solar, heat_pump, switched_load en variable_power_load:
| Veld | Geaggregeerd type | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
executed_policy | Array van tekenreeksen en/of null-items | Onderscheiden beleidsregels die door de apparaten worden gerapporteerd. De array kan null bevatten voor een onbekend beleid; de volgorde identificeert geen apparaten. |
constraint_ph0_label | Optionele array van tekenreeksen | Eén label per apparaat dat een beperking rapporteert. Labels kunnen zich herhalen. De sleutel wordt weggelaten als geen enkel apparaat een label rapporteert. Gebruik feedback van afzonderlijke apparaten om een label aan een apparaat toe te wijzen. |
errorCodes | Object | Koppelt node-ID's aan arrays met fout-/statusitems van apparaten: { "DEMO_BATTERY_1": [...] }. Dit is {} wanneer dergelijke items niet worden gerapporteerd. |
nr_devices | Geheel getal | Aantal apparaten dat in deze sectie wordt vertegenwoordigd, niet het aantal apparaten met geldige metingen. |
individual_devices | Object, conditioneel | Feedback per apparaat, gesleuteld op node-ID; zie Feedback van afzonderlijke apparaten. |
Elke meting of limiet in state.grid is optioneel en wordt weggelaten wanneer deze onbekend is. Waarden zijn getallen; vermogen wordt uitgedrukt in watt, energie in wattuur en stroom in ampère.
| Veld | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|
active_power_W | Actief netvermogen. Positief betekent import; negatief betekent export. |
import_limit_W | Huidige limiet voor netimport. |
export_limit_W | Huidige limiet voor netexport. |
nominal_current_A | Nominale stroom die is geconfigureerd voor de elektrische beveiliging van de site. |
today_imported_energy_Wh | Vandaag geïmporteerde energie, indien beschikbaar. |
today_exported_energy_Wh | Vandaag geëxporteerde energie, indien beschikbaar. |
total_imported_energy_Wh | Cumulatieve geïmporteerde energie. |
total_exported_energy_Wh | Cumulatieve geëxporteerde energie. |
today_produced_energy_Wh | Vandaag geproduceerde energie, voor een meter/site die productiemetingen levert. |
total_produced_energy_Wh | Cumulatieve geproduceerde energie, indien geleverd. |
state.load.load_power_W is een getal of null. Deze rapporteert ander verbruik op de site, exclusief afzonderlijk geregistreerd EV-laadverbruik en warmtepompverbruik. Dit is niet het totale siteverbruik en ook geen andere benaming voor netvermogen.
| Veld | Type / beschikbaarheid | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
energy_capacity_Wh | Getal, optioneel | Gecombineerde metagegevens over de beschikbare batterijcapaciteit. |
energy_stored_Wh | Getal, optioneel | Huidige opgeslagen energie. |
mean_soc_perc | Getal, optioneel | Capaciteitsgewogen laadstatus in procenten. Een batterij van 10 kWh op 20% en een batterij van 20 kWh op 50% geven 40%. |
mean_min_soc_perc | Getal, optioneel | Capaciteitsgewogen minimale laadstatuslimiet in procenten. |
mean_max_soc_perc | Getal, optioneel | Capaciteitsgewogen maximale laadstatuslimiet in procenten. |
active_power_W | Getal, optioneel | Gemeten batterijvermogen: positief voor opladen, negatief voor ontladen. |
max_charge_power_W | Getal | Gecombineerde statische laadlimiet, positief of nul. |
max_discharge_power_W | Getal | Gecombineerde statische ontlaadlimiet, negatief of nul. Bijvoorbeeld: -53000 staat voor maximaal 53 kW ontlading. |
dynamic_max_charge_power_W | Getal | Geschat huidig laadvermogen, positief of nul, rekening houdend met beschikbare apparaatlimieten en de resterende laadstatusruimte. |
dynamic_max_discharge_power_W | Getal | Geschat huidig ontlaadvermogen, negatief of nul, rekening houdend met beschikbare apparaatlimieten en de resterende laadstatusruimte. |
executed_power_W | Getal, optioneel | Gecombineerd vermogenssetpoint dat naar de batterijapparaten wordt verzonden, in plaats van het gemeten vermogen. |
today_charged_Wh | Getal, optioneel | Energie die vandaag in de batterijen is geladen. |
today_discharged_Wh | Getal, optioneel | Energie die vandaag uit de batterijen is ontladen. |
total_charged_Wh | Getal, optioneel | Cumulatieve geladen energie. |
total_discharged_Wh | Getal, optioneel | Cumulatieve ontladen energie. |
Gebruik dynamic_max_charge_power_W en dynamic_max_discharge_power_W voor de huidige feedbackindeling. Deze vervangen de eerdere velden realised_charge_power_W en realised_discharge_power_W. Dynamische capaciteit is een schatting en geen garantie dat elk aangevraagd setpoint kan worden uitgevoerd; site- en apparaatbeperkingen blijven van toepassing.
Deze numerieke velden worden weggelaten wanneer ze niet beschikbaar zijn:
| Veld | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|
active_power_W | Gemeten vermogen van de zonneapparaten. |
capacity_W | Gecombineerd nominaal zonnevermogen. |
executed_power_W | Gecombineerd vermogenssetpoint dat naar de zonneapparaten wordt verzonden. |
today_energy_Wh | Vandaag geproduceerde energie. |
total_energy_Wh | Cumulatieve geproduceerde energie. |
| Veld | Type | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
active_power_W | Getal of null | Gecombineerd gemeten vermogen van de warmtepompen; null wanneer dit niet beschikbaar is. |
executed_power_W | Getal of null | Gecombineerd verwacht/aangevraagd vermogen van de warmtepompen; null wanneer dit niet beschikbaar is. |
operation_modes | Array met modi of null-items | Afzonderlijke gerapporteerde bedrijfsmodi, zoals blokkeren, boost of zelfregeling. Kan null bevatten wanneer een modus onbekend is. |
| Veld | Type / beschikbaarheid | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
active_power_W | Getal, optioneel | Gecombineerd gemeten vermogen van de geschakelde belastingen. |
devices_on | Geheel getal | Aantal apparaten dat een ingeschakelde status rapporteert. |
devices_off | Geheel getal | Aantal apparaten dat als uitgeschakeld wordt geteld; een onbekende in-/uitstatus wordt als uitgeschakeld geteld. |
executed_power_W | Getal, optioneel | Gecombineerd verwacht/aangevraagd vermogen van de geschakelde belastingen. |
De sectie heet variable_power_load, niet variable_load.
| Veld | Type / beschikbaarheid | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
active_power_W | Getal, optioneel | Gecombineerd EV-/variabel-belastingsvermogen, niet het netvermogen. |
ev_charging | Geheel getal | Apparaten die melden dat een EV moet worden opgeladen. Dit betekent niet dat er daadwerkelijk stroom vloeit. |
ev_not_charging | Geheel getal | Apparaten die geen laadbehoefte melden, waaronder laders zonder aangesloten voertuig. |
executed_power_W | Getal of null | Gecombineerd vermogenssetpoint; null wanneer dit niet beschikbaar is. |
currentL1_A, currentL2_A, currentL3_A | Getal, optioneel | Gecombineerde gemeten stroom op elke fase. Elk faseveld kan afzonderlijk worden weggelaten. |
executed_current_A | Getal, optioneel | Gecombineerde aangevraagde stroom. |
Tellers voor laadenergie, stroomlimieten, ondersteuning voor pauzeren en laadsessies behoren tot afzonderlijke apparaten, niet tot deze aggregatiesectie.
Om de status van een apparaat op te nemen, moet de opdracht het veld <nodeId>_policy bevatten en gericht zijn op een herkend apparaat. Een apparaatspecifiek setpoint op zichzelf vraagt geen feedback per apparaat op. Noch een lege opdracht, noch een periodieke momentopname bevat deze informatie.
De locatie is:
data.state.<section>.individual_devices.<nodeId>
Een opdracht die bijvoorbeeld zowel "DEMO_BATTERY_1_policy": "setpoint" en "DEMO_BATTERY_1_power_setpoint_w": -5000 bevat, kan dit fragment opleveren bij data.state.storage:
{
"executed_policy": ["setpoint"],
"errorCodes": {},
"nr_devices": 1,
"individual_devices": {
"DEMO_BATTERY_1": {
"active_power_W": -5000,
"executed_power_W": -5000,
"executed_policy": "setpoint",
"constraint_ph0_label": null,
"nr_devices": 1
}
}
}
Beleids-, modus- en beperkingsvelden per apparaat zijn enkele waarden, geen geaggregeerde lijsten. Onbekende metingen kunnen null zijn. De errorCodes van het apparaat is een array met fout-/statusitems en wordt alleen opgenomen wanneer dat apparaat items rapporteert; het is geen andere node-ID-map.
| Apparaattype | Beschikbare velden in de afzonderlijke status |
|---|---|
| Solar | active_power_W, today_energy_Wh, total_energy_Wh, capacity_W, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. |
| Opslag | energy_capacity_Wh, mean_soc_perc, energy_stored_Wh, max_charge_power_W, max_discharge_power_W, dynamic_max_charge_power_W, dynamic_max_discharge_power_W, mean_min_soc_perc, mean_max_soc_perc, active_power_W, executed_power_W, executed_policy, constraint_ph0_label, today_charged_Wh, today_discharged_Wh, total_charged_Wh, total_discharged_Wh, nr_devices. |
| Warmtepomp | active_power_W, operation_modes, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. Ondanks de meervoudsvorm is operation_modes hier één modus. |
| Geschakelde belasting | active_power_W, devices_on, devices_off, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. De aan-/uit-tellingen zijn 0 of 1. |
| EV-/belasting met variabel vermogen | active_power_W, ev_requiring_charge, executed_power_W, today_charged_Wh, today_discharged_Wh, total_charged_Wh, total_discharged_Wh, currentL1_A, currentL2_A, currentL3_A, executed_current_A, executed_policy, min_charge_current_A, max_charge_current_A, allow_zero_current, current_charging_session, previous_charging_session, constraint_ph0_label, nr_devices. |
| Site, indien deze via de verbinding beschikbaar wordt gesteld | De beschikbare velden uit de bovenstaande netreferentie, onder state.site.individual_devices. Feedback van energiemeters gebruikt dezelfde velddefinities wanneer een integratie dit beschikbaar stelt; de standaardverbinding voor live bediening biedt geen algemene directe adressering van energiemeters. |
In de huidige batterijrespons per apparaat bevat mean_soc_perc een fractie ondanks de naam: 0.6 betekent 60%. De geaggregeerde storage.mean_soc_perc bevat een percentage: 60 betekent 60%. De minimale en maximale SoC-velden per apparaat blijven percentages. Pas niet dezelfde conversie toe op beide niveaus.
| Veld | Type | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
ev_requiring_charge | Booleaans | Of dit apparaat meldt dat een EV moet worden opgeladen. |
today_charged_Wh, total_charged_Wh | Getal of null | Energie die vandaag / cumulatief in het voertuig is geladen. |
today_discharged_Wh, total_discharged_Wh | Getal of null | Energie die vandaag / cumulatief uit het voertuig is ontladen, indien ondersteund. |
min_charge_current_A, max_charge_current_A | Getal of null | Geconfigureerde minimale en maximale laadstroom. |
allow_zero_current | Booleaans of null | Of pauzeren met nul laadstroom is toegestaan; null indien onbekend. |
current_charging_session | Object | Huidige sessie, of {} wanneer deze niet beschikbaar is. De sleutel is enkelvoudig. |
previous_charging_session | Object | Vorige sessie, of {} wanneer dit niet beschikbaar is. |
Een ingevuld object voor een laadsessie bevat:
| Veld | Type | Testbedrijf aangevraagd door de Fluvius RTU (0 = laag, 1 = hoog) |
|---|---|---|
pluginTime | Tekenreeks | Tijdstip van aansluiten als ISO 8601-datumtijd. |
endTime | Tekenreeks of null | Eindtijd van de sessie, indien bekend. |
firstChargingStartTime | Tekenreeks of null | Starttijd van het eerste laadmoment, indien bekend. |
isFull | Booleaans | Of de sessie meldt dat het voertuig volledig is opgeladen. |
chargedEnergy_Ws | Getal | Energie die tijdens deze sessie is geladen in wattseconden. Deel door 3600 voor watturen. |
usedPhases | Array met tekenreeksen of null | Gebruikte fasen tijdens het laden, indien bekend. |
historicMaxChargeCurrent_A | Getal | Hoogste laadstroom die tijdens de sessie is geregistreerd. |
vpp_id behoort tot een afzonderlijk geconfigureerde VPP-verbinding. Voeg dit niet toe aan de gewone live MQTT-configuratie of -opdrachten; de standaardfeedbackstatus vereist dit niet. Provider-specifieke toevoegingen mogen niet worden beschouwd als onderdeel van de algemene interface voor live bediening.
De setpoints die door een extern signaal worden verzonden, kunnen intern door het EMS worden begrensd. De onderstaande tabel geeft een overzicht van mogelijke beperkingen voor het constraint_ph0_label feedbackveld.
| Label | Node Types | Beschrijving |
|---|---|---|
breaker_current | Site | Stroom van de zekering op siteniveau |
max_charge_current (EV) | EV | Limiet voor maximale laadstroom. |
min_charge_current | EV | Limiet voor minimale laadstroom. |
nom_current | EV | Nominale stroomlimiet van het apparaat. |
max_export_power | Site | Exportlimiet van de site |
max_import_power | Site | Importlimiet van de site |
max_charge_power | EV, Storage | Limiet voor maximaal laadvermogen. |
max_discharge_power | Opslag | Limiet voor maximaal ontlaadvermogen. |
nom_charge_power | EV, Storage | Nominale laadvermogenslimiet. |
nom_discharge_power | Opslag | Nominale ontlaadvermogenslimiet. |
nom_production_power | PV | Nominale productievermogenslimiet. |
device_reported_max_charge_power | Opslag | Limiet voor maximaal laadvermogen van het apparaat. |
device_reported_max_charge_current | Opslag | Limiet voor maximale laadstroom van het apparaat. |
device_reported_max_discharge_power | Opslag | Limiet voor maximaal ontlaadvermogen van het apparaat. |
device_reported_max_discharge_current | Opslag | Limiet voor maximale laadstroom van het apparaat. |
ev_charging_suspended | EV | EV-laden is gepauzeerd |
setpoint_power | All | Het setpoint is de beperkende factor - er zijn geen interne beperkingen. |
high_soc_limit_charge_power | Opslag | Het laden wordt beperkt door de hoge SOC van de batterij. |
low_soc_limit_discharge_power | Opslag | Het ontladen wordt beperkt door de lage SOC van de batterij. |
soc_power_curve_max_charge_power | Opslag | Het laden wordt beperkt door de SOC-vermogenscurve. |
soc_power_curve_max_discharge_power | Opslag | Het ontladen wordt beperkt door de SOC-vermogenscurve. |
too_low_soc_force_charge_power | Opslag | Minimaal laadvermogen vanwege een te lage SOC. |
peakshaving_charge_threshold | Opslag | Laden vanwege peak-shavingparameters. |
peakshaving_discharge_threshold | Opslag | Ontladen vanwege peak-shavingparameters. |
self_consumption_charge_power | EV, Storage | Laden vanwege de zelfconsumptiestrategie. |
self_consumption_discharge_power | EV, Storage | Ontladen vanwege de zelfconsumptiestrategie. |
self_consumption_load_power | Switched Load | Verbruik vanwege de zelfconsumptiestrategie. |
external_signal_device_power_consumption_limit | EV, Switched Load | Het externe signaal begrenst het verbruik van het apparaat. |
external_signal_device_power_production_limit | PV | Een extern signaal beperkt de productie van het apparaat. |
external_signal_battery_charge_power_limit | Opslag | Een extern signaal beperkt het laadvermogen van de batterij. |
external_signal_battery_discharge_power_limit | Opslag | Een extern signaal beperkt het ontlaadvermogen van de batterij. |
setpoint_current | EV | Limiet voor het setpoint van de stroom. |
observed_max_current_demand | EV | Waargenomen maximale stroom die door de EV wordt gebruikt. |
near_fully_charged | EV | De stroom wordt beperkt door een bijna volledig geladen EV. |
fully_charged | EV | De EV is volledig opgeladen |
dynamic_derated_min_power | Opslag | Het setpoint wordt beperkt omdat het apparaat het verwachte setpointvermogen niet kan bereiken. |
dynamic_derated_max_power | Opslag | Het setpoint wordt beperkt omdat het apparaat het verwachte setpointvermogen niet kan bereiken. |
Foutcodes zijn gegroepeerd in bereiken die de algemene categorie van het probleem aangeven:
| Range | Category |
|---|---|
-200 | Verbindingsfouten |
-300 | Antwoordfouten |
-500 | Driverfouten |
-600 | Regelfouten |
De afzonderlijke foutcodes worden hieronder vermeld.
Verbindingsproblemen tussen de EMS en het apparaat.
| Code | Label | Additional Fields |
|---|---|---|
-204 | Connection Refused | |
-209 | No Route To Host | |
-210 | No IP For MAC Address |
Het apparaat is verbonden, maar de antwoorden zijn ongeldig.
| Code | Label | Additional Fields |
|---|---|---|
-300 | Device Unavailable Error | |
-310 | No Response Error | |
-402 | Device Status Error | Message |
| Code | Label | Additional Fields |
|---|---|---|
-600 | Setpoint Ignored Error | |
-602 | Setpoint Rejected Error |
| Code | Label | Additional Fields |
|---|---|---|
-1000 | No Measurements | |
-1001 | No Power Measurements | |
-1003 | No Power Setpoint | |
-1005 | Setpoints Not Followed | nomPowerDeviation_frac, setpointDeviation_frac |
-1006 | Limits Not Followed |
Bij het gebruik van MQTT is het belangrijk rekening te houden met de verschillen in de specificaties tussen versies 3.1, 3.1.1 en 5.0, met name met betrekking tot het gedrag van de broker wanneer clients publiceren naar onbevoegde topics.
Volgens de MQTT 3.1.1-specificatie (zie OASIS MQTT 3.1.1 Specification, sectie MQTT-3.3.5-2) moet een broker de verbinding beëindigen zodra een client een PUBLISH naar een topic verstuurt waarvoor deze geen toestemming heeft. Dit gedrag kan leiden tot onverwachte verbroken verbindingen voor clients die proberen te publiceren naar verkeerd geconfigureerde of onbevoegde topics.
In MQTT 3.1 bestaat deze vereiste niet. Wanneer een client met deze versie naar een onbevoegd topic publiceert, negeert de broker het bericht doorgaans (stille verwijdering) zonder de verbinding te beëindigen. Hierdoor is MQTT 3.1 in sommige gevallen geschikter wanneer robuustheid tegen configuratiefouten of tijdelijk ontbrekende rechten belangrijker is dan strikte beveiligingshandhaving.
Hoewel MQTT 5.0 de mogelijkheid introduceert om met redenencodes te werken (zoals PUBACK met een weigeringsreden), is hiervoor ondersteuning aan zowel client- als serverzijde vereist. Migratie naar MQTT 5.0 brengt daarom extra implementatie-inspanningen met zich mee.
Gevolgen van het negeren van compatibiliteit: Als een client verbinding maakt met MQTT 3.1.1 en probeert berichten naar onbevoegde topics te publiceren, zal de broker de sessie abrupt beëindigen. Dit kan leiden tot instabiliteit, verlies van connectiviteit of een hogere belasting door herhaalde pogingen om opnieuw verbinding te maken.
Recommended Approach: Voor systemen waarin clients mogelijk (tijdelijk) proberen te publiceren naar onbevoegde topics, of waarin foutafhandeling niet strikt is geïmplementeerd, raden we aan MQTT 3.1 te gebruiken. Dit zorgt voor stabielere verbindingen en voorkomt onbedoelde verbroken verbindingen tijdens runtime.