Hoppa till huvudinnehåll

Schemalagd MQTT-kontroll

tips

Det schemalagda MQTT-kontrollen är avsedd för schemalagda meddelanden i förväg. För livekontroll, se istället Live MQTT Control.

Denna guide hjälper dig att konfigurera MQTT på din SmartgridOne Controller för att fjärrstyra och övervaka batteri- och solpanelinstallationer.

Vad du behöver

  1. SmartgridOne Controller med internetanslutning.
  2. MQTT-uppgifter: Detta kan begäras genom att skicka ett e-postmeddelande till support@eniris.be.
  3. Python-utvecklingsmiljö (eller annan MQTT-klient). Denna guide använder ett grundläggande exempel skrivet i Python för att få dig att börja med MQTT och skicka kommandon. Vi rekommenderar att använda Python för användarvänlighetens skull, men andra MQTT-klienter stöds också.

Extra information

MQTT är ett snabbt kommunikationsprotokoll över internet. Det är ett publicera/prenumerera meddelandesystem, vilket möjliggör en direkt anslutning mellan din maskin och SmartgridOne Controller. Ditt tillgångar klassificeras i grupper av solenergi, batterier, elfordon och HVAC. För tillfället tillåter denna integration kontroll per grupp, inte per enhet.

Förstegangskonfigurering (Utgångspunkt för nya användare)

Jag har en SmartgridOne Controller som jag vill konfigurera för MQTT-fjärrkontroll.

1. Kontrollera ditt nätverk

Se till att ditt nätverk tillåter mqtt-nätverkstrafik över port 1883. Du kan göra detta med kommandot:

nc -zv mqtt.eniris.be 1883

Om detta kommando inte är tillgängligt kan du istället ladda ner och köra denna pythonkod.

Vid osäkerhet, rådfråga din nätverksingenjör eller använd tillfälligt din telefons 4G/5G-hotspot när anslutningsfel uppstår.

anteckning

När port 1883 inte är tillgänglig från ditt nätverk, erbjuder vi en backup på port 80. Detta kan konfigureras i din MQTT-klient vid ett senare steg i denna manual.

2. Lägg till dina enheter

Logga in på kommissioneringsgränssnittet och se till att enheterna är tillagda till SmartgridOne Controller.

3. Lägg till MQTT-extrasignalen

Bild 1
Bild 1
Bild 1

4. Aktivera MQTT-fjärrsignal

Välj alla enheter som du vill inkludera i MQTT-fjärrkontroll.

Bild 1

5. Fjärrsignalen har lagts till

MQTT-fjärrkontrollgränssnittet har nu aktiverats på SmartgridOne Controller.

Vi är nu redo att skicka några grundläggande kommandon med ett enkelt exempel. Statuskolumnen berättar för dig om något kommando är aktivt.

Python demo skript

En bra första startpunkt skulle vara att testa din nykonfigurerade integration med ett enkelt exempel.

Denna testkod gör ett enkelt jobb med att kontinuerligt skicka följande schema:

  • Batteri: Ladda med 5 kW i 15 minuter var 10:e minut
  • Solenergi: Sätt effekten till 0 kW i en timme var 30:e minut

SmartgridOne Controller svarar med ett bekräftelsemeddelande som innehåller det unika schemasidentifikatorn eller ett felmeddelande.

Vi hämtar sedan nästa schema för båda enhetstyper, vilket bekräftar att kommandot var framgångsrikt.

Vänligen ladda ner filen nedan i din föredragna Python IDE. Fyll i ditt serienummer och MQTT-uppgifter och kör skriptet:

När ovanstående är framgångsrikt kan du fortsätta med att skicka andra typer av meddelanden. Alla meddelanden beskrivs nedan.

MQTT-dokumentation för att skicka kommandon

Denna sektion detaljerar MQTT-meddelandets format och payload-krav för att ställa in schemalagd kontroll av enheter inom SmartgridOne Controller's nätverk.

MQTT-ämnen

  • Prenumerera på ämnet: standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • Feedbackämne: standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

Där <controller SN> bör ersättas med det faktiska serienummeret för SmartgridOne Controller som du avser att kontrollera.

MQTT-meddelandetyper

1. Ställ in schema (set_schedule)

Skapar ett nytt schema för en enhetstyp.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint i watt>,
"remove_overlap": <True/False> (Valfritt) (standard=False),
"tag": <Tag Sträng> (Valfritt) (standard=None),
}
}

Svar (Framgång):

{
"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 som raderades om remove_overlap=True>
"tag": <Tag Sträng> (standard=None),
},
"responseCode": 0
}
}

2. Ställ in scheman (set_schedules)

Skapar flera nya scheman.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint i watt>,
"remove_overlap": <True/False> (Valfritt) (standard=False),
},
"1": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint i watt>,
"remove_overlap": <True/False> (Valfritt) (standard=False),
},
...
}

Svar (Framgång):

{
"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 som raderades om remove_overlap=True>
},
"responseCode": 0
}
}

3. Hämta schema (get_schedule)

Hämtar ett specifikt schema med ID.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schema ID>
}
}

Svar:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}

4. Hämta aktivt schema (get_active_schedule)

Hämtar det för närvarande aktiva schemat för en enhetstyp.

{
"extraTags": {
{
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

5. Hämta Nästa Schema (get_next_schedule)

Hämtar nästa kommande schema för en enhetstyp.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

6. Hämta Scheman (get_schedules)

Hämtar alla scheman för ett specifikt datum.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

7. Hämta Framtida Scheman (get_future_schedules)

Hämtar alla framtida scheman.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

8. Ta Bort Schema (remove_schedule)

Tar bort ett specifikt schema med ID.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schema <Schedule ID> borttaget framgångsrikt",
"responseCode": 0
}
}

9. Hämta Platsfeedback (get_feedback)

Hämtar detaljerad feedback om systemets status.

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

Svar (Framgång):

Feedback Payload Struktur

10. Plats Topologi (get_toplogy)

Hämtar topologin för platsen.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}

Svar (Framgång):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}

Standard Schema Svar Format

{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Valfritt),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint i watt>,
"created_at": <Unix Timestamp>
}

Komponenttyper och Policys

För detaljer om tillgängliga komponenter och policies som kan schemaläggas, se avsnittet MQTT Komponenter och Policys i Live MQTT Kontroll dokumentationen.

Enhetsspecifika scheman kan skickas med det valfria node_id-fältet, som refererar till nodens ID för den kontrollerbara enheten.

Felhantering

Alla meddelanden kan returnera ett fel svar med responseCode: 1 när ett fel inträffar:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}

När ett orelaterat fel inträffar, kommer meddelandetypen att vara (general_error).

Vanliga fel inkluderar:

  • Schemaöverlappning med befintliga scheman
  • Ogiltigt tidsintervall
  • Enhetstyp hittades inte
  • Schema-ID hittades inte
  • Ogiltig policy för enhetstyp

Schemahanteringsregler

  1. Överlappningsregler
    • Scheman kan inte överlappa för samma enhetstyp
    • Scheman kan inte överlappa för samma enhet
    • Scheman för samma enhet och enhetstyp kan inte överlappa
    • Befintliga, överlappande scheman kommer att raderas om variabeln remove_overlap är inställd på True när ett nytt schema skapas.
  2. Varje schema måste ha:
    • En giltig enhetstyp
    • En starttid (Unix-tidsstämpel)
    • En sluttid (Unix-tidsstämpel)
    • En policy (som matchar de tillgängliga policys för enhetstypen)
    • En effektinställning (för policys som kräver det)
  3. Starttid måste vara före sluttid
  4. Om starttiden är i det förflutna, ändras den automatiskt för att starta nu
  5. Scheman kan endast raderas om de inte har påbörjats än. Aktiva scheman kan inte raderas.
  6. Scheman kan ställas in för olika enhetstyper oberoende
  7. Systemet tillämpar automatiskt den lämpliga policyn när ett schema blir aktivt.