SmartgridOne logo
SmartgridOne logo
App
Externe Signale
Abschnitt 14a IntegrationAgrolaAutarcoAxpoBEE EnergieBlumeCompanion EnergyDexterDiagnosetestsDNO RelaissteuerungDynamischer EnergiehandelEdmijElia
Elindus
EnecoEnergie-Flexibilitätslösungen (EFS)EnervalisEngieEPEX Spot SolarErneuertEuropäische RohstoffeFleco PowerFrank EnergieGreenchoiceHallostromImbyJoulenKratTrade
Mqtt
Geplante MQTT-SteuerungLive MQTT controlOnboarding-AblaufVirtuelles Kraftwerk
Neue IntegrationenNext EnergyOpinumPlan-ahead APIPleeviScholtSicherungskastenTrevion
Überwachung
VGT EnergieYuso - Batterie-SteuerungYuso - Solarbegrenzung
Fehlerbehebung
Geräte
Installation
Konfiguration von A bis Z
Kundenspezifisch
LizenzNetzwerkReglerSchnellstartSicherheits-, Wartungs- und RechtshinweiseSpezifikationenStatus-LEDsSteuerungsreaktionszeitVerlege- und AnschlussrichtlinienVideo-Tutorials
Werkzeugkasten
Zertifikate
Zubehör
Externe SignaleMqtt
Tipp
Tipp

Die geplante MQTT-Steuerung ist für zeitlich vorgemerkte Nachrichten gedacht. Für Live-Steuerung siehe stattdessen Live MQTT Control.

Diese Anleitung hilft Ihnen, MQTT auf Ihrem SmartgridOne zu konfigurieren, um Batterien- und Solarpanelinstallationen aus der Ferne zu steuern und zu überwachen.

Was Sie benötigen

  1. Controller
    Image 1
    mit Internetzugang.
  2. MQTT-Zugangsdaten: Diese können Sie bei unserem Support-Team anfordern.
  3. Python-Entwicklungsumgebung (oder einen anderen MQTT-Client). Diese Anleitung nutzt ein einfaches Beispiel in Python, um Ihnen den Einstieg in MQTT und das Senden von Befehlen zu erleichtern. Wir empfehlen Python wegen der einfachen Handhabung, aber jeder andere MQTT-Client wird unterstützt.

Zusätzliche Informationen

MQTT ist ein schnelles Kommunikationsprotokoll über das Internet. Es ist ein Publish/Subscribe-Nachrichtensystem, das eine direkte Verbindung zwischen Ihrer Maschine und dem

Image 1
Image 1
ermöglicht. Ihre Anlagen sind in Gruppen Solar, Batterie, EV und HVAC klassifiziert. Momentan erlaubt diese Integration eine Steuerung auf Gruppenebene, nicht pro Gerät.

Ersteinrichtung (Startpunkt für neue Nutzer)

Ich habe ein

Image 1
SmartgridOne, das ich für die MQTT-Fernsteuerung einrichten möchte.

1. Prüfen Sie Ihr Netzwerk

Stellen Sie sicher, dass Ihr Netzwerk MQTT-Datenverkehr über Port 1883 zulässt. Das können Sie mit folgendem Befehl überprüfen:

nc -zv mqtt.eniris.be 1883

Wenn dieser Befehl nicht verfügbar ist, können Sie alternativ den Python-Code herunterladen und ausführen:

Im Zweifel fragen Sie Ihren Netzwerkadministrator oder nutzen Sie temporär den 4G/5G-Hotspot Ihres Telefons bei Verbindungsproblemen.

Hinweis
Hinweis

Wenn Port 1883 in Ihrem Netzwerk nicht erreichbar ist, bieten wir als Backup Port 80 an. Dies kann später im MQTT-Client konfiguriert werden.

2. Fügen Sie Ihre Geräte hinzu

Melden Sie sich am Inbetriebnahme-Interface an und stellen Sie sicher, dass die Geräte hinzugefügt wurden zum SmartgridOne Controller.

3. Fügen Sie das MQTT-externes Signal hinzu

Image 1
Image 1
Image 1

4. Aktivieren Sie das entfernte MQTT-Signal

Wählen Sie alle Geräte aus, die Sie in die MQTT-Fernsteuerung einbinden möchten.

Image 1

5. Fernsignal ist hinzugefügt

Die MQTT-Fernsteuerungsoberfläche ist nun auf dem SmartgridOne Controller aktiviert.

Wir sind nun bereit, einige Basisbefehle mit einem einfachen Beispiel zu senden. Die Status-Spalte zeigt Ihnen an, ob ein Befehl aktiv ist.

Python-Demo-Skript

Ein guter erster Schritt ist es, Ihre neu eingerichtete Integration mit einem einfachen Beispiel zu testen.

Dieser Testcode sendet kontinuierlich folgenden Zeitplan:

  • Batterie: Aufladung mit 5 kW für 15 Minuten in 10 Minuten
  • Solar: Leistung auf 0 kW stellen für eine Stunde in 30 Minuten

Das SmartgridOne Controller antwortet mit einer Bestätigungsnachricht, die die eindeutige Zeitplan-ID enthält, oder mit einer Fehlermeldung.

Anschließend holen wir den nächsten Zeitplan für beide Gerätetypen ab, um zu bestätigen, dass der Befehl erfolgreich war.

Bitte laden Sie die Datei unten in Ihrer bevorzugten Python-IDE herunter. Füllen Sie Ihre Seriennummer und MQTT-Zugangsdaten aus und führen Sie das Skript aus:

Wenn das erfolgreich war, können Sie weitere Nachrichtentypen senden. Alle Nachrichten werden weiter unten beschrieben.

MQTT-Dokumentation zum Senden von Befehlen

In diesem Abschnitt werden Format und Payload-Anforderungen für MQTT-Nachrichten bei der Einrichtung der geplanten Steuerung von Geräten im Netzwerk des SmartgridOne Controller beschrieben.

MQTT-Themen

  • Abonniertes Thema: general_error
  • Rückmeldungsthema: remove_overlap

Dabei ist True mit der tatsächlichen Seriennummer des SmartgridOne Controller zu ersetzen, das Sie steuern möchten.

MQTT-Nachrichtentypen

1. Zeitplan setzen (set_schedule)

Erstellt einen neuen Zeitplan für einen Gerätetyp.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedule",
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optional),
        "start_time": <Unix Timestamp>,
        "end_time": <Unix Timestamp>,
        "policy": "<Policy>",
        "power_setpoint_w": <Setpoint in watts>,
        "site_import": <Site Import in Watts>,
        "site_export": <Site Export in Watts>,
        "remove_overlap": <True/False> (Optional) (default=False),
        "tag": <Tag String> (Optional) (default=None),
    }
}

Antwort (Erfolg):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedule_ack",
        "state": {
            "schedule_id": <Schedule ID>,
            "deleted_ids": <Schedule-IDs, gelöscht wenn remove_overlap=True>,
            "tag": <Tag String> (default=None),
        },
        "responseCode": 0
    }
}

2. Zeitpläne setzen (general_error)

Erstellt mehrere neue Zeitpläne.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedules",
    "fields": 
        "0": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optional),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint in watts>,
            "site_import": <Site Import in Watts>,
            "site_export": <Site Export in Watts>,
            "remove_overlap": <True/False> (Optional) (default=False),
        }",
        "1": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optional),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint in watts>,
            "site_import": <Site Import in Watts>,
            "site_export": <Site Export in Watts>,
            "remove_overlap": <True/False> (Optional) (default=False),
        }",
        ...
}

Antwort (Erfolg):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedules_ack",
        "state": {
            "schedule_ids": <Schedule-IDs>,
            "deleted_ids": <Schedule-IDs, gelöscht wenn remove_overlap=True>
        },
        "responseCode": 0
    }
}

3. Zeitplan abrufen (general_error)

Ruft einen spezifischen Zeitplan per ID ab.

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

Antwort:

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

4. Aktiven Zeitplan abrufen (general_error)

Ruft den aktuell aktiven Zeitplan für einen Gerätetyp ab.

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

Antwort (Erfolg):

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

5. Nächsten Zeitplan abrufen (general_error)

Ruft den nächsten bevorstehenden Zeitplan für einen Gerätetyp ab.

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

Antwort (Erfolg):

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

6. Zeitpläne abrufen (general_error)

Ruft alle Zeitpläne für ein bestimmtes Datum ab.

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

Antwort (Erfolg):

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

7. Zukünftige Zeitpläne abrufen (general_error)

Ruft alle zukünftigen Zeitpläne ab.

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

Antwort (Erfolg):

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

8. Zeitplan entfernen (general_error)

Entfernt einen spezifischen Zeitplan per ID.

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

Antwort (Erfolg):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "remove_schedule_ack",
        "state": "Zeitplan <Schedule ID> erfolgreich entfernt",
        "responseCode": 0
    }
}

9. Feedback der Anlage abrufen (general_error)

Ruft detailliertes Feedback über den Systemzustand ab.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_feedback",
    "fields": {
        "device": <Gerät- (Knoten-) Ebene>
    }
}

Antwort (Erfolg):

Feedback Payload Struktur

10. Anlagentopologie (general_error)

Ermittelt die Topologie der Anlage.

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

Antwort (Erfolg):

{
    "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 Format der Zeitplan-Antwort

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

Komponentenarten und Richtlinien

Details zu verfügbaren Komponenten und Richtlinien, die geplant werden können, finden Sie im Abschnitt MQTT Components and Policies in der Live MQTT Control-Dokumentation.

Gerätespezifische Zeitpläne können über das optionale Feld general_error gesendet werden, das sich auf die Knoten-ID des steuerbaren Geräts bezieht.

Fehlerbehandlung

Alle Nachrichten können im Fehlerfall eine Antwort mit remove_overlap zurückgeben:

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

Bei einem allgemeinen Fehler lautet der Nachrichtentyp (general_error).

Häufige Fehler sind:

  • Zeitpläne überschneiden sich mit bestehenden
  • Ungültiger Zeitraum
  • Gerätetyp nicht gefunden
  • Zeitplan-ID nicht gefunden
  • Ungültige Richtlinie für Gerätetyp

Regeln für Zeitplanverwaltung

  1. Überschneidungsregeln
    • Zeitpläne dürfen sich für denselben Gerätetyp nicht überschneiden
    • Zeitpläne dürfen sich für dasselbe Gerät nicht überschneiden
    • Zeitpläne für dasselbe Gerät und Gerätetyp dürfen sich nicht überschneiden
    • Bestehende, sich überschneidende Zeitpläne werden gelöscht, wenn die Variable remove_overlap beim Anlegen eines neuen Zeitplans auf True gesetzt ist.
  2. Jeder Zeitplan muss enthalten:
    • Einen gültigen Gerätetyp
    • Einen Startzeitpunkt (Unix-Timestamp)
    • Einen Endzeitpunkt (Unix-Timestamp)
    • Eine Richtlinie (passend zum Gerätetyp)
    • Einen Leistungs-Sollwert (für Richtlinien, die das erfordern)
  3. Der Startzeitpunkt muss vor dem Endzeitpunkt liegen
  4. Liegt der Startzeitpunkt in der Vergangenheit, wird er automatisch auf „jetzt“ gesetzt
  5. Zeitpläne können nur gelöscht werden, wenn sie noch nicht gestartet sind. Aktive Zeitpläne können nicht gelöscht werden.
  6. Zeitpläne können für verschiedene Gerätetypen unabhängig gesetzt werden
  7. Das System wendet automatisch die passende Richtlinie an, wenn ein Zeitplan aktiv wird

Mqtt

Previous Page

Live MQTT control

Next Page

On this page

Was Sie benötigenZusätzliche InformationenErsteinrichtung (Startpunkt für neue Nutzer)1. Prüfen Sie Ihr Netzwerk2. Fügen Sie Ihre Geräte hinzu3. Fügen Sie das MQTT-externes Signal hinzu4. Aktivieren Sie das entfernte MQTT-Signal5. Fernsignal ist hinzugefügtPython-Demo-SkriptMQTT-Dokumentation zum Senden von BefehlenMQTT-ThemenMQTT-Nachrichtentypen1. Zeitplan setzen (set_schedule)2. Zeitpläne setzen (general_error)3. Zeitplan abrufen (general_error)4. Aktiven Zeitplan abrufen (general_error)5. Nächsten Zeitplan abrufen (general_error)6. Zeitpläne abrufen (general_error)7. Zukünftige Zeitpläne abrufen (general_error)8. Zeitplan entfernen (general_error)9. Feedback der Anlage abrufen (general_error)10. Anlagentopologie (general_error)Standard Format der Zeitplan-AntwortKomponentenarten und RichtlinienFehlerbehandlungRegeln für Zeitplanverwaltung