Tip Tip De Geplande MQTT-besturing is bedoeld voor vooraf geplande berichten. Voor live besturing, zie .
Deze gids helpt je bij het configureren van MQTT op je Download port_check.py SmartgridOne om op afstand batterijen en zonnepanelen te bedienen en te monitoren.
Controller met internetverbinding.
MQTT-inloggegevens: Deze kunnen worden aangevraagd bij ons .
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.
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
. Je assets zijn ingedeeld in groepen: zonne-energie, batterij, EV en HVAC. Momenteel laat deze integratie besturing toe per groep, niet per apparaat.
Ik heb een
SmartgridOne die ik wil instellen voor MQTT Remote Control.
Zorg dat je netwerk mqtt-verkeer via poort 1883 toestaat. Je kunt dit controleren met de opdracht:
nc -zv mqtt.eniris.be 1883 Wanneer 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 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.
en zorg ervoor dat de aan de SmartgridOne Controller .
Selecteer alle apparaten die je in MQTT Remote Control wilt opnemen.
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.
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.
Deze sectie beschrijft het MQTT-berichtformaat en de payloadvereisten voor geplande besturing van apparaten binnen het netwerk van de SmartgridOne Controller .
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.
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
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedule_ack" ,
"state" : {
"schedule_id" : <Schema ID> ,
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> ",
"
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedules_ack" ,
"state" : {
"schedule_ids" : <Schema-IDs> ,
"deleted_ids"
Haalt een specifiek schema op via ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedule" ,
"fields" : {
"id" : <Schema ID>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedule_ack" ,
"state" : <Schema> ,
"responseCode" : 0
}
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) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_active_schedule_ack" ,
"state" : <Schema> ,
"responseCode" : 0
}
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) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_next_schedule_ack" ,
"state" : <Schema> ,
"responseCode" : 0
}
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>"
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedules_ack" ,
"state" : {
"schedules" : [ <Schema> , ...
Haalt alle toekomstige schema's op.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_future_schedules" ,
"fields" : {}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_future_schedules_ack" ,
"state" : {
"schedules" : [ <Schema> , ...
Verwijdert een specifiek schema via ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "remove_schedule" ,
"fields" : {
"id" : <Schema ID>
}
} {
"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
}
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>
}
} Haalt de topologie van de site op.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_topology" ,
"fields" : {}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_topology_ack" ,
"state" : {
"nodeId" : <nodeId> ,
"nodeType" :
{
"id" : <Schema ID> ,
"device_type" : "<Device Type>" ,
"node_id" : "<Node ID>" (Optioneel) ,
"start_time" : <Unix Timestamp> ,
"end_time" : <Unix Timestamp> ,
"policy" : "<Schema Policy>"
Voor details over beschikbare componenten en policies die ingepland kunnen worden, bekijk de 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.
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" :
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
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_overlap variabele op True staat 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
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) ,
}
}
"deleted_ids" : <Schema-IDs verwijderd indien remove_overlap=True> ,
"tag" : <Tag String> (standaard=None) ,
},
"responseCode" : 0
}
}
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),
}" ,
...
}
:
<Schema-IDs
verwijderd
indien
remove_overlap=True>
},
"responseCode" : 0
}
}
}
}
}
]
},
"responseCode" : 0
}
}
]
},
"responseCode" : 0
}
}
}
<nodeType>
,
"nomCurrent" : <nominalCurrent> ,
"children" : [{ <ChildObject> }]
},
"responseCode" : 0
}
}
,
"power_setpoint_w" : <Setpunt in watt> ,
"created_at" : <Unix Timestamp>
}
1
Geplande MQTT-besturing | SmartgridOne Documentation }
}