SmartgridOne logo
SmartgridOne logo
Snelle StartInstallatieNetwerkDraad- en aansluitrichtlijnenApp
AgrolaAutarcoAxpoBEE EnergieCompanion EnergyDynamische EnergiehandelDexterDNO Relay BesturingEdmijEnergie Flexibiliteitsoplossingen (EFO)EliaEnervalisEngiePlan-ahead APIEPEX Spot Zonne-energieEuropese grondstoffenBloemFrank EnergieZekeringkastGreenchoiceHallostroomImbyJoulesKratTradeNieuwe integratiesVolgende EnergieOpinumParagraaf 14a IntegratiePleeviHerbouwdScholtTrevionVGT EnergieYuso - BatterijbeheerYuso - Zonne-energie Beperking
Live MQTT controlGeplande MQTT-besturingVirtuele Energiecentrale
SpecificatiesStatus-LEDsControleer responsetijdVideo-instructiesCertificatenLicentieVeiligheid, onderhoud en juridische kennisgevingen
External SignalsMQTT
Tip

De geplande MQTT-controle is bedoeld voor geplande berichten van tevoren. Voor live controle, 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

  1. SmartgridOne Controller met internetverbinding.
  2. MQTT-inloggegevens: Deze kunnen worden aangevraagd bij ons Support Team.
  3. Python ontwikkelomgeving (of een andere MQTT-client). Deze gids gebruikt een basaal voorbeeld geschreven in Python om je op weg te helpen met MQTT en het verzenden van opdrachten. We raden aan om Python te gebruiken voor het 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 apparaat en de SmartgridOne Controller. Jouw activa zijn onderverdeeld in groepen van zonnepanelen, batterijen, EV en HVAC. Op dit moment maakt deze integratie controle per groep mogelijk, niet per apparaat.

Eerste configuratie (Beginpunt voor nieuwe gebruikers)

Ik heb een SmartgridOne Controller dat ik wil instellen voor MQTT Remote Control.

1. Controleer je netwerk

Zorg ervoor dat je netwerk mqtt-netwerkverkeer over poort 1883 toestaat. Dit kun je doen met het commando:

nc -zv mqtt.eniris.be 1883

Als dit commando niet beschikbaar is, kun je alternatief deze python code downloaden en uitvoeren.

Bij twijfel, raadpleeg je netwerkengineer of gebruik tijdelijk de 4G/5G-hotspot van je telefoon wanneer er verbindingsfouten optreden.

Note

Wanneer poort 1883 niet toegankelijk is vanuit je netwerk, bieden we een back-up op poort 80 aan. Dit kan later in deze handleiding in jouw MQTT-client worden geconfigureerd.

2. Voeg je apparaten toe

Log in op de inrichtingsinterface en zorg ervoor dat de apparaten zijn toegevoegd aan de SmartgridOne Controller.

3. Voeg het MQTT externe signaal toe

Afbeelding 1
Afbeelding 1
Afbeelding 1

4. Schakel het MQTT externe signaal in

Selecteer alle apparaten die je wilt opnemen in de MQTT Remote Control.

Afbeelding 1

5. Extern 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 demo-script

Een goed startpunt zou zijn om je nieuw opgezette integratie te testen met een eenvoudig voorbeeld.

Deze testcode doet een eenvoudige taak door continu de volgende planning te verzenden:

  • Batterij: Laad met 5 kW gedurende 15 minuten in 10 minuten
  • Zonne-energie: Stel vermogen in op 0 kW gedurende een uur in 30 minuten

De SmartgridOne Controller reageert met een bevestigingsbericht dat de unieke planningsidentificatie bevat, of een foutmelding.

We halen vervolgens de volgende planning op voor beide apparaattype, ter bevestiging dat het commando succesvol was.

Download het bestand hieronder in je favoriete Python IDE. Vul je serienummer en MQTT-inloggegevens in en voer het script uit:

Wanneer dit succesvol is, kun je verder gaan met het verzenden van andere soorten berichten. Alle berichten worden hieronder beschreven.

MQTT-documentatie voor het verzenden van commando's

Dit gedeelte beschrijft het MQTT-berichtformaat en de payloadvereisten voor het opzetten van geplande bediening 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 daadwerkelijke serienummer van de SmartgridOne Controller die je wilt bedienen.

MQTT-berichttypes

1. Stel planning in (set_schedule)

Maakt een nieuwe planning 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": <Site Import in Watt>,
        "site_export": <Site Export in Watt>,
        "remove_overlap": <True/False> (Optioneel) (default=False),
        "tag": <Tag String> (Optioneel) (default=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": <Schedulde IDs verwijderd als remove_overlap=True>
            "tag": <Tag String> (default=None),
        },
        "responseCode": 0
    }
}

2. Stel planningen in (set_schedules)

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 watt>,
            "site_import": <Site Import in Watt>,
            "site_export": <Site Export in Watt>,
            "remove_overlap": <True/False> (Optioneel) (default=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": <Site Import in Watt>,
            "site_export": <Site Export in Watt>,
            "remove_overlap": <True/False> (Optioneel) (default=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": <Schedulde IDs verwijderd als remove_overlap=True>
        },
        "responseCode": 0
    }
}

3. Haal planning op (get_schedule)

Haal een specifieke planning op middels 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. Haal actieve planning op (get_active_schedule)

Haal 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. Haal volgende planning op (get_next_schedule)

Haal de volgende komende 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. Haal planningen op (get_schedules)

Haal alle planningen op voor een specifieke datum.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_schedules",
    "fields": {
        "date": "<Datum String van 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. Haal toekomstige planningen op (get_future_schedules)

Haal 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. Verwijder planning (remove_schedule)

Verwijdert een specifieke planning op basis van 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. Haal site-feedback op (get_feedback)

Haal gedetailleerde feedback over de staat van het systeem op.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_feedback",
    "fields": {
        "device": <Device (node) niveau>
    }
}

Antwoord (Succes):

Feedback Payload-structuur

10. Site-topologie (get_topology)

Haal 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>,
            "nodeType": <nodeType>,
            "nomCurrent": <nominaleStroom>
            "children": [{<ChildObject>}]
            },
        "responseCode": 0
    }
}

Standaard planning antwoordformaat

{
    "id": <Schedule ID>,
    "device_type": "<Device Type>",
    "node_id": "<Node ID>" (Optioneel),
    "start_time": <Unix Timestamp>,
    "end_time": <Unix Timestamp>,
    "policy": "<Planning Beleid>",
    "power_setpoint_w": <Setpoint in watt>,
    "created_at": <Unix Timestamp>
}

Componenttypes en -beleidsregels

Voor details over beschikbare componenten en beleidsregels die geprogrammeerd kunnen worden, zie het gedeelte MQTT Componenten en Beleid in de Live MQTT Control-documentatie.

Apparaatspecifieke planningen kunnen worden verzonden met behulp van het optionele node_id veld, dat verwijst naar de node-ID van het te bedienen apparaat.

Foutafhandeling

Alle berichten kunnen een foutreactie retourneren met responseCode: 1 wanneer er een fout optreedt:

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "<Berichttype>_ack",
        "error": <Foutbody>,
        "responseCode": 1
    }
}

Wanneer er een niet-verwante fout optreedt, is het berichttype (general_error).

Veelvoorkomende fouten zijn:

  • Planningsoverlap met bestaande planningen
  • Ongeldige tijdsperiode
  • Apparaattype niet gevonden
  • Planning ID niet gevonden
  • Ongeldig beleid voor apparaattype

Planningsbeheerregels

  1. Overlapregels
    • Planningen kunnen niet overlappen voor hetzelfde apparaattype
    • Planningen kunnen niet overlappen voor hetzelfde apparaat
    • Planningen voor hetzelfde apparaat en apparaattype kunnen niet overlappen
    • Bestaande, overlappende planningen worden verwijderd als de variabele remove_overlap is ingesteld op True bij het maken van een nieuwe planning.
  2. Elke planning moet hebben:
    • Een geldig apparaattype
    • Een starttijd (Unix-timestamp)
    • Een eindtijd (Unix-timestamp)
    • Een beleid (dat overeenkomt met de beschikbare beleidsregels van het apparaattype)
    • Een vermogenssetpunt (voor beleidsregels die dat vereisen)
  3. De starttijd moet vóór de eindtijd liggen
  4. Als de starttijd in het verleden ligt, wordt deze automatisch gewijzigd om nu te beginnen
  5. Planningen kunnen alleen worden verwijderd als ze nog niet zijn gestart. Actieve planningen kunnen niet worden verwijderd.
  6. Planningen kunnen onafhankelijk worden ingesteld voor verschillende apparaattype
  7. Het systeem past automatisch het juiste beleid toe wanneer een planning actief wordt

Live MQTT control

Previous Page

Virtuele Energiecentrale

Next Page

On this page

Wat je nodig hebtExtra informatieEerste configuratie (Beginpunt voor nieuwe gebruikers)1. Controleer je netwerk2. Voeg je apparaten toe3. Voeg het MQTT externe signaal toe4. Schakel het MQTT externe signaal in5. Extern signaal is toegevoegdPython demo-scriptMQTT-documentatie voor het verzenden van commando'sMQTT-onderwerpenMQTT-berichttypes1. Stel planning in (set_schedule)2. Stel planningen in (set_schedules)3. Haal planning op (get_schedule)4. Haal actieve planning op (get_active_schedule)5. Haal volgende planning op (get_next_schedule)6. Haal planningen op (get_schedules)7. Haal toekomstige planningen op (get_future_schedules)8. Verwijder planning (remove_schedule)9. Haal site-feedback op (get_feedback)10. Site-topologie (get_topology)Standaard planning antwoordformaatComponenttypes en -beleidsregelsFoutafhandelingPlanningsbeheerregels