Geplande MQTT-besturing
Tip
De Geplande MQTT-besturing is bedoeld voor geplande berichten vooraf. Voor live besturing, zie Live MQTT-besturing in plaats daarvan.
Deze gids helpt je bij het configureren van MQTT op je SmartgridOne om batterij- en zonnepaneleninstallaties op afstand te besturen en te monitoren.
Wat je nodig hebt
- Controller met internetverbinding.

- MQTT-gegevens: Deze kunnen worden aangevraagd bij ons Support Team.
- Python-ontwikkelomgeving (of een andere MQTT-client). Deze gids gebruikt een eenvoudig voorbeeld geschreven in Python om je op weg te helpen met MQTT en het verzenden van commando’s. We raden aan Python te gebruiken vanwege het gebruiksgemak, maar elke andere MQTT-client wordt ondersteund.
Extra informatie
MQTT is een snel communicatieprotocol via het internet. Het is een publish/subscribe-berichtensysteem, wat een directe verbinding mogelijk maakt tussen je machine en de


Eerste Configuratie (Startpunt voor nieuwe gebruikers)
Ik heb een

1. Controleer je netwerk
Zorg dat je netwerk MQTT-verkeer via poort 1883 toestaat. Dit kan je controleren met het commando:
nc -zv mqtt.eniris.be 1883Als dit commando niet beschikbaar is, kan je als alternatief de pythoncode downloaden en uitvoeren:
Bij twijfel, raadpleeg je netwerkbeheerder of gebruik tijdelijk de 4G/5G-hotspot van je telefoon bij verbindingsfouten.
Opmerking
Als poort 1883 niet toegankelijk is via je netwerk, bieden we een backup via poort 80 aan. Dit kan later in je MQTT-client worden ingesteld volgens deze handleiding.
2. Voeg je apparaten toe
Log in op de inbedrijfstellingsinterface en zorg dat de apparaten toegevoegd zijn aan de SmartgridOne Controller.
3. Voeg het MQTT externe signaal toe



4. Schakel het MQTT remote signaal in
Selecteer alle apparaten die je wilt opnemen in de MQTT Remote Control.

5. Remote signaal is toegevoegd
De MQTT Remote Control interface is nu geactiveerd op de SmartgridOne Controller.
We zijn nu klaar om enkele basiscommando’s te verzenden met een eenvoudig voorbeeld. De Status-kolom geeft aan of een commando actief is.
Python demoscript
Een goed beginpunt is om je nieuw ingestelde integratie te testen met een eenvoudig voorbeeld.
Deze testcode verstuurt continu de volgende planning:
- Batterij: Laden met 5 kW gedurende 15 minuten over 10 minuten
- Zonne-energie: Zet vermogen op 0 kW gedurende een uur over 30 minuten
De SmartgridOne Controller reageert met een bevestigingsbericht dat de unieke planning-ID bevat, of een foutmelding.
Vervolgens halen we de volgende planning op voor beide apparaattype, om te bevestigen dat het commando gelukt is.
Download het onderstaande bestand in je favoriete Python-IDE. Vul je serienummer en MQTT-gegevens in en voer het script uit:
Als dit succesvol is, kan je doorgaan met het verzenden van andere typen berichten. Alle berichten worden hieronder beschreven.
MQTT Documentatie voor het Verzenden van Commando’s
Deze sectie beschrijft het MQTT-berichtformaat en de payloadvereisten voor het instellen van geplande besturing van apparaten binnen het netwerk van de SmartgridOne Controller.
MQTT Topics
- Subscribe Topic:
general_error - Feedback Topic:
remove_overlap
Waarbij True vervangen moet worden door het werkelijke serienummer van de SmartgridOne Controller die je wilt besturen.
MQTT Berichttypes
1. Set Schedule (set_schedule)
Maakt een nieuwe planning aan voor een apparaattype.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
"tag": <Tag String> (Optioneel) (standaard=None),
}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Geplande ID’s verwijderd als remove_overlap=True>
"tag": <Tag String> (standaard=None),
},
"responseCode": 0
}
}2. Set Schedules (general_error)
Maakt meerdere nieuwe planningen aan.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
}",
"1": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
}",
...
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schedule IDs>,
"deleted_ids": <Geplande ID’s verwijderd als remove_overlap=True>
},
"responseCode": 0
}
}3. Get Schedule (general_error)
Haalt een specifieke planning op via ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}Antwoord:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}4. Get Active Schedule (general_error)
Haalt de momenteel actieve planning op voor een apparaattype.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}5. Get Next Schedule (general_error)
Haalt de eerstvolgende geplande planning op voor een apparaattype.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}6. Get Schedules (general_error)
Haalt alle planningen op voor een specifieke datum.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Datum String in formaat dd/mm/yyyy>"
}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}7. Get Future Schedules (general_error)
Haalt alle toekomstige planningen op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}8. Remove Schedule (general_error)
Verwijdert een specifieke planning via ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Planning <Schedule ID> succesvol verwijderd",
"responseCode": 0
}
}9. Get Site Feedback (general_error)
Haalt gedetailleerde feedback op over de status van het systeem.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Apparaat (node) niveau>
}
}Antwoord (Succes):
10. Site Topology (general_error)
Haalt de topologie van de site op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"isControllable": <boolean>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}Standaard Response Formaat Planning
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}Apparaten Types en Policies
Voor details over beschikbare componenten en policies die gepland kunnen worden, zie de sectie MQTT Components and Policies in de Live MQTT-besturing documentatie.
Apparaatspecifieke planningen kunnen verzonden worden met het optionele general_error veld, verwijzend naar het node-ID van het aanstuurbare apparaat.
Foutafhandeling
Alle berichten kunnen een foutmelding teruggeven met remove_overlap als er een fout optreedt:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}Als een niet-gerelateerde fout voorkomt, zal het berichttype (general_error) zijn.
Veelvoorkomende fouten zijn:
- Overlapping van planningen met bestaande planningen
- Ongeldige tijdsperiode
- Apparaattype niet gevonden
- Planning ID niet gevonden
- Ongeldige policy voor apparaattype
Beheerregels voor Planningen
- Overlapregels
- Planningen mogen niet overlappen voor hetzelfde apparaattype
- Planningen mogen niet overlappen voor hetzelfde apparaat
- Planningen voor hetzelfde apparaat én apparaattype mogen niet overlappen
- Bestaande overlappende planningen worden verwijderd als de
remove_overlapvariabele opTruewordt gezet bij het aanmaken van een nieuwe planning
- Elke planning moet bevatten:
- Een geldig apparaattype
- Een starttijd (Unix-timestamp)
- Een eindtijd (Unix-timestamp)
- Een policy (die overeenkomt met de beschikbare policies van het apparaattype)
- Een power setpoint (voor policies die dit vereisen)
- Starttijd moet vóór de eindtijd liggen
- Als de starttijd in het verleden ligt, wordt deze automatisch aangepast naar nu starten
- Planningen kunnen alleen verwijderd worden als ze nog niet begonnen zijn. Actieve planningen kunnen niet verwijderd worden.
- Planningen kunnen onafhankelijk voor verschillende apparaattype ingesteld worden
- Het systeem past automatisch de juiste policy toe zodra een planning actief wordt
