Geplande MQTT-besturing
De geplande MQTT-besturing is bedoeld voor geplande berichten van tevoren. Voor live-besturing, zie in plaats daarvan Live MQTT Control.
Deze gids helpt je bij het configureren van MQTT op je SmartgridOne Controller om batterij- en zonnepaneleninstallaties op afstand te bedienen en te monitoren.
Wat je nodig hebt
- SmartgridOne Controller met internetverbinding.
- MQTT-inloggegevens: Deze kunnen worden aangevraagd door een e-mail te sturen naar support@eniris.be.
- 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 opdrachten. We raden aan om Python te gebruiken voor gebruiksgemak, maar elke andere MQTT-client wordt ondersteund.
Extra informatie
MQTT is een snel communicatieprotocol via het internet. Het is een publiceer/abonneer-berichtensysteem, dat een directe verbinding mogelijk maakt tussen jouw machine en de SmartgridOne Controller. Je activa zijn geclassificeerd in groepen van zonne-energie, batterij, EV en HVAC. Op dit moment maakt deze integratie controle per groep mogelijk, niet per apparaat.
Eerste configuratie (Startpunt voor nieuwe gebruikers)
Ik heb een SmartgridOne Controller die ik wil instellen voor MQTT Remote Control.
1. Controleer je netwerk
Zorg ervoor dat je netwerk mqtt-netwerkverkeer over poort 1883 toestaat. Je kunt dit doen met het commando:
nc -zv mqtt.eniris.be 1883
Wanneer dit commando niet beschikbaar is, kun je alternately deze python-code downloaden en uitvoeren.
Wanneer je twijfelt, raadpleeg dan je netwerkingenieur of gebruik tijdelijk de 4G/5G-hotspot van je telefoon wanneer er verbindingsfouten optreden.
Wanneer poort 1883 niet toegankelijk is vanuit je netwerk, bieden wij een back-up op poort 80. Dit kan later in deze handleiding in je MQTT-client worden geconfigureerd.
2. Voeg je apparaten toe
Log in op de inbedrijfstellingsinterface en zorg ervoor dat de apparaten zijn toegevoegd aan de SmartgridOne Controller.
3. Voeg het MQTT-externe signaal toe



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

5. Externe signaal is toegevoegd
De MQTT Remote Control-interface is nu geactiveerd op de SmartgridOne Controller.
We zijn nu klaar om enkele basisopdrachten te verzenden met behulp van een eenvoudig voorbeeld. De kolom Status vertelt je of er een opdracht actief is.
Python demo script
Een goed startpunt zou zijn om je nieuw ingestelde integratie te testen met een eenvoudig voorbeeld.
Deze testcode doet een eenvoudige taak door continu het volgende schema te verzenden:
- Batterij: Laad met 5 kW gedurende 15 minuten in 10 minuten
- Zonne-energie: Stel het vermogen in op 0 kW gedurende een uur in 30 minuten
De SmartgridOne Controller reageert met een bevestigingsbericht dat de unieke schema-identificatie bevat, of een foutmelding.
Daarna halen we het volgende schema op voor beide apparaattype, ter bevestiging dat de opdracht succesvol was.
Download het onderstaande bestand in je favoriete Python IDE. Vul je serienummer en MQTT-credentials in en voer het script uit:
Wanneer het bovenstaande succesvol is, kun je doorgaan met het verzenden van andere soorten berichten. Alle berichten worden hieronder beschreven.
MQTT-documentatie voor het verzenden van opdrachten
Dit gedeelte geeft details over het MQTT-berichtformaat en de vereisten voor payload voor het opzetten van geplande controle van apparaten binnen het netwerk van de SmartgridOne Controller.
MQTT-onderwerpen
- Abonneer onderwerp:
standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
- Feedback onderwerp:
standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>
Waarbij <controller SN>
moet worden vervangen door het werkelijke serienummer van de SmartgridOne Controller die je van plan bent te bedienen.
MQTT-berichttypes
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": <Setpoint in watts>,
"replace_overlap": <True/False> (Optioneel) (standaard=False),
}
}
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": <Schedulde IDs verwijderd als replace_overlap=True>
},
"responseCode": 0
}
}
2. Haal Schema Op (get_schedule
)
Haal een specifiek schema 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
}
}
3. Haal Actief Schema Op (get_active_schedule
)
Haal 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),
}
}
Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
4. Haal Volgend Schema Op (get_next_schedule
)
Haal het volgende aankomende 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),
}
}
Antwoord (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
5. Haal Schema's Op (get_schedules
)
Haal alle schema's op voor een specifieke datum.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}
Response (Success):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
6. Verkrijg Toekomstige Schema's (get_future_schedules
)
Haal alle toekomstige schema's op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}
Response (Success):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
7. Verwijder Schema (remove_schedule
)
Verwijder een specifiek schema op basis van ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}
Response (Success):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schema <Schedule ID> succesvol verwijderd",
"responseCode": 0
}
}
8. Verkrijg Site Feedback (get_feedback
)
Haal gedetailleerde feedback over de status van het systeem op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {}
}
Response (Success):
Standaard Schema Response Formaat
{
"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>
}
Component Types en Beleid
Voor details over beschikbare componenten en beleidslijnen die geprogrammeerd kunnen worden, verwijzen wij naar de sectie MQTT Componenten en Beleid in de Live MQTT Controle documentatie.
Specifieke schema's voor apparaten kunnen worden verzonden met behulp van het optionele node_id
veld, verwijzend naar de node-ID van het te controleren apparaat.
Foutafhandeling
Alle berichten kunnen een foutrespons retourneren met responseCode: 1
wanneer 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
}
}
Wanneer er een niet-gerelateerde fout optreedt, zal het berichttype zijn (general_error
).
Veelvoorkomende fouten zijn:
- Schema-overlapping met bestaande schema's
- Ongeldige tijdsperiode
- Apparaatstype niet gevonden
- Schema-ID niet gevonden
- Ongeldig beleid voor apparaatstype
Regels voor Schema Beheer
- Overlapregels
- Schema's kunnen niet overlappen voor hetzelfde apparaatstype
- Schema's kunnen niet overlappen voor hetzelfde apparaat
- Schema's voor hetzelfde apparaat en apparaatstype mogen niet overlappen
- Bestaande, overlappende schema's zullen worden verwijderd als de variabele
replace_overlap
is ingesteld opTrue
bij het maken van een nieuw schema.
- Elk schema moet hebben:
- Een geldig apparaatstype
- Een starttijd (Unix timestamp)
- Een eindtijd (Unix timestamp)
- Een beleid (vergelijkbaar met de beschikbare beleidslijnen van het apparaatstype)
- Een vermogenssetpunt (voor beleidslijnen die dit vereisen)
- De starttijd moet vóór de eindtijd liggen
- De starttijd moet minstens
vijf
minuten in de toekomst liggen - Schema's kunnen alleen worden verwijderd als ze minstens
vijf
minuten in de toekomst starten - Schema's kunnen onafhankelijk worden ingesteld voor verschillende apparaatstypes
- Het systeem past automatisch het juiste beleid toe wanneer een schema actief wordt