Die Live-MQTT-Steuerung ist für die Live-Steuerung vorgesehen. Informationen zum vorherigen Senden von Zeitplänen finden Sie unter Scheduled MQTT Control instead.
Diese Anleitung hilft Ihnen, MQTT auf Ihrem SmartgridOne Controller zu konfigurieren, um Batterie- und Solaranlagen aus der Ferne zu steuern und zu überwachen.
Ich habe einen SmartgridOne Controller 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 an, bevor Sie mit der Konfiguration beginnen. Support-Tickets und SmartgridX/Insights sind keine Bereitstellungskanäle für neue MQTT-Anmeldedaten.
Das Timeout des Fallback-Mechanismus teilt dem SmartgridOne Controller mit, wie lange auf neue Befehle gewartet werden soll. Wenn der SmartgridOne Controller keine Befehle mehr empfängt, übernimmt er nach Ablauf dieses Timeouts automatisch die Standardstrategie.
Wählen Sie anschließend alle Geräte aus, die Sie in die MQTT-Fernsteuerung aufnehmen möchten.
Die MQTT-Fernsteuerungsoberfläche wurde nun auf dem SmartgridOne Controller.
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 Testcode sendet kontinuierlich die folgenden Befehle:
Der SmartgridOne Controller antwortet kontinuierlich mit einer „Feedback“-Nachricht, die die gemessenen Netz- und Anlagenleistungswerte enthält. Diese Funktion ist ebenfalls in diesem Beispiel enthalten.
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 dies erfolgreich war, können Sie weitere Arten von Befehlen senden. Alle Befehle sind in unserer Dokumentation zur MQTT-Fernsteuerung beschrieben.
Dieser Abschnitt beschreibt das MQTT-Nachrichtenformat und die Payload-Anforderungen für die Fernsteuerung von Leistungsrichtlinien auf Geräten im Netzwerk des SmartgridOne Controllers.
Das zum Senden von Befehlen verwendete MQTT-Topic ist wie folgt aufgebaut:
standard1/rp_one_s/remoteControlMetrics/'controller SN'
Dabei ist „controller SN“ durch die tatsächliche Seriennummer des SmartgridOne Controller zu ersetzen, den Sie steuern möchten.
Befehle werden als JSON-Payloads gesendet. Die Payload-Struktur dient dazu, verschiedene Leistungsmanagementrichtlinien und Sollwerte für unterschiedliche Komponenten des Smart-Grid-Systems festzulegen. Die folgenden Beispiele verwenden fiktive Kennungen und beispielhafte Grenzwerte. Ersetzen Sie die Standortknoten-ID, den Zeitstempel und die Werte durch die für Ihre Installation geeigneten Angaben:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "setpoint",
"storage_power_setpoint_w": 5000,
"site_policy": "limit",
"site_import": 25000
}
}
Mehrere Gerätetypen (z. B. Batterien + Solar) können gleichzeitig gesteuert werden.
<Component>_policy (String): Richtlinientyp für die Komponente. Wenn dieser weggelassen wird, kann eine vorherige Gruppenrichtlinie bis zu ihrem ursprünglichen Timeout aktiv bleiben. Verwenden Sie eine explizite fallback-Richtlinie, um die Steuerung abzugeben.<Component>_power_setpoint_w (Float): Gewünschter Leistungssollwert in Watt für die Komponente. Dies ist optional und nur relevant, wenn eine entsprechende Richtlinie angegeben ist.Anlagen desselben Typs (z. B. zwei Batterien) werden zu einer Komponente zusammengefasst. Wenn beispielsweise zwei 5-kWh-Batterien installiert sind, werden sie als eine 10-kWh-Batterie behandelt.
Jede Komponente im fields-Objekt kann eine Richtlinie und einen Leistungssollwert enthalten. Die folgenden Komponenten können gesteuert werden:
solar_policy und solar_power_setpoint_w:
storage_policy und storage_power_setpoint_w:
heat_pump_policy:
switched_load_policy:
variable_power_load_policy und variable_power_load_power_setpoint_w:
Anstatt Steuerungsstrategien und Sollwerte festzulegen, können für Speicher- und Solargeräte auch Leistungsgrenzen festgelegt werden.
Zum Beispiel:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "limit",
"storage_maxChargePower_W": 10000,
"storage_maxDischargePower_W": 10000,
"solar_policy": "limit",
"solar_maxProductionPower_W": 15000
}
}
Das Präfix des Feldes ist storage, solar oder die zutreffende Geräte-Knoten-ID. Fügen Sie beim Senden von Befehlen, die nur Grenzwerte enthalten, wie oben die entsprechende limit-Richtlinie ein. Die Grenzwerte von Befehlen sind nichtnegative Beträge: Beispielsweise storage_maxDischargePower_W: 10000 bedeutet eine Entladegrenze von 10 kW. Dies unterscheidet sich vom Feedback, bei dem max_discharge_power_W negativ oder null ist.
Der Standort kann separat gesteuert werden. Die folgenden Standortbefehle können an den Controller gesendet werden:
defaultoder einfallback
Alle aktiven Standortbefehle entfernenexport
Die Einspeisegrenze des Standorts festlegenimport
Die Bezugsgrenze des Standorts festlegensetpoint
Ein Standortsollwert kann in beide Richtungen um bis zu 5 % abweichensetpoint_A
Noch nicht implementiertDie folgenden Variablen sind Parameter zur Spitzenlastkappung und werden nur angewendet, wenn die Batteriestrategie auf Spitzenlastkappung eingestellt ist.
startChargeBelow_WstopChargeAbove_WstartDischargeAbove_WstopDischargeBelow_WEin Standortsollwert ist NICHT mit einer Bezugs-/Einspeisegrenze kompatibel.
Zum Beispiel:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "self-consumption",
"site_policy": "limit",
"site_export": 10000,
"site_import": 25000
}
}
Anstelle von Gerätegruppen nach Typ können auch bestimmte Geräte gesteuert werden. Die Nachricht ist identisch aufgebaut:
nodeId_policy und nodeId_power_setpoint_wWenn zwei Befehle an dieselbe Anlage gesendet werden (z. B. ein gerätespezifischer Befehl an einen Solarwechselrichter und ein Befehl an alle Solargeräte), hat die gerätespezifische Steuerung Vorrang vor der Steuerung nach Gerätetyp.
Das Weglassen einer Gruppenrichtlinie führt nicht zu einer sofortigen Aufhebung: Ein zuvor empfangener Gruppenbefehl kann bis zu seinem ursprünglich konfigurierten Timeout aktiv bleiben. Verwenden Sie einen expliziten fallback-Befehl für die Gruppe oder das Gerät, wenn Sie die Fernsteuerung abgeben möchten. Gerätespezifische Befehle werden nicht im selben Cache für Gruppenbefehle beibehalten. Siehe dazu den folgenden Hinweis zum leeren Befehl.
Wenn überhaupt kein Befehl gesendet wird, werden nach 60 Sekunden (oder nach dem konfigurierten Timeout) die Standardrichtlinien für die Anlagen wieder aktiviert.
Ein aktiver Befehl kann durch Senden einer Fallback-Befehl message.
Ein Fallback-Befehl cancel den bestehenden Befehl immediately und das SmartgridOne Controller übernimmt die Steuerung der Anlage. Die ausgeführte Richtlinie hängt davon ab, was in den Einstellungen des SmartgridOne Controller Settings.
festgelegt ist. Dies kann auch verwendet werden, wenn ein sekundäres Steuersignal, beispielsweise ein Zeitplan, als Fallback dient.
Nachrichtenbeispiele:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {
"storage_policy": "fallback"
}
}
Ein leerer Befehl gibt aggregiertes Standort-Feedback zurück, ist jedoch keine schreibgeschützte Statusabfrage. Er ersetzt die zuletzt empfangene Nachricht und kann frühere gerätespezifische Befehle entfernen. Noch gültige Gruppenrichtlinien können bis zum Ablauf ihres ursprünglichen Fallback-Timeouts wiederverwendet werden. Verwenden Sie dies nicht als Abfrage, wenn die gerätespezifische Steuerung unverändert bleiben soll.
Der leere Befehl ist wie folgt aufgebaut:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1791547200,
"fields": {}
}
Nachfolgend ein Beispiel für eine Payload zum Festlegen verschiedener Richtlinien und Sollwerte:
{
"extraTags": {
"nodeId": "DEMO_CONTROLLER_SiteA"
},
"time": 1714652046,
"fields": {
"solar_policy": "setpoint",
"solar_power_setpoint_w": 5000,
"storage_policy": "setpoint",
"storage_power_setpoint_w": -5000
}
}
In diesem Beispiel wird die Solarproduktion auf 5000 Watt begrenzt, und der negative Speichersollwert fordert eine Entladung mit 5000 Watt an. Ein positiver Speichersollwert würde das Laden anfordern. Das Weglassen einer Gruppenrichtlinie hebt den vorherigen Befehl nicht unbedingt auf. Verwenden Sie eine explizite fallback-Richtlinie, wenn Sie diese Gruppe wieder der lokalen Steuerung übergeben möchten.
Abonnieren Sie das Feedback-Topic, um den Zustand des Standorts und das Ergebnis eines verarbeiteten Befehls zu lesen:
standard1/outbound/remoteControlMetrics/feedback/<Controller SN>
Ersetzen Sie <Controller SN> durch die Seriennummer des Controllers. Die Seriennummer im Topic und die siteNodeId des Standorts sind unterschiedliche Kennungen: Verwenden Sie stets die tatsächliche Standortknoten-ID, die nicht unbedingt mit _site_0.
Die Standardverbindung für die Live-Steuerung gibt einen Zustands-Snapshot zurück, wenn sie einen Befehl akzeptiert und die Steuerungsverarbeitung auslöst. Dies bestätigt nicht, dass das physische Gerät den neuen Sollwert bereits erreicht hat.
Ein leerer Befehl mit "fields": {} gibt ebenfalls den aggregierten Zustand zurück, ist jedoch keine abfrage ohne Seiteneffekte: Er ersetzt die letzte Nachricht und kann zuvor adressierte gerätespezifische Befehle entfernen. Frühere Gruppenrichtlinien können nur innerhalb ihres ursprünglichen Fallback-Timeouts aktiv bleiben. Verwenden Sie keine leeren Befehle zur Abfrage, wenn die gerätespezifische Steuerung unverändert bleiben soll.
Einige anbieterspezifische MQTT-Verbindungen veröffentlichen außerdem ungefähr alle 30 Sekunden unaufgefordert Feedback. Diese periodische Veröffentlichung ist verbindungsspezifisch und kein garantiertes Intervall für jede MQTT-Integration. Periodische Snapshots und Antworten auf leere Befehle enthalten keinen gerätespezifischen Zustand.
Verwenden Sie das JSON Schema zur Validierung von Feedback-Payloads oder das AsyncAPI-Dokument zur Beschreibung des Feedback-Kanals des Controllers. Beide beschreiben Feedback, nicht die vollständige Befehlsschnittstelle oder anbieterspezifische Erweiterungen.
| Füllen Sie die Felder aus: | Der Fairland Inverx Elite unterstützt zwei Steuerungsmodi: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
time | Ganzzahl | Feedback-Zeitstempel in Unix-Sekunden. |
requestTime | Ganzzahl | Aus dem ganzzahligen time-Wert des Befehls kopierter Zeitstempel. Er ist 0 wenn dieser Wert fehlt oder keine Ganzzahl ist. Periodische Integrationen können hier den Zeitstempel des Snapshots verwenden. Gehen Sie daher nicht davon aus, dass ein unaufgeforderter Snapshot zu einem passenden Befehl gehört. |
siteNodeId | Zeichenfolge | Tatsächliche Knoten-ID des Standorts, der das Feedback sendet. Erzeugen Sie sie nicht aus der Seriennummer. |
fields | Objekt | Leeres Objekt in Feedback-Nachrichten. |
data.responseCode | Ganzzahl | 0 bei einer erfolgreich erstellten Feedback-Antwort; 1 bei einem Verarbeitungsfehler. Schreibweise und Groß-/Kleinschreibung sind relevant. |
data.state | Objekt | Nach Asset-Typ gruppierter Zustand. Bei Erfolg vorhanden, bei einem Fehler nicht vorhanden. |
data.errors | Zeichenfolge | Mit erfolgreichem Feedback zurückgegebener Fehler-/Status-Text; "" wenn keiner vorhanden ist. Dies ist weder ein Objekt noch ein Array. |
data.error | Zeichenfolge | Bei responseCode: 1 zurückgegebener Fehlertext anstelle von state und errors. |
responseCode: 0 beweist nicht, dass jedes Gerät seinen angeforderten Sollwert erreicht hat. Lesen Sie zusätzlich die gemessene Leistung, ausgeführten Sollwerte, Beschriftungen von Begrenzungen und Gerätefehlercodes aus.
Dieser beispielhafte Snapshot verwendet fiktive Kennungen und bewusst nur eine kleine Auswahl an Messwerten. Weitere verfügbare Felder werden weiter unten beschrieben.
{
"time": 1791547201,
"requestTime": 1791547200,
"siteNodeId": "DEMO_CONTROLLER_SiteA",
"fields": {},
"data": {
"responseCode": 0,
"errors": "",
"state": {
"load": { "load_power_W": 12000 },
"grid": { "active_power_W": 7000, "import_limit_W": 25000 },
"storage": {
"active_power_W": -5000,
"mean_soc_perc": 60,
"max_charge_power_W": 10000,
"max_discharge_power_W": -10000,
"dynamic_max_charge_power_W": 8000,
"dynamic_max_discharge_power_W": -9000,
"executed_power_W": -5000,
"executed_policy": ["setpoint"],
"errorCodes": {},
"nr_devices": 1
}
}
}
}
Versuchen Sie bei einem Verarbeitungsfehler nicht, data.state:
{
"time": 1791547201,
"requestTime": 1791547200,
"siteNodeId": "DEMO_CONTROLLER_SiteA",
"fields": {},
"data": {
"responseCode": 1,
"error": "Command could not be processed"
}
}
Die Abschnittsnamen sind grid, load, storage, solar, heat_pump, switched_load und variable_power_load. Jeder Asset-Abschnitt fasst Geräte dieses Typs zusammen. Zwei Solargeräte mit jeweils 3 kW Kapazität ergeben beispielsweise eine aggregierte Kapazität von 6 kW.
solar und storage kann ein leeres Objekt ({}) sein, wenn keine passenden Geräte vorhanden sind. Die Abschnitte für Wärmepumpen, geschaltete Lasten und variable Leistungslasten behalten in diesem Fall null Zähler, leere Arrays/Maps und zutreffende Leistungswerte mit dem Wert null bei.
Behandeln Sie ein fehlendes Feld oder null des WattsNext-Gehäuses ein.nicht verfügbar und nicht als null. Viele Messwerte werden bei unbekanntem Zustand weggelassen; einige Felder enthalten ausdrücklich null. Eine Summe kann nur die Geräte enthalten, für die ein Wert verfügbar ist. Leiten Sie nicht allein aus nr_devices auf eine vollständige Messwertabdeckung.
Die folgenden gemeinsamen Felder gelten für storage, solar, heat_pump, switched_load und variable_power_load:
| Füllen Sie die Felder aus: | Aggregattyp | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
executed_policy | Array aus Zeichenfolgen und/oder null-Einträgen | Von den Geräten gemeldete unterschiedliche Richtlinien. Das Array kann null für eine unbekannte Richtlinie enthalten; anhand der Reihenfolge lassen sich keine Geräte identifizieren. |
constraint_ph0_label | Optionales Array aus Zeichenfolgen | Eine Beschriftung pro Gerät, das eine Begrenzung meldet. Beschriftungen können mehrfach vorkommen. Der Schlüssel wird weggelassen, wenn kein Gerät eine Beschriftung meldet. Verwenden Sie gerätespezifisches Feedback, um eine Beschriftung zuzuordnen. |
errorCodes | Objekt | Ordnet Knoten-IDs Arrays mit Gerätefehler-/Statuseinträgen zu: { "DEMO_BATTERY_1": [...] }. Der Wert ist {} wenn keine solchen Einträge gemeldet werden. |
nr_devices | Ganzzahl | Anzahl der in diesem Abschnitt dargestellten Geräte, nicht die Anzahl der Geräte mit gültigen Messwerten. |
individual_devices | Bedingtes Objekt | Gerätespezifisches Feedback, nach Knoten-ID indiziert; siehe Gerätespezifisches Feedback. |
Jeder Messwert und jeder Grenzwert in state.grid ist optional und wird bei unbekanntem Zustand weggelassen. Werte sind Zahlen; Leistung wird in Watt, Energie in Wattstunden und Strom in Ampere angegeben.
| Füllen Sie die Felder aus: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|
active_power_W | Netz-Wirkleistung. Positiv bedeutet Bezug, negativ bedeutet Einspeisung. |
import_limit_W | Aktueller Netzbezugsgrenzwert. |
export_limit_W | Aktueller Netzeinspeisegrenzwert. |
nominal_current_A | Für den elektrischen Schutz des Standorts konfigurierter Nennstrom. |
today_imported_energy_Wh | Heute bezogene Energie, sofern verfügbar. |
today_exported_energy_Wh | Heute eingespeiste Energie, sofern verfügbar. |
total_imported_energy_Wh | Kumulierte bezogene Energie. |
total_exported_energy_Wh | Kumulierte eingespeiste Energie. |
today_produced_energy_Wh | Heute erzeugte Energie für einen Zähler/Standort, der Produktionsmesswerte bereitstellt. |
total_produced_energy_Wh | Kumulierte erzeugte Energie, sofern bereitgestellt. |
state.load.load_power_W ist eine Zahl oder null. Sie gibt den sonstigen Verbrauch des Standorts an, ohne separat erfassten EV-Lade- und Wärmepumpenverbrauch. Sie ist weder der Gesamtverbrauch des Standorts noch eine andere Bezeichnung für die Netzleistung.
| Füllen Sie die Felder aus: | Typ / Verfügbarkeit | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
energy_capacity_Wh | Optionale Zahl | Zusammengefasste Metadaten zur verfügbaren Batteriekapazität. |
energy_stored_Wh | Optionale Zahl | Aktuell gespeicherte Energie. |
mean_soc_perc | Optionale Zahl | Kapazitätsgewichteter Ladezustand in Prozent. Eine 10-kWh-Batterie mit 20 % und eine 20-kWh-Batterie mit 50 % ergeben 40 %. |
mean_min_soc_perc | Optionale Zahl | Kapazitätsgewichtete minimale Ladezustandsgrenze in Prozent. |
mean_max_soc_perc | Optionale Zahl | Kapazitätsgewichtete maximale Ladezustandsgrenze in Prozent. |
active_power_W | Optionale Zahl | Gemessene Batterieleistung: positiv beim Laden, negativ beim Entladen. |
max_charge_power_W | Zahl | Zusammengefasster statischer Ladestromgrenzwert, positiv oder null. |
max_discharge_power_W | Zahl | Zusammengefasster statischer Entladestromgrenzwert, negativ oder null. Zum Beispiel bedeutet -53000 eine Entladung von bis zu 53 kW. |
dynamic_max_charge_power_W | Zahl | Geschätzte aktuelle Ladefähigkeit, positiv oder null, unter Berücksichtigung der verfügbaren Gerätegrenzwerte und des verfügbaren Ladezustandsspielraums. |
dynamic_max_discharge_power_W | Zahl | Geschätzte aktuelle Entladefähigkeit, negativ oder null, unter Berücksichtigung der verfügbaren Gerätegrenzwerte und des verfügbaren Ladezustandsspielraums. |
executed_power_W | Optionale Zahl | Zusammengefasster Leistungssollwert, der an die Batteriegeräte gesendet wird, nicht die gemessene Leistung. |
today_charged_Wh | Optionale Zahl | Heute in die Batterien geladene Energie. |
today_discharged_Wh | Optionale Zahl | Heute aus den Batterien entladene Energie. |
total_charged_Wh | Optionale Zahl | Kumulativ geladene Energie. |
total_discharged_Wh | Optionale Zahl | Kumulativ entladene Energie. |
Verwenden Sie dynamic_max_charge_power_W und dynamic_max_discharge_power_W für das aktuelle Feedbackformat. Sie ersetzen die früheren Felder realised_charge_power_W und realised_discharge_power_W. Die dynamische Fähigkeit ist eine Schätzung und keine Garantie dafür, dass jeder angeforderte Sollwert ausgeführt werden kann; Standort- und Geräteeinschränkungen gelten weiterhin.
Diese numerischen Felder werden weggelassen, wenn sie nicht verfügbar sind:
| Füllen Sie die Felder aus: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|
active_power_W | Gemessene Leistung der Solargeräte. |
capacity_W | Zusammengefasste nominale Solarkapazität. |
executed_power_W | Zusammengefasster Leistungssollwert, der an die Solargeräte gesendet wird. |
today_energy_Wh | Heute erzeugte Energie. |
total_energy_Wh | Kumulativ erzeugte Energie. |
| Füllen Sie die Felder aus: | Der Fairland Inverx Elite unterstützt zwei Steuerungsmodi: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
active_power_W | Zahl oder null | Zusammengefasste gemessene Wärmepumpenleistung; null wenn nicht verfügbar. |
executed_power_W | Zahl oder null | Zusammengefasste erwartete/angeforderte Wärmepumpenleistung; null wenn nicht verfügbar. |
operation_modes | Array von Betriebsarten oder null-Einträgen | Unterschiedliche gemeldete Betriebsarten, z. B. Sperren, Boost oder Selbststeuerung. Kann null enthalten, wenn die Betriebsart unbekannt ist. |
| Füllen Sie die Felder aus: | Typ / Verfügbarkeit | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
active_power_W | Optionale Zahl | Zusammengefasste gemessene Leistung der geschalteten Verbraucher. |
devices_on | Ganzzahl | Anzahl der Geräte, die den Status „Ein“ melden. |
devices_off | Ganzzahl | Anzahl der als ausgeschaltet gezählten Geräte; ein unbekannter Ein-/Aus-Status wird als ausgeschaltet gezählt. |
executed_power_W | Optionale Zahl | Zusammengefasste erwartete/angeforderte Leistung der geschalteten Verbraucher. |
Der Abschnitt heißt variable_power_load, nicht variable_load.
| Füllen Sie die Felder aus: | Typ / Verfügbarkeit | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
active_power_W | Optionale Zahl | Zusammengefasste Leistung von EVs/Verbrauchern mit variabler Leistung, nicht Netzleistung. |
ev_charging | Ganzzahl | Geräte, die melden, dass ein EV geladen werden muss. Dies bedeutet nicht, dass tatsächlich Strom fließt. |
ev_not_charging | Ganzzahl | Geräte, die keinen Ladebedarf melden, einschließlich Ladegeräten ohne angeschlossenes Fahrzeug. |
executed_power_W | Zahl oder null | Zusammengefasster Leistungssollwert; null wenn nicht verfügbar. |
currentL1_A, currentL2_A, currentL3_A | Optionale Zahl | Zusammengefasster gemessener Strom in jeder Phase. Jedes Phasenfeld kann unabhängig weggelassen werden. |
executed_current_A | Optionale Zahl | Zusammengefasster angeforderter Strom. |
Zähler für geladene Energie, Stromgrenzwerte, Unterstützung des Pausierens und Ladevorgänge gehören zu einzelnen Geräten, nicht zu diesem aggregierten Abschnitt.
Damit der Status eines Geräts enthalten ist, muss der Befehl sein <nodeId>_policy Feld enthalten und ein erkanntes Gerät adressieren. Ein gerätespezifischer Sollwert allein fordert kein Feedback für einzelne Geräte an. Weder ein leerer Befehl noch ein periodischer Snapshot enthält dieses Feedback.
Der Speicherort ist:
data.state.<section>.individual_devices.<nodeId>
Beispielsweise kann ein Befehl, der sowohl "DEMO_BATTERY_1_policy": "setpoint" und "DEMO_BATTERY_1_power_setpoint_w": -5000 enthält, dieses Fragment unter data.state.storage:
{
"executed_policy": ["setpoint"],
"errorCodes": {},
"nr_devices": 1,
"individual_devices": {
"DEMO_BATTERY_1": {
"active_power_W": -5000,
"executed_power_W": -5000,
"executed_policy": "setpoint",
"constraint_ph0_label": null,
"nr_devices": 1
}
}
}
Richtlinien-, Betriebsart- und Einschränkungsfelder pro Gerät sind Einzelwerte, keine aggregierten Listen. Unbekannte Messwerte können null sein. Das errorCodes des Geräts ist ein Array von Fehler-/Statuseinträgen und wird nur aufgenommen, wenn das Gerät Einträge meldet; es handelt sich nicht um eine weitere Node-ID-Zuordnung.
| Gerätetyp | Im individuellen Status verfügbare Felder |
|---|---|
| Solar | active_power_W, today_energy_Wh, total_energy_Wh, capacity_W, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. |
| Speicher | energy_capacity_Wh, mean_soc_perc, energy_stored_Wh, max_charge_power_W, max_discharge_power_W, dynamic_max_charge_power_W, dynamic_max_discharge_power_W, mean_min_soc_perc, mean_max_soc_perc, active_power_W, executed_power_W, executed_policy, constraint_ph0_label, today_charged_Wh, today_discharged_Wh, total_charged_Wh, total_discharged_Wh, nr_devices. |
| Wärmepumpe | active_power_W, operation_modes, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. Trotz des Plurals im Namen ist operation_modes hier eine einzelne Betriebsart. |
| Geschalteter Verbraucher | active_power_W, devices_on, devices_off, executed_power_W, executed_policy, constraint_ph0_label, nr_devices. Die Ein-/Aus-Zähler sind 0oder ein1. |
| EV / Verbraucher mit variabler Leistung | active_power_W, ev_requiring_charge, executed_power_W, today_charged_Wh, today_discharged_Wh, total_charged_Wh, total_discharged_Wh, currentL1_A, currentL2_A, currentL3_A, executed_current_A, executed_policy, min_charge_current_A, max_charge_current_A, allow_zero_current, current_charging_session, previous_charging_session, constraint_ph0_label, nr_devices. |
| Standort, sofern von der Verbindung bereitgestellt | Die verfügbaren Felder aus der oben genannten Netzreferenz unter state.site.individual_devices. Zähler-Feedback verwendet dieselben Felddefinitionen, sofern eine Integration dies bereitstellt; die gewöhnliche Live-Steuerungsverbindung bietet keine allgemeine direkte Adressierung von Stromzählern. |
In der aktuellen Antwort für einzelne Batteriegeräte enthält mean_soc_perc einen Bruchteil trotz der Bezeichnung: 0.6 entspricht 60 %. Das aggregierte storage.mean_soc_perc enthält einen Prozentwert: 60 entspricht 60 %. Die minimalen und maximalen SoC-Felder pro Gerät bleiben Prozentwerte. Wenden Sie nicht dieselbe Umrechnung auf beide Ebenen an.
| Füllen Sie die Felder aus: | Der Fairland Inverx Elite unterstützt zwei Steuerungsmodi: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
ev_requiring_charge | Boolesch | Gibt an, ob dieses Gerät ein EV meldet, das geladen werden muss. |
today_charged_Wh, total_charged_Wh | Zahl oder null | Heute bzw. kumulativ in das Fahrzeug geladene Energie. |
today_discharged_Wh, total_discharged_Wh | Zahl oder null | Heute bzw. kumulativ aus dem Fahrzeug entladene Energie, sofern unterstützt. |
min_charge_current_A, max_charge_current_A | Zahl oder null | Konfigurierter minimaler und maximaler Ladestrom. |
allow_zero_current | Boolesch oder null | Gibt an, ob das Pausieren mit null Ladestrom zulässig ist; null bei unbekanntem Status. |
current_charging_session | Objekt | Aktueller Ladevorgang oder {} bei Nichtverfügbarkeit. Der Schlüssel steht im Singular. |
previous_charging_session | Objekt | Vorheriger Ladevorgang oder {} wenn nicht verfügbar. |
Ein ausgefülltes Objekt eines Ladevorgangs enthält:
| Füllen Sie die Felder aus: | Der Fairland Inverx Elite unterstützt zwei Steuerungsmodi: | 0 = undefiniert, 1 = lokale Steuerung, 2 = Fernsteuerung durch Fluvius |
|---|---|---|
pluginTime | Zeichenfolge | Anschlusszeit als ISO-8601-Datum und -Uhrzeit. |
endTime | Zeichenfolge oder null | Endzeit des Ladevorgangs, sofern bekannt. |
firstChargingStartTime | Zeichenfolge oder null | Startzeit des ersten Ladevorgangs, sofern bekannt. |
isFull | Boolesch | Gibt an, ob der Ladevorgang das Fahrzeug als vollständig geladen meldet. |
chargedEnergy_Ws | Zahl | Während dieses Ladevorgangs geladene Energie in Wattsekunden. Für Wattstunden durch 3600 teilen. |
usedPhases | Array aus Zeichenfolgen oder null | Beim Laden verwendete Phasen, sofern bekannt. |
historicMaxChargeCurrent_A | Zahl | Während des Ladevorgangs aufgezeichneter höchster Ladestrom. |
vpp_id gehört zu einer separat konfigurierten VPP-Verbindung. Fügen Sie es nicht zur gewöhnlichen Live-MQTT-Konfiguration oder zu Befehlen hinzu; der standardmäßige Feedbackstatus erfordert es nicht. Anbieterspezifische Erweiterungen dürfen nicht als Teil der allgemeinen Live-Steuerungsschnittstelle behandelt werden.
Die von einem externen Signal gesendeten Sollwerte können intern durch das EMS begrenzt werden. Die folgende Tabelle gibt einen Überblick über mögliche Beschränkungen für dasconstraint_ph0_label Feedback-Feld.
| Label | Node Types | Ermöglichte Messwerte |
|---|---|---|
breaker_current | Site | Absicherungsstrom auf Site-Ebene |
max_charge_current (EV) | EV | Maximales Ladestrom-Limit. |
min_charge_current | EV | Minimales Ladestrom-Limit. |
nom_current | EV | Nennstrom-Limit des Geräts. |
max_export_power | Site | Einspeise-Limit der Site |
max_import_power | Site | Bezugs-Limit der Site |
max_charge_power | EV, Storage | Maximales Ladeleistungs-Limit. |
max_discharge_power | Speicher | Maximales Entladeleistungs-Limit. |
nom_charge_power | EV, Storage | Nennladeleistungs-Limit. |
nom_discharge_power | Speicher | Nennentladeleistungs-Limit. |
nom_production_power | PV | Nennproduktionsleistungs-Limit. |
device_reported_max_charge_power | Speicher | Maximales Ladeleistungs-Limit des Geräts. |
device_reported_max_charge_current | Speicher | Maximales Ladestrom-Limit des Geräts. |
device_reported_max_discharge_power | Speicher | Maximales Entladeleistungs-Limit des Geräts. |
device_reported_max_discharge_current | Speicher | Maximales Ladestrom-Limit des Geräts. |
ev_charging_suspended | EV | Der Ladevorgang des Elektrofahrzeugs ist pausiert |
setpoint_power | All | Der Sollwert ist der begrenzende Faktor – keine internen Beschränkungen. |
high_soc_limit_charge_power | Speicher | Das Laden wird durch den hohen Batterie-SOC begrenzt. |
low_soc_limit_discharge_power | Speicher | Das Entladen wird durch den niedrigen Batterie-SOC begrenzt. |
soc_power_curve_max_charge_power | Speicher | Das Laden wird durch die SOC-Leistungskurve begrenzt. |
soc_power_curve_max_discharge_power | Speicher | Das Entladen wird durch die SOC-Leistungskurve begrenzt. |
too_low_soc_force_charge_power | Speicher | Minimale Ladeleistung aufgrund eines zu niedrigen SOC. |
peakshaving_charge_threshold | Speicher | Laden aufgrund von Peak-Shaving-Parametern. |
peakshaving_discharge_threshold | Speicher | Entladen aufgrund von Peak-Shaving-Parametern. |
self_consumption_charge_power | EV, Storage | Laden aufgrund der Eigenverbrauchsstrategie. |
self_consumption_discharge_power | EV, Storage | Entladen aufgrund der Eigenverbrauchsstrategie. |
self_consumption_load_power | Switched Load | Verbrauch aufgrund der Eigenverbrauchsstrategie. |
external_signal_device_power_consumption_limit | EV, Switched Load | Das externe Signal begrenzt den Geräteverbrauch. |
external_signal_device_power_production_limit | PV | Das externe Signal begrenzt die Geräteproduktion. |
external_signal_battery_charge_power_limit | Speicher | Das externe Signal begrenzt die Ladeleistung der Batterie. |
external_signal_battery_discharge_power_limit | Speicher | Das externe Signal begrenzt die Entladeleistung der Batterie. |
setpoint_current | EV | Strom-Sollwertbegrenzung. |
observed_max_current_demand | EV | Beobachteter maximaler Strom, der vom EV verwendet wird. |
near_fully_charged | EV | Der Strom wird durch ein nahezu vollständig geladenes EV begrenzt. |
fully_charged | EV | Das EV ist vollständig geladen. |
dynamic_derated_min_power | Speicher | Der Sollwert ist begrenzt, da das Gerät die erwartete Sollwertleistung nicht erreichen kann. |
dynamic_derated_max_power | Speicher | Der Sollwert ist begrenzt, da das Gerät die erwartete Sollwertleistung nicht erreichen kann. |
Fehlercodes werden in Bereiche gruppiert, die die allgemeine Kategorie des Problems angeben:
| Range | Category |
|---|---|
-200 | Verbindungsfehler |
-300 | Antwortfehler |
-500 | Treiberfehler |
-600 | Steuerungsfehler |
Die einzelnen Fehlercodes sind unten aufgeführt.
Verbindungsprobleme zwischen dem EMS und dem Gerät.
| Code | Label | Additional Fields |
|---|---|---|
-204 | Connection Refused | |
-209 | No Route To Host | |
-210 | No IP For MAC Address |
Das Gerät ist verbunden, aber seine Antworten sind ungültig.
| Code | Label | Additional Fields |
|---|---|---|
-300 | Device Unavailable Error | |
-310 | No Response Error | |
-402 | Device Status Error | Message |
| Code | Label | Additional Fields |
|---|---|---|
-600 | Setpoint Ignored Error | |
-602 | Setpoint Rejected Error |
| Code | Label | Additional Fields |
|---|---|---|
-1000 | No Measurements | |
-1001 | No Power Measurements | |
-1003 | No Power Setpoint | |
-1005 | Setpoints Not Followed | nomPowerDeviation_frac, setpointDeviation_frac |
-1006 | Limits Not Followed |
Bei der Verwendung von MQTT ist es wichtig, die Unterschiede in den Spezifikationen der Versionen 3.1, 3.1.1 und 5.0 zu berücksichtigen, insbesondere hinsichtlich des Verhaltens des Brokers, wenn Clients auf nicht autorisierten Topics veröffentlichen.
Gemäß der MQTT-3.1.1-Spezifikation (siehe OASIS MQTT 3.1.1 Specification, Abschnitt MQTT-3.3.5-2) muss ein Broker die Verbindung beenden, sobald ein Client eine PUBLISH-Nachricht an ein Topic sendet, für das er keine Berechtigung besitzt. Dieses Verhalten kann zu unerwarteten Verbindungsabbrüchen bei Clients führen, die versuchen, auf falsch konfigurierte oder nicht autorisierte Topics zu veröffentlichen.
In MQTT 3.1 ist diese Anforderung nicht enthalten. Wenn ein Client unter dieser Version auf ein nicht autorisiertes Topic veröffentlicht, ignoriert der Broker die Nachricht normalerweise (Silent Drop), ohne die Verbindung zu beenden. Dadurch eignet sich MQTT 3.1 in manchen Fällen besser, wenn Robustheit gegenüber Konfigurationsfehlern oder vorübergehend fehlenden Berechtigungen wichtiger ist als eine strikte Durchsetzung der Sicherheitsvorgaben.
MQTT 5.0 ermöglicht zwar die Verwendung von Reason Codes (z. B. PUBACK mit einem Ablehnungsgrund), dies setzt jedoch Unterstützung sowohl auf Client- als auch auf Serverseite voraus. Eine Migration auf MQTT 5.0 erfordert daher zusätzlichen Implementierungsaufwand.
Folgen der Nichtbeachtung der Kompatibilität: Wenn sich ein Client mit MQTT 3.1.1 verbindet und versucht, Nachrichten an nicht autorisierte Topics zu veröffentlichen, beendet der Broker die Sitzung abrupt. Dies kann zu Instabilität, Verbindungsverlust oder einer erhöhten Auslastung durch wiederholte Verbindungsaufbauversuche führen.
Recommended Approach: Für Systeme, in denen Clients möglicherweise (vorübergehend) versuchen, auf nicht autorisierte Topics zu veröffentlichen, oder in denen die Fehlerbehandlung nicht strikt implementiert ist, empfehlen wir die Verwendung von MQTT 3.1. Dies gewährleistet stabilere Verbindungen und verhindert unbeabsichtigte Verbindungsabbrüche während des Betriebs.