Reduxi Controller - MQTT API
1 Supporto delle versioni MQTT
È supportata la versione 3. x. Non è invece supportata la 5. x.
2 Documentazione dell'API MQTT del Reduxi Controller
La documentazione di tutti i topic MQTT disponibili e dei metodi di sottoscrizione è disponibile su:
La documentazione MQTT è generata dal punto di vista del Reduxi Controller.
Quando si leggono dati da Reduxi MQTT, compare il termine "PUB". Perché PUB? Perché i dati vengono pubblicati (publish) dal Reduxi Controller sul topic.
Quando si impostano valori sul Reduxi Controller tramite MQTT, compare il termine "SUB". Perché SUB? Perché il Reduxi Controller si sottoscrive (subscribe) al topic e ne legge i dati, applicando i valori inviati.
Di seguito sono riportate alcune informazioni su come impostare il Reduxi Configurator per iniziare a ricevere dati su specifici broker MQTT. Nell'ultimo paragrafo si trova un esempio di lettura e di impostazione dei setpoint su un dispositivo.
3 Configurazione dell'interfaccia MQTT di Reduxi
Accedere al dispositivo Reduxi Controler e andare in System settings. In System settings selezionare MQTT v3 e definire i dati del broker MQTT:
- Host (solo dominio/IP, senza mqtts://)
- Porta
- Nome utente
- Password
Descrizione testuale di questa immagine
Schermata della pagina MQTT v3 connection di Reduxi Configurator. Menu a sinistra sotto il logo reduxi CONFIGURATOR: Users; Devices; Strategies; System (aperto, segno meno); Identifier; Network; Open VPN; Connector (aperto); Cloud; MQTT v3 (selezionato, in grassetto); iFlex; Configuration (chiuso, segno più); Distribution System Operators; Time. Intestazione della pagina: MQTT v3 connection, icona verde di collegamento a destra. Tabella di stato: Client: vuoto; Host: vuoto; Connected: segno di spunta verde. Sezione del modulo Mqtt connection: Host: mqtt.example.com (grigio, stile segnaposto); Port: 1883 (grigio); Username: vuoto; Password: vuoto; Server CA chain (PEM format): Choose File, No file chosen; Client public certificate (PEM format): Choose File, No file chosen; Client private key (PEM format): Choose File, No file chosen; Readout interval: 5 sec. Pulsanti: Clear, Save.
4 Client Windows
Per raccogliere i dati si può provare MQTT Explorer, collegandosi al broker MQTT con i seguenti dati:
È possibile collegarsi al broker MQTT avviando un'applicazione MQTT Explorer.
Descrizione testuale di questa immagine
Schermata di MQTT Explorer (barra superiore: DISCONNECT, casella di ricerca) con la finestra MQTT Connection aperta sopra la finestra principale oscurata. Elenco a sinistra: pulsante giallo con il segno più con l'etichetta Connections; una voce salvata mqtt.example.com con testo piccolo mqtt://mqtt.example.com:1883/ (selezionata). Titolo della finestra: MQTT Connection, con mqtt://mqtt.example.com:1883/ accanto. Campi: Name: mqtt.example.com; Validate certificate: interruttore disattivato; Encryption (tls): interruttore disattivato; Protocol: mqtt:// (menu a discesa); Host: mqtt.example.com; Port: 1883; Username: vuoto; Password: mascherata con puntini, con un'icona a occhio per mostrare/nascondere. Pulsanti: DELETE, ADVANCED, SAVE (giallo), CONNECT (scuro). Sullo sfondo oscurato si vedono parte del pannello Topic e un valore JSON con le voci type POWER_ACTIVE, target FIXED, phaseType null.
5 Comandi
5.1. Aggiornare i metadati
Richiedere a Reduxi di ripubblicare su MQTT tutti i metadati su sistema, dispositivi e strategie. Altrimenti vengono pubblicati periodicamente solo le letture e i setpoint.
Topic: controllers/controller_unit_id/commands/refresh
Descrizione testuale di questa immagine
Schermata di MQTT Explorer (stato DISCONNECT, casella di ricerca in alto) usata per inviare il comando refresh. Albero dei topic a sinistra: e8c1fe29.ala.eu-central-1.emqxsl.com; controllers; ZGFE con keepAlive = 1734965285703; commands con la voce refresh; identifier = {"unitId":"ZGFE","unitIdFormatted":"ZGE","boardModel":"REDUXI_1","CPUSerial":"16516642034211ad","EMMCSerial":"4.(tagliato); settings; interval: readout = 15000, keepAlive = 60000; devices: 2 con info = {"id":2,"name":"Tesla Wall Connector Gen 3","typeId":59,"type":{"id":59,"categoryId":3,"category":{"id":3,"name":"EV charger","enumeration":"EV_CHARGER"; 4 (1 topic, 2 messaggi); 12 con info = {"id":12,"name":"Iskraemeco AM550","typeId":16,"type":{"id":16,"categoryId":1,"category":{"id":1,"name":"Energy meter","enumeration":"ENERGY_METER"; 17 (1 topic, 2 messaggi); 18 (1 topic, 2 messaggi); strategies: 8 con info = {"id":8,"typeId":7,"type":{"id":7,"name":"1-phase current based ON/OFF regulation","enumeration":"DISCRETE_CURRENT_PHASE_1"}; parameters (3 topic, 12 messaggi); 20 (2 topic, 8 messaggi); 27 (selezionato) con info = {"id":27,"typeId":8,"type":{"id":8,"name":"Energy manager coordinator for PV, EVSE, battery and heat pump","enumeration":"UMBRELLA"}; parameters (1 topic, 4 messaggi); list = [{"id":8,"typeId":7. Sul lato destro: pannello Topic (badge 2) con il percorso controllers / ZGFE / strategies / 27; pannello Value con History; pannello Publish con Topic: controllers/ZGFE/commands/refresh; formato raw, xml, json con json selezionato; corpo del messaggio vuoto; pulsante PUBLISH con una freccia rossa che lo indica.
5.2. Riavvio
È possibile riavviare il Reduxi Controller?
Topic: controllers/controller_unit_id/commands/refresh
Descrizione testuale di questa immagine
Schermata dell'applicazione MQTT Explorer (stato DISCONNECT, casella di ricerca in alto) usata per inviare il comando reboot. Albero dei topic a sinistra: $SYS (48 topic, 406 messaggi); controllers; devices (29 topic, 865 messaggi); strategies (38 topic, 884 messaggi); commands (0 topic, 1 messaggio); identifier = {"unitId","unitIdFormatted","CPUSerial":.} (riga selezionata); settings (2 topic, 2 messaggi); keepAlive = 1675762462861. Sul lato destro: in alto un'anteprima di un messaggio JSON con softwareVersion "20230207091611", hwVersion "0", hasWifiModule false, dso {.}; History: 1. Pannello Publish con Topic: /controllers/ … /commands/reboot, con una parentesi rossa alla fine del campo del topic. Opzioni di formato raw, xml, json: json è selezionato. Il corpo del messaggio è vuoto. Il pulsante PUBLISH è cerchiato in rosso. QoS: 0; retain: casella non selezionata.
6. Setpoint
6.1. Visualizzare tutti i setpoint attivi del dispositivo
Descrizione testuale di questa immagine
Schermata di MQTT Explorer (stato DISCONNECT, casella di ricerca in alto) con il setpoint del dispositivo 15. Albero dei topic a sinistra: $SYS (48 topic, 862 messaggi); controllers; devices; 13 (3 topic, 235 messaggi); 14 (3 topic, 235 messaggi); 15 espanso con le voci readout = {"time":1675762671666,"values":[{"deviceId":15,"dataTypeId":174,"dataTypeEnum":"VOLTAGE_L1"; setpoint = {"deviceId":15,"values":[{"action":"NONE","type":"POWER_ACTIVE","target":"FIXED","phaseType":"L1".} (riga selezionata, contrassegnata da una parentesi rossa); info = {"id":15,"name":"Baterija","typeId":14,"type":{"id":14,"name":"Victron Energy MultiPlus II","enumeration":"BATTE; poi 18, 8, 9, 10, 11, 12 (3 topic, 233 messaggi ciascuno); list = [{"id":8,"name":"Sončna elektrarna","typeId":7,"type":{"id":7,"name":"SolarEdge","enumeration":"SOLAR_SOLARE; types = [{"id":40,"name":"ABB","enumeration":"CHARGER_ABB"; strategies (38 topic, 2104 messaggi); commands (0 topic, 1 messaggio); identifier = {"unitId","unitIdFormatted","CPUSerial"; settings (2 topic, 2 messaggi); keepAlive = 1675762644772. Sul lato destro, Topic / controllers / / devices / 15 / setpoint. Pannello Value, QoS: 0, 02/07/2023 10:37:53 AM, con il pulsante della vista formattata cerchiato in rosso e il valore JSON racchiuso da una parentesi rossa: { "deviceId": 15, "values": [ { "action": "NONE", "type": "POWER_ACTIVE", "target": "FIXED", "phaseType": "L1", "value": 0, "priority": 100, "validForTime": 28571 }, {. (continua). History: 20.
6.2. Impostare i setpoint del dispositivo
Descrizione testuale di questa immagine
Schermata di MQTT Explorer (stato DISCONNECT, casella di ricerca in alto) usata per pubblicare un setpoint per il dispositivo 15. Albero dei topic a sinistra: $SYS (48 topic, 1192 messaggi); controllers; devices (evidenziato); 13 (3 topic, 341 messaggi); 14 (3 topic, 341 messaggi); 15 espanso con readout = {"time":1675762794195,"values":[{"deviceId":15,"dataTypeId":174,"dataTypeEnum":"VOLTAGE_L1"; setpoint = {"deviceId":15,"values":[{"action":"NONE","type":"POWER_ACTIVE","target":"FIXED","phaseType":"L1".} (riga selezionata); info = {"id":15,"name":"Baterija","typeId":14,"type":{"id":14,"name":"Victron Energy MultiPlus II","enumeration":"BATTE; 18 (3 topic, 339 messaggi); 8 (3 topic, 340 messaggi, evidenziato); 9, 10, 11, 12 (3 topic, 339 messaggi ciascuno); list = [{"id":8,"name":"Sončna elektrarna","typeId":7,"type":{"id":7,"name":"SolarEdge"; types = [{"id":40,"name":"ABB","enumeration":"CHARGER_ABB"; strategies (38 topic, 3062 messaggi); commands (0 topic, 1 messaggio); identifier = {"unitId","unitIdFormatted","CPUSerial":; settings (2 topic, 2 messaggi); keepAlive = 1675762764833. Sul lato destro: badge History 20, poi il pannello Publish. Topic: /controllers/ … /devices/15/setpoint/set; il campo del topic è contrassegnato da parentesi rosse e la parola set è sottolineata in rosso. Formato raw, xml, json: json selezionato. Corpo del messaggio, racchiuso da una parentesi rossa: { "values": [ { "action": "SET", "type": "POWER_ACTIVE", "target": "FIXED", "phaseType": null, "value": 1000, "priority": 10000, "validForTime": 60000 } ] }. Il pulsante PUBLISH è cerchiato in rosso. QoS: 0; retain non selezionato. Sotto c'è una sezione History.
6.2.1. Esempio 1
Impostare la potenza attiva su -1 kW (esportazione) su tutte le fasi per 15 secondi.
{
"values": [
{
"action": "SET",
"type": "POWER_ACTIVE",
"target": "FIXED",
"phaseType": null,
"value": 1000,
"priority": 10000,
"validForTime": 15000
}
]
}
6.2.2. Esempio 2
Limitare la corrente massima a 10A sulla fase L2 per 30 secondi.
{
"values": [
{
"action": "SET",
"type": "CURRENT",
"target": "MAX",
"phaseType": "L2",
"value": 10,
"priority": 10000,
"validForTime": 30000
}
]
}