Hoppa till huvudinnehåll

Schemalagd MQTT-kontroll

tips

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

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

Vad du behöver

  1. DemoBrandName ControllerDemoName med internetanslutning.
  2. MQTT-referenser: Detta kan begäras genom att skicka ett e-postmeddelande till support@eniris.be.
  3. Python-utvecklingsmiljö (eller något annat MQTT-klient). Denna guide använder ett grundläggande exempel skrivet i Python för att hjälpa dig komma igång med MQTT och skicka kommandon. Vi rekommenderar att använda Python för enkelhetens skull, men andra MQTT-klienter stöds också.

Extra information

MQTT är en snabb kommunikationsprotokoll över internet. Det är ett publicera/abonnemang meddelandesystem, vilket möjliggör en direkt anslutning mellan din maskin och DemoBrandName ControllerDemoName. Dina tillgångar klassificeras i grupper för sol, batteri, elfordon och HVAC. För tillfället tillåter denna integration kontroll per grupp, inte per enhet.

Konfiguration för första gången (Startpunkt för nya användare)

Jag har en DemoBrandName ControllerDemoName som jag vill konfigurerar för MQTT fjärrkontroll.

1. Kontrollera ditt nätverk

Säkerställ 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 alternativt ladda ner och köra denna python-kod.

När du är osäker, konsultera 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 i ett senare steg i denna manual.

2. Lägg till dina enheter

Logga in på installationsgränssnittet och se till att enheterna är tillagda till DemoBrandName ControllerDemoName.

3. Lägg till det externa MQTT-signalet

Bild 1
Bild 1
Bild 1

4. Aktivera fjärrsignal för MQTT

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

Bild 1

5. Fjärrsignalen är tillagd

Gränssnittet för MQTT Fjärrkontroll har nu aktiverats på DemoBrandName ControllerDemoName.

Vi är nu redo att skicka några grundläggande kommandon med hjälp av ett enkelt exempel. Statuskolumnen visar om något kommando är aktivt.

Python demoskriterium

En bra startpunkt skulle vara att testa din nyinstallerade integration med ett enkelt exempel.

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

  • Batteri: Ladda vid 5 kW i 15 minuter efter 10 minuter
  • Sol: Ställ in effekten till 0 kW i en timme efter 30 minuter

DemoBrandName ControllerDemoName svarar med ett bekräftelsemeddelande som innehåller det unika schemad identifierare, eller ett felmeddelande.

Vi hämtar sedan nästa schema för båda enhetstyperna och 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-referenser 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

Detta avsnitt detaljerar MQTT-meddelandet format och payloadkrav för att ställa in schemalagd kontroll av enheter inom DemoBrandName ControllerDemoName's nätverk.

MQTT-ämnen

  • Prenumerera ämne: 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 serienumret för den DemoBrandName ControllerDemoName som du avser att styra.

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": <Setpunkt i watt>,
"site_import": <Platsimport i watt>,
"site_export": <Platsexport i watt>,
"remove_overlap": <True/False> (Valfritt) (standard=False),
"tag": <Tag String> (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": <Schemalagda ID som har tagits bort om remove_overlap=True>
"tag": <Tag String> (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": <Setpunkt i watt>,
"site_import": <Platsimport i watt>,
"site_export": <Platsexport 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": <Setpunkt i watt>,
"site_import": <Platsimport i watt>,
"site_export": <Platsexport 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 ID>,
"deleted_ids": <Schemalagda ID som har tagits bort 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": <Schedule>,
"responseCode": 0
}
}

4. Hämta Aktiv Schema (get_active_schedule)

Hämtar det för närvarande aktiva schemat för en typ av enhet.

{
"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 typ av enhet.

{
"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 genom 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 tillstånd.

{
"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)

Får 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>,
"nomCurrent": <nominalCurrent>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}

Standard Schema Svarsformat

{
"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 policys som kan schemaläggas, se avsnittet MQTT Komponenter och Policys i dokumentationen för Live MQTT Control.

Scheman som är specifika för enheter kan skickas med hjälp av det valfria node_id fältet, som refererar till nod-ID för den kontrollerbara enheten.

Felhantering

Alla meddelanden kan returnera ett felmeddelande med responseCode: 1 när ett fel uppstår:

{
"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överensstämmelse med befintliga scheman
  • Ogiltigt tidsintervall
  • Enhetstyp hittades inte
  • Schema-ID hittades inte
  • Ogiltig policy för enhetstyp

Schemahanteringsregler

  1. Överlappningsregler
    • Scheman får inte överlappa för samma enhetstyp
    • Scheman får inte överlappa för samma enhet
    • Scheman för samma enhet och enhetstyp får inte överlappa
    • Befintliga, överlappande scheman kommer att tas bort 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 timestamp)
    • En sluttid (Unix timestamp)
    • En policy (som matchar enhetstypens tillgängliga policies)
    • 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 börja nu
  5. Scheman kan endast tas bort om de inte har påbörjats ännu. Aktiva scheman kan inte tas bort.
  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