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

- MQTT-inloggegevens: deze kun je aanvragen bij ons Support Team.
- Python ontwikkelomgeving (of een andere MQTT-client). Deze gids gebruikt een basisvoorbeeld geschreven in Python om je op weg te helpen met MQTT en het verzenden van commando's. We raden Python aan 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, waardoor er een directe verbinding ontstaat tussen jouw machine en de


Eerste configuratie (Startpunt voor nieuwe gebruikers)
Ik heb een

1. Controleer je netwerk
Zorg dat je netwerk mqtt-verkeer toestaat via poort 1883. Dit kan je controleren met het commando:
nc -zv mqtt.eniris.be 1883Als dit commando niet beschikbaar is, kun je als alternatief de python-code downloaden en uitvoeren:
Bij twijfel, raadpleeg je netwerkbeheerder of gebruik tijdelijk de 4G/5G hotspot van je telefoon als er verbindingsproblemen zijn.
Opmerking
Als poort 1883 niet toegankelijk is vanuit jouw netwerk, bieden we een alternatief via poort 80. Dit kan in een later stadium in je MQTT-client geconfigureerd worden.
2. Voeg je apparaten toe
Log in op de commissioning interface en zorg ervoor dat de apparaten zijn toegevoegd aan de SmartgridOne Controller.
3. Voeg het MQTT externe signaal toe



4. Schakel MQTT remote signaal in
Selecteer alle apparaten die je wilt opnemen in 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 versturen met een eenvoudig voorbeeld. De kolom Status geeft aan of een commando actief is.
Python demo script
Een goed startpunt is om je nieuw ingestelde integratie te testen met een simpel voorbeeld.
Deze testcode verstuurt continu het volgende schema:
- Batterij: Laden met 5 kW gedurende 15 minuten over 10 minuten
- Solar: Vermogen instellen op 0 kW gedurende een uur over 30 minuten
De SmartgridOne Controller reageert met een bevestigingsbericht met de unieke schema-ID, of een foutmelding.
Vervolgens halen we het volgende schema op voor beide apparaattype, als bevestiging 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, kun je doorgaan met het verzenden van andere typen berichten. Alle berichten worden hieronder beschreven.
MQTT Documentatie voor het versturen van commando's
Deze sectie beschrijft het MQTT-berichtformaat en payloadvereisten voor het instellen van geplande besturing van apparaten binnen het netwerk van de SmartgridOne Controller.
MQTT Topics
- Abonneer topic:
general_error - Feedback topic:
remove_overlap
Waar True vervangen moet worden door het werkelijke serienummer van de SmartgridOne Controller die je wilt aansturen.
MQTT Berichttypes
1. Set Schedule (set_schedule)
Maakt een nieuw schema 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 watt>,
"site_import": <Import op locatie in Watt>,
"site_export": <Export op locatie in Watt>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
"tag": <Tag String> (Optioneel) (standaard=None),
}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schema ID>,
"deleted_ids": <Verwijderde Schema ID's indien remove_overlap=True>,
"tag": <Tag String> (standaard=None),
},
"responseCode": 0
}
}2. Set Schedules (general_error)
Maakt meerdere nieuwe schema's 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 watt>,
"site_import": <Import op locatie in Watt>,
"site_export": <Export op locatie in Watt>,
"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 watt>,
"site_import": <Import op locatie in Watt>,
"site_export": <Export op locatie in Watt>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
}",
...
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schema IDs>,
"deleted_ids": <Verwijderde Schema IDs indien remove_overlap=True>
},
"responseCode": 0
}
}3. Get Schedule (general_error)
Haalt een specifiek schema op via ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schema ID>
}
}Response:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}4. Get Active Schedule (general_error)
Haalt het momenteel actieve schema 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),
}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}5. Get Next Schedule (general_error)
Haalt het volgende geplande schema 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),
}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}6. Get Schedules (general_error)
Haalt alle schema’s op voor een specifieke datum.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Datumnotatie dd/mm/yyyy>"
}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schema>, ...]
},
"responseCode": 0
}
}7. Get Future Schedules (general_error)
Haalt alle toekomstige schema’s op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schema>, ...]
},
"responseCode": 0
}
}8. Remove Schedule (general_error)
Verwijdert een specifiek schema via ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schema ID>
}
}Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schema <Schema ID> succesvol verwijderd",
"responseCode": 0
}
}9. Get Site Feedback (general_error)
Haal 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>
}
}Response (Succes):
10. Site Topology (general_error)
Haalt de topologie van de locatie op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Response (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": <nominaleStroom>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}Standaard schema response-formaat
{
"id": <Schema ID>,
"device_type": "<Apparaattype>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schema Policy>",
"power_setpoint_w": <Setpoint in watt>,
"created_at": <Unix Timestamp>
}Apparaten types en Policies
Voor details over beschikbare componenten en policies die kunnen worden gepland, zie de sectie MQTT Components and Policies in de Live MQTT Control documentatie.
Apparaatspecifieke schema’s kunnen worden verzonden 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 wanneer een fout optreedt:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Fouttekst>,
"responseCode": 1
}
}Wanneer een niet-gerelateerde fout optreedt, is het berichttype (general_error).
Veelvoorkomende fouten zijn:
- Schema-overlapping met bestaande schema’s
- Ongeldige tijdsduur
- Apparaattype niet gevonden
- Schema ID niet gevonden
- Ongeldige policy voor apparaattype
Regels voor schema beheer
- Overlapregels
- Schema’s mogen niet overlappen voor hetzelfde apparaattype
- Schema’s mogen niet overlappen voor hetzelfde apparaat
- Schema’s voor hetzelfde apparaat én apparaattype mogen niet overlappen
- Bestaande overlappende schema’s worden verwijderd als de
remove_overlapvariabele is ingesteld opTruebij het maken van een nieuw schema.
- Elk schema moet bevatten:
- Een geldig apparaattype
- Een starttijd (Unix-timestamp)
- Een eindtijd (Unix-timestamp)
- Een policy (passend bij de beschikbare policies van het apparaattype)
- Een stroominstelpunt (voor policies die dit vereisen)
- Starttijd moet vóór eindtijd liggen
- Is de starttijd in het verleden, dan wordt de starttijd automatisch op nu gezet
- Schema’s kunnen alleen verwijderd worden als ze nog niet zijn gestart. Actieve schema’s kunnen niet verwijderd worden.
- Schema’s kunnen onafhankelijk voor verschillende apparaattype ingesteld worden
- Het systeem past automatisch de juiste policy toe zodra een schema actief wordt
