Documentazione

Aree di applicazione di MQTT

MQTT è un protocollo Internet con un broker di messaggi centrale. Con questo broker di messaggi, i partecipanti possono iscriversi a determinati "argomenti" e inviare messaggi agli argomenti. Il cFos Charging Manager può ascoltare messaggi su argomenti specifici e quindi essere controllato tramite MQTT. Può anche comunicare lo stato dei dispositivi che gestisce. Il cFos Power Brain Wallbox può anche essere controllato tramite MQTT e trasmettere il suo stato. Ciò è utile per il collegamento a un sistema di automazione domestica, per il controllo industriale (M2M) e per il monitoraggio e la registrazione. Tutti gli argomenti iniziano con cfos_mqtt. Se si desidera collegare più dispositivi MQTT cFos a un broker MQTT, l'argomento può iniziare facoltativamente con cfos_mqtt_<numero di serie>/, regolabile sotto configurazione. Nella configurazione si può anche impostare un URL per il broker MQTT predefinito. Gli URL possono iniziare facoltativamente con mqtt:// e mqtts: //. Con mqtts://, il cFos Charging Manager o il cFos Power Brain Wallbox stabiliscono una connessione TLS. Vengono utilizzate le porte standard 1883 per le connessioni non criptate e 8883 per le connessioni TLS. Tuttavia, è possibile specificare una porta nell'URL. È possibile specificare nome utente e password nella consueta notazione URL, ad esempio mqtt://user:password@192.168.2.111. Se si specifica un broker MQTT nella configurazione di cFos Charging Manager, è possibile specificare un singolo broker o scrivere semplicemente mqtt. In questo caso, viene utilizzato il broker predefinito memorizzato nella configurazione.

Il cFos Charging Manager supporta sia MQTT 3.1.1 che MQTT 5. Se l'URL inizia con mqtt3:// o mqtt5:// (mqtts3:// e mqtts5:// per la connessione criptata), si determina la versione del protocollo. L'impostazione predefinita è MQTT 3.1.1. cFos Charging Manager cerca di tornare a MQTT 3.1.1 per MQTT 5 se viene visualizzato un messaggio di errore. Questo funziona con i vecchi broker Mosquitto, ma non necessariamente con altri broker.

Nota: poiché l'impostazione di MQTT richiede la password di amministratore, il Charging Manager gestisce i dati di conseguenza. Pertanto, vengono deliberatamente inviati dati a cui si può accedere solo con una password di amministratore.

Nota sui broker MQTT: grazie a Stefan G. (#diebestenuserderwelt) siamo riusciti a testare il broker MQTT integrato in ioBroker. Questo broker MQTT 3.1.1 si comporta (a partire da febbraio 2023) in diversi modi non conformi agli standard: i tentativi di connessione vengono interrotti silenziosamente senza un messaggio di errore, il payload a volte manca nei pacchetti PUBLISH, i pacchetti PUBLISH vengono apparentemente inviati due volte (è possibile disattivare questa funzione tramite un'impostazione di configurazione?). Ciò significa che questo broker non è adatto per controllare l'API del Charging Manager, poiché le richieste API possono essere eseguite più di una volta. Anche se ci interessa che la nostra implementazione MQTT sia compatibile con il maggior numero possibile di broker, al momento raccomandiamo di utilizzare Mosquitto per ioBroker.

Integrazione di contatori e wallbox tramite il tipo di dispositivo "Ingresso HTTP".

Invece di fornire questi dispositivi tramite HTTP (vedere API HTTP -> misuratori HTTP e wallbox), questi dispositivi possono anche ascoltare MQTT. Inserire mqtt o un URL di broker MQTT come indirizzo del dispositivo. Quindi il misuratore o la wallbox corrispondente ascolta l'argomento cfos_mqtt/set/<device ID>, ad esempio per un misuratore con l'ID del dispositivo M1 a cfos_mqtt/set/M1. Il misuratore di input HTTP si aspetta quindi una stringa JSON come messaggio, come descritto nell'API HTTP in "Misuratori HTTP e wallbox". La sorgente MQTT deve quindi fornire i dati in questo formato. Ciò consente di integrare dispositivi non supportati dal Charging Manager cFos ottenendo i dati da un'altra fonte (ad es. un sistema di automazione domestica) e poi inserendoli nel Charging Manager.
Nota: se i dati provenienti dalla sorgente sono in un formato diverso da quello previsto dal contatore HTTP, è possibile creare un contatore personalizzato. Per MQTT, questa operazione è descritta di seguito.


Esempio: è stato creato un contatore di input HTTP con M3 come ID del dispositivo. Si è inserito l'indirizzo del broker Mosquitto come indirizzo, ad esempio mqtt://192.168.2.30. Se si inserisce il seguente comando sulla riga di comando del computer su cui è in esecuzione Mosquitto:
mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
il contatore dovrebbe contenere i valori sopra indicati.

Trasferire lo stato dei dispositivi del Charging Manager

Nella configurazione del Charging Manager, è possibile specificare un URL del broker MQTT (o mqtt per il broker standard), sotto il quale il Charging Manager pubblica lo stato di tutti i dispositivi sotto l'argomento cfos_mqtt/get/dev_info. Lo trasmette nel formato conosciuto da HTTP get_dev_info. In questo modo si ottengono tutti i valori dei dispositivi così come sono visibili nell'interfaccia utente, ad esempio i valori di potenza dei contatori o lo stato delle wallbox. Se si desidera abbonarsi solo a singoli dispositivi, è possibile disattivare la casella di controllo "Pubblica info via MQTT" e selezionare invece l'opzione "Pubblica info via MQTT" nelle impostazioni dei singoli dispositivi alla voce "Visualizzazione". In questo modo viene pubblicata una stringa JSON corrispondente al dispositivo in questione nell'argomento cfos_mqtt/get/<device-ID>. Inoltre, è possibile sottoscrivere tutti i valori globali sotto l'argomento cfos_mqtt/get/params, poiché vengono emessi nel formato noto da HTTP get_dev_info sotto "params".

controllo dell'API del gestore di ricarica cFos tramite MQTT

Nella configurazione di cFos Charging Manager, è possibile specificare un URL di broker MQTT (o mqtt per i broker standard) in "Broker per l'accesso API via MQTT". Se questo valore non è vuoto, cFos Charging Manager si iscrive a tutti gli argomenti che iniziano con cfos_mqtt/api/. Interpreta quindi i messaggi sotto tali argomenti come se il nome dell'argomento fosse un URL HTTP che inizia con /cnf? e li inoltra all'API HTTP. Il Charging Manager pubblica quindi la risposta dell'API HTTP come JSON sotto l'argomento cfos_mqtt/api_res. In questo modo, si ha quasi tutta l'API HTTP sotto controllo tramite MQTT. Fanno eccezione le chiamate API che forniscono risposte JSON lunghe. Esempio: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 imposta la variabile x del Charging Manager a 1 con la funzione API set_cm_var. Un messaggio con cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 inserisce l'RFID 5678 per la wallbox con l'ID dispositivo E1 (vedere anche le nostre funzioni RFID estese).
I dati trasmessi tramite HTTP POST possono essere inseriti nel messaggio sotto l'argomento.

Esempio: modificare periodicamente la corrente totale massima disponibile per il Charging Manager:
Inserire il proprio broker nelle impostazioni generali del Charging Manager alla voce "Broker per l'accesso API via MQTT" (o semplicemente mqtt se si vuole utilizzare il broker predefinito memorizzato in "Configurazione"). Quindi, utilizzando MQTT, pubblicare sul topic
cfos_mqtt/api/cmd=set_params
un oggetto JSON con il seguente contenuto:
{"max_total_cur_prc": p}
dove p è un'indicazione in percentuale di quale porzione del flusso totale massimo preimpostato deve essere presa.
Nota: Alcune delle chiamate API HTTP fanno sì che il Charging Manager salvi la configurazione. Se vengono eseguite troppo spesso, la flash (nel cFos Power Brain o nel cFos Wallbox Booster) o la scheda SD del Raspberry si consumano. La chiamata API "set_params" con il singolo parametro "max_total_cur_prc" non salva quindi i parametri.

Controllo delle wallbox tramite MQTT

Se il cFos Charging Manager non è in modalità "Gestione del carico", ma in modalità "Osservazione", è possibile utilizzare MQTT per controllare autonomamente tutti i wallbox. Questo vale in particolare per i wallbox cFos Power Brain che vengono gestiti come slave in modalità "Osserva". A tal fine, è necessario selezionare l'opzione "Attiva il controllo delle wallbox" nelle impostazioni del Charging Manager alla voce MQTT. Quindi il Charging Manager cFos ascolta il topic MQTT cfos_mqtt/ctl e si aspetta messaggi con un oggetto JSON. Questo oggetto ha sotto-oggetti come proprietà con l'ID del dispositivo come nome. I sottooggetti hanno il seguente aspetto: {"cur": c, "ena": b, "wke": b}, dove c è la corrente di carica in mA e b può essere rispettivamente vero o falso. "ena": falso disattiva la ricarica alla wallbox, "wke": vero tenta di inviare un comando "wake up car" alla wallbox (attualmente possibile solo con le wallbox cFos Power Brain). È anche possibile omettere "cur", "ena" e "wke" e quindi eseguire solo alcune funzioni di controllo.
Esempio: {"E1":


{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000}}

Imposta la corrente di carica della wallbox con l'ID del dispositivo a 8A, attiva la carica e tenta di svegliare l'auto. Inoltre, la corrente di carica della wallbox E2 è impostata su 10A.

Invio di log e log delle transazioni tramite MQTT

In "Configurazione" è possibile specificare un URL di broker MQTT per la trasmissione delle voci di registro nel registro di sistema. Il cFos Charging Manager pubblica quindi tutte le voci di registro nell'argomento cfos_mqtt/log. Ciò consente di monitorare i registri del Charging Manager da remoto. È inoltre possibile specificare un URL del broker MQTT per le voci del registro delle transazioni in "Configurazione". Quindi tutte le transazioni di addebito vengono inviate sotto l'argomento cfos_mqtt/ta_log. Ciò consente di valutare a distanza i dati contabili delle transazioni di addebito e di creare backup delle transazioni di addebito su un altro sistema. Una transazione di ricarica inizia quando la spina di ricarica è inserita e termina quando viene scollegata.

Contatori definiti dall'utente con MQTT

È possibile creare contatori personalizzati utilizzando rtype = 2 per MQTT. Questi contatori sono definiti in modo simile ai contatori HTTP (rtype = 1). Tuttavia, gli indirizzi non sono URL HTTP, ma argomenti MQTT.




Esempio: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
In questo caso, il contatore definito dall'utente si iscrive all'argomento /test_topic3 e si aspetta un oggetto JSON con la proprietà "power_w", ad esempio {"power_w": 1234}. Diverse variabili del contatore possono avere diversi argomenti e vengono aggiornate non appena viene pubblicato un messaggio nell'argomento corrispondente.