MQTT este un protocol de internet cu un broker de mesaje central. Cu acest broker de mesaje, participanții se pot abona la anumite "subiecte" și pot trimite mesaje către subiecte. Managerul de încărcare cFos poate asculta mesaje pe teme specifice și poate fi controlat prin MQTT. De asemenea, poate comunica starea dispozitivelor pe care le gestionează. Power Brain Wallbox cFos poate fi, de asemenea, controlat prin MQTT și își poate transmite starea. Acest lucru este util atunci când se conectează la un sistem de automatizare a locuinței, pentru controlul industrial (M2M) și pentru monitorizare și înregistrare. Toate subiectele încep cu cfos_mqtt
. Dacă doriți să conectați mai multe dispozitive MQTT cFos la un broker MQTT, subiectul poate începe opțional cu cfos_mqtt_<numărul seriei>/
, reglabil în configurație. În configurație puteți seta, de asemenea, o adresă URL pentru brokerul MQTT implicit. URL-urile pot începe opțional cu mqtt://
și mqtts:
//. Cu mqtts://
, cFos Charging Manager sau cFos Power Brain Wallbox stabilește o conexiune TLS. Se utilizează porturile standard 1883 pentru conexiunile necriptate și 8883 pentru conexiunile TLS. Cu toate acestea, puteți, de asemenea, să specificați un port în URL. Numele de utilizator și parola pot fi specificate în notația URL obișnuită, de exemplu mqtt://user:password@192.168.2.111
. Dacă specificați un broker MQTT în configurația cFos Charging Manager, puteți specifica un broker individual sau puteți scrie pur și simplu mqtt
. În acest caz, se utilizează brokerul implicit stocat în configurație.
Managerul de încărcare cFos suportă atât MQTT 3.1.1, cât și MQTT 5. Dacă lăsați URL-ul să înceapă cu mqtt3:// sau mqtt5:// (mqtts3:// și mqtts5:// pentru conexiune criptată), determinați versiunea protocolului. Valoarea implicită este MQTT 3.1.1. cFos Charging Manager încearcă să revină la MQTT 3.1.1 pentru MQTT 5 dacă este afișat un mesaj de eroare. Acest lucru funcționează cu brokerii Mosquitto mai vechi, dar nu neapărat cu alți brokeri.
Notă: Deoarece configurarea MQTT necesită parola de administrator, Charging Manager tratează datele în mod corespunzător. Prin urmare, sunt trimise în mod deliberat date care pot fi accesate numai cu o parolă de administrator.
Notă privind brokerii MQTT: Mulțumită lui Stefan G. (#diebestenuserderwelt) am putut testa brokerul MQTT încorporat în ioBroker. Acest broker MQTT 3.1.1.1 se comportă (începând cu februarie 2023) în mai multe moduri care nu sunt conforme cu standardul: încercările de conectare sunt terminate în tăcere fără un mesaj de eroare, sarcina utilă lipsește uneori din pachetele PUBLISH, pachetele PUBLISH sunt aparent trimise de două ori (poate fi acest lucru dezactivat printr-o setare de configurare?). Aceasta înseamnă că acest broker nu este potrivit pentru controlul API Charging Manager, deoarece cererile API pot fi executate de mai multe ori. Chiar dacă suntem interesați ca implementarea noastră MQTT să fie compatibilă cu cât mai mulți brokeri posibil, în prezent recomandăm utilizarea Mosquitto pentru ioBroker.
În loc să furnizeze aceste dispozitive prin HTTP (a se vedea HTTP API -> Contoare HTTP și wallbox-uri), aceste dispozitive pot asculta și MQTT. Introduceți mqtt
sau un URL de broker MQTT ca adresă a dispozitivului. Apoi, contorul sau wallbox-ul corespunzător ascultă subiectul cfos_mqtt/set/<device
ID>,
de exemplu, pentru un contor cu ID-ul dispozitivului M1, la cfos_mqtt/set/M1
. Contorul de intrare HTTP așteaptă apoi un șir de caractere JSON ca mesaj, așa cum este descris în API HTTP la rubrica "Contoare și wallbox-uri HTTP". Prin urmare, sursa MQTT trebuie să livreze datele în acest format. Acest lucru vă permite să integrați dispozitive care nu sunt acceptate de cFos Charging Manager prin obținerea datelor de la o altă sursă (de exemplu, un sistem de automatizare a locuinței) și apoi să le introduceți în Charging Manager.
Notă: Dacă datele de la sursă sunt într-un format diferit de cel pe care îl așteaptă contorul HTTP, puteți crea, de asemenea, un contor personalizat. Pentru MQTT, acest lucru este descris mai jos.
Exemplu: Ați creat un contor de intrare HTTP și acesta are M3 ca ID al dispozitivului. Ați introdus adresa brokerului Mosquitto ca adresă, de exemplu, mqtt://192.168.2.30. Dacă introduceți următoarea comandă în linia de comandă pe computerul pe care rulează 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] }'
contorul ar trebui să conțină valorile de mai sus.
În configurația Charging Manager, puteți specifica o adresă URL a brokerului MQTT (sau mqtt pentru brokerul standard), sub care Charging Manager publică apoi starea tuturor dispozitivelor în subiectul cfos_mqtt/get/dev_info
. Acesta transmite acest lucru în formatul cunoscut din HTTP get_dev_info. Aceasta vă oferă toate valorile dispozitivelor așa cum sunt vizibile și în interfața de utilizare, de exemplu, valorile de putere ale contoarelor sau starea wallbox-urilor. Dacă doriți să vă abonați doar la dispozitive individuale, puteți dezactiva caseta de selectare "Publish info via MQTT" și, în schimb, să bifați opțiunea "Publish info via MQTT" în setările dispozitivelor individuale la "Display". Apoi, un șir JSON corespunzător despre dispozitivul respectiv este publicat în subiectul cfos_mqtt/get/<device-ID>. În plus, puteți să vă abonați la toate valorile globale sub topicul cfos_mqtt/get/params
, deoarece acestea sunt publicate în formatul cunoscut din HTTP get_dev_info sub "params".
În configurația cFos Charging Manager, puteți specifica un URL al brokerului MQTT (sau mqtt pentru brokeri standard) la rubrica "Broker for API access via MQTT". Dacă această valoare nu este goală, cFos Charging Manager se abonează la toate subiectele care încep cu cfos_mqtt/api/. Acesta interpretează apoi mesajele din aceste subiecte ca și cum numele subiectului ar fi un URL HTTP care începe cu /cnf? și le transmite către API HTTP. Apoi, Charging Manager publică răspunsul API HTTP sub formă de JSON în subiectul cfos_mqtt/api_res. În acest fel, aveți aproape întreaga API HTTP sub controlul dumneavoastră prin MQTT. Excepție fac apelurile API care livrează răspunsuri JSON lungi. Exemplu: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
setează variabila Charging Manager x la 1 cu funcția API set_cm_var. Un mesaj sub cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1
introduce RFID 5678 pentru wallbox cu ID-ul dispozitivului E1 (a se vedea, de asemenea, funcțiile noastre RFID extinse).
Datele transmise prin HTTP POST pot fi plasate în mesajul de subiectul.
Exemplu: Modificarea periodică a curentului total maxim disponibil pentru Charging Manager:
Introduceți brokerul dvs. în setările generale ale Charging Manager la rubrica "Brokers for API access via MQTT" (sau pur și simplu mqtt dacă trebuie utilizat brokerul implicit stocat la "Configuration"). Apoi, utilizând MQTT, publicați pe subiectul
cfos_mqtt/api/api/cmd=set_params
un obiect JSON cu următorul conținut:
{"max_total_cur_prc": p}
unde p este o indicație în procente a porțiunii din fluxul total maxim prestabilit care ar trebui să fie preluată.
Notă: Unele dintre apelurile HTTP API determină Charging Manager să salveze configurația. Dacă le executați prea des, blițul (în cFos Power Brain sau cFos Wallbox Booster) sau cardul SD din Raspberry se va uza. Prin urmare, apelul API "set_params" cu un singur parametru "max_total_cur_prc" nu salvează parametrii.
Dacă managerul de încărcare cFos nu este în modul "Gestionare încărcare", ci în modul "Observare", puteți utiliza MQTT pentru a prelua controlul asupra tuturor boxelor de perete. Acest lucru se aplică în special wallbox-urilor cFos Power Brain care sunt operate ca sclave în modul "Observare". Pentru a face acest lucru, trebuie să bifați opțiunea "Activate control of wallboxes" sub MQTT în setările Charging Manager. Managerul de încărcare cFos ascultă apoi subiectul MQTT cfos_mqtt/ctl
și așteaptă mesaje cu un obiect JSON. Acest obiect are ca proprietăți subobiecte cu ID-ul dispozitivului ca nume. Subobiectele arată astfel: {"cur": c, "ena": b, "wke": b, "phs": p}, unde c este curentul de încărcare în mA, iar b poate fi fiecare adevărat sau fals. "ena": false dezactivează încărcarea la wallbox, "wke": true încearcă să trimită o comandă "wake up car" către wallbox (posibil în prezent numai cu wallbox-urile cFos Power Brain). p poate fi 1 sau 3 pentru a comuta între încărcare monofazată și trifazată. De asemenea, puteți omite "cur", "ena", "wke" și "phs" și astfel să executați doar anumite funcții de control.
Exemplu: {"E1":
{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000, phs: 3}}
Setează curentul de încărcare al wallbox-ului cu ID-ul dispozitivului la 8A, activează încărcarea și încearcă să trezească mașina. În plus, curentul de încărcare pentru wallbox E2 este setat la 10A și comutat la încărcare trifazată.
Puteți specifica o adresă URL a brokerului MQTT pentru transmiterea intrărilor de jurnal în jurnalul sistemului la "Configuration" (Configurație). Managerul de încărcare cFos publică apoi toate intrările din jurnal în subiectul cfos_mqtt/log
. Acest lucru vă permite să monitorizați de la distanță jurnalele Charging Manager. De asemenea, puteți specifica o adresă URL a brokerului MQTT pentru intrările din jurnalul de tranzacții în secțiunea "Configuration". Apoi, toate tranzacțiile de taxare sunt trimise în subiectul cfos_mqtt/ta_log
. Aceasta permite evaluarea la distanță a datelor contabile ale tranzacțiilor de taxare și crearea de copii de rezervă ale tranzacțiilor de taxare pe un alt sistem. O tranzacție de încărcare începe atunci când fișa de încărcare este conectată și se încheie atunci când este deconectată.
Puteți crea contoare personalizate utilizând rtype = 2 pentru MQTT. Aceste contoare sunt definite în mod similar cu contoarele HTTP (rtype = 1). Cu toate acestea, adresele de aici nu sunt URL-uri HTTP, ci subiecte MQTT.
Exemplu: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Aici, contorul definit de utilizator se abonează la subiectul /test_topic3 și așteaptă un obiect JSON cu proprietatea "power_w", de exemplu, {"power_w": 1234}. Diferite variabile de contor pot avea subiecte diferite și sunt actualizate de îndată ce un mesaj este publicat în cadrul subiectului corespunzător.