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

- MQTT-inloggegevens: Deze kunnen worden aangevraagd bij ons Support Team.
- Python ontwikkelomgeving (of een andere MQTT-client). Deze gids gebruikt een eenvoudig voorbeeld in Python om je op weg te helpen met MQTT en het verzenden van opdrachten. 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, dat een directe verbinding mogelijk maakt tussen jouw 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. Je kunt dit controleren met de opdracht:
nc -zv mqtt.eniris.be 1883Wanneer deze opdracht niet beschikbaar is, kun je de pythoncode hieronder downloaden en uitvoeren:
Bij twijfel, raadpleeg je netwerkbeheerder of gebruik tijdelijk de 4G/5G hotspot van je telefoon bij verbindingsproblemen.
Opmerking
Wanneer poort 1883 niet toegankelijk is vanaf jouw netwerk, bieden wij een back-up via poort 80. Dit kan later worden ingesteld in je MQTT-client.
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 externe MQTT-signaal toe



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

5. Remote signal is toegevoegd
De MQTT Remote Control interface is nu geactiveerd op de SmartgridOne Controller.
We zijn nu klaar om enkele basale opdrachten te verzenden met een eenvoudig voorbeeld. De statuskolom toont of een opdracht 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
- Zonne-energie: 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, ter bevestiging van de succesvolle opdracht.
Download het bestand hieronder in je favoriete Python IDE. Vul je serienummer en MQTT-inloggegevens in en voer het script uit:
Wanneer bovenstaande succesvol is, kun je andere berichten gaan versturen. Alle berichten worden hieronder beschreven.
MQTT Documentatie voor het Verzenden van Opdrachten
Deze sectie beschrijft het MQTT-berichtformaat en de payloadvereisten voor geplande besturing van apparaten binnen het netwerk van de SmartgridOne Controller.
MQTT Topics
- Abonneer Topic:
general_error - Feedback Topic:
remove_overlap
Waarbij True vervangen moet worden door het daadwerkelijke serienummer van de SmartgridOne Controller die je wil besturen.
MQTT Berichttypen
1. Stel Schema in (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": <Setpunt in watt>,
"site_import": <Site Import in Watt>,
"site_export": <Site Export in Watt>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
"tag": <Tag String> (Optioneel) (standaard=None),
}
}Reactie (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": <Schema-IDs verwijderd indien remove_overlap=True>,
"tag": <Tag String> (standaard=None),
},
"responseCode": 0
}
}2. Stel Schema's in (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": <Setpunt in watt>,
"site_import": <Site Import in Watt>,
"site_export": <Site Export 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": <Setpunt in watt>,
"site_import": <Site Import in Watt>,
"site_export": <Site Export in Watt>,
"remove_overlap": <True/False> (Optioneel) (standaard=False),
}",
...
}Reactie (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": <Schema-IDs verwijderd indien remove_overlap=True>
},
"responseCode": 0
}
}3. Haal Schema op (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>
}
}Reactie:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}4. Haal Actief Schema op (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),
}
}Reactie (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}5. Haal Volgend Schema op (general_error)
Haalt het volgende geplande schema van een apparaattype op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
}
}Reactie (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}6. Haal Schema's op (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": "<Datum String in formaat dd/mm/yyyy>"
}
}Reactie (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schema>, ...]
},
"responseCode": 0
}
}7. Haal Toekomstige Schema's op (general_error)
Haalt alle toekomstige schema's op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Reactie (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. Verwijder Schema (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>
}
}Reactie (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. Haal Site Feedback op (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>
}
}Reactie (Succes):
10. Site Topologie (general_error)
Haalt de topologie van de site op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Reactie (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}Standaard schema antwoordformaat
{
"id": <Schema ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schema Policy>",
"power_setpoint_w": <Setpunt in watt>,
"created_at": <Unix Timestamp>
}Component Types en Policies
Voor details over beschikbare componenten en policies die ingepland kunnen worden, bekijk de MQTT Components and Policies sectie in de Live MQTT Control documentatie.
Apparaatspecifieke schema's kunnen worden verstuurd met het optionele general_error veld, verwijzend naar de node ID van het te besturen apparaat.
Foutafhandeling
Alle berichten kunnen een foutrespons teruggeven met remove_overlap bij een fout:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Bericht Type>_ack",
"error": <Fout Body>,
"responseCode": 1
}
}Bij een niet-gerelateerde fout zal het berichttype (general_error) zijn.
Veelvoorkomende fouten zijn:
- Schema overlapt met bestaande schema's
- Ongeldige tijdsduur
- Apparaattype niet gevonden
- Schema ID niet gevonden
- Ongeldige policy voor apparaattype
Regels voor Schema Beheer
- Overlap regels
- Schema's mogen niet overlappen voor hetzelfde apparaattype
- Schema's mogen niet overlappen voor hetzelfde apparaat
- Schema's voor hetzelfde apparaat en apparaattype mogen niet overlappen
- Bestaande overlappende schema's worden verwijderd als de
remove_overlapvariabele opTruestaat bij het maken van een nieuw schema.
- Elk schema 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 vermogens-setpoint (voor policies die dat vereisen)
- Starttijd moet vóór eindtijd zijn
- Als de starttijd in het verleden ligt, wordt deze automatisch op nu gezet
- Schema's kunnen alleen verwijderd worden indien ze nog niet zijn gestart. Actieve schema's kunnen niet verwijderd worden.
- Schema's kunnen onafhankelijk per apparaattype worden ingesteld
- Het systeem past automatisch de juiste policy toe zodra een schema actief wordt
