Die geplante MQTT-Steuerung ist für zeitlich vorab geplante Nachrichten gedacht. Für die Live-Steuerung siehe stattdessen Live MQTT Control instead.
Diese Anleitung hilft Ihnen, MQTT auf Ihrem Sofar EMS zu konfigurieren, um Batterie- und Solaranlagen aus der Ferne zu steuern und zu überwachen.
Diese Anleitung hilft Ihnen, MQTT auf Ihrem Sofar EMS zu konfigurieren, um Batterie- und Solaranlagen aus der Ferne zu steuern und zu überwachen.
Ich habe einen Sofar EMS und möchte ihn für die MQTT-Fernsteuerung einrichten.
Baselines werden nicht von allen Controllern unterstützt. Bitte kontaktieren Sie den Support für weitere Informationen.Bevor Sie fortfahren, stellen Sie sicher, dass Ihr Netzwerk und Ihre Geräte bereit sind, indem Sie der Anleitung Wiring Best Practices
Fordern Sie den erforderlichen Eniris-MQTT-Benutzernamen und das Passwort über denEniris-Webshop bevor Sie mit der Konfiguration beginnen.
Typ: integer
Die MQTT-Fernsteuerungsoberfläche wurde nun auf dem Sofar EMS.
Wir können nun anhand eines einfachen Beispiels einige grundlegende Befehle senden. In der Spalte „Status“ sehen Sie, ob ein Befehl aktiv ist.
Ein guter erster Schritt ist, Ihre neu eingerichtete Integration anhand eines einfachen Beispiels zu testen.
Dieser Test-Code sendet kontinuierlich den folgenden Zeitplan:
Der Sofar EMS antwortet mit einer Bestätigungsmeldung, die die eindeutige Zeitplan-ID enthält, oder mit einer Fehlermeldung.
Wir holen dann den nächsten Zeitplan für beide Gerätetypen ab, um zu bestätigen, dass der Befehl erfolgreich war.
Laden Sie die untenstehende Datei in Ihre bevorzugte Python-IDE herunter. Tragen Sie Ihre Seriennummer und die über den Eniris-Webshop angeforderten MQTT-Anmeldedaten ein und führen Sie anschließend das Skript aus:
Wenn das erfolgreich ist, können Sie mit dem Senden anderer Nachrichtentypen fortfahren. Alle Nachrichten werden unten beschrieben.
Dieser Abschnitt beschreibt das MQTT-Nachrichtenformat und die Anforderungen an die Nutzlast zur Einrichtung einer geplanten Steuerung von Geräten im Netzwerk des Sofar EMSs.
standard1/rp_one_s/remoteScheduleMetrics/<controller SN>standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>Where <controller SN> ersetzt werden soll, das Sie steuern möchten.Sofar EMS zu ersetzen, den Sie steuern möchten.
set_schedule)Antwort (Erfolg):
{
"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),
}
}
{
"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 deleted if remove_overlap=True>
"tag": <Tag String> (default=None),
},
"responseCode": 0
}
}
set_schedules)Antwort (Erfolg):
{
"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),
}",
...
}
{
"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 deleted if remove_overlap=True>
},
"responseCode": 0
}
}
get_schedule)Antwort:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
get_active_schedule)Antwort (Erfolg):
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
get_next_schedule)Antwort (Erfolg):
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
get_schedules)Antwort (Erfolg):
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
get_future_schedules)Antwort (Erfolg):
{
"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": [<Schedule>, ...]
},
"responseCode": 0
}
}
remove_schedule)Antwort (Erfolg):
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schedule <Schedule ID> removed successfully",
"responseCode": 0
}
}
get_feedback)Antwort (Erfolg):
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}
Weitere Informationen zu den einzelnen Feldern finden Sie hier:
get_toplogy)Antwort (Erfolg):
{
"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>,
"isControllable": <boolean>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}
{
"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>
}
MQTT Components and Policies in der Dokumentation zur Live MQTT-Steuerung.Gerätespezifische Zeitpläne können mit dem optionalen
Feld gesendet werden, das sich auf die Node-ID des steuerbaren Geräts bezieht.node_idFehlerbehandlung
zurückgeben:responseCode: 1Wenn ein nicht zusammenhängender Fehler auftritt, lautet der Nachrichtentyp (
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}
Häufige Fehler umfassen:general_error).
Zeitplanüberschneidung mit bestehenden Zeitplänen
remove_overlap gesetzt ist.TrueJeder Zeitplan muss folgende Angaben enthalten: