Az MQTT egy központi üzenetközvetítővel rendelkező internetes protokoll. Ezzel az üzenetközvetítővel a résztvevők feliratkozhatnak bizonyos "témákra", és üzeneteket küldhetnek a témáknak. A cFos Charging Manager képes meghallgatni az egyes témakörökre vonatkozó üzeneteket, és így MQTT-n keresztül vezérelhető. Az általa kezelt eszközök állapotát is képes közölni. A cFos Power Brain Wallbox MQTT-n keresztül is vezérelhető, és továbbíthatja állapotát. Ez hasznos otthoni automatizálási rendszerhez, ipari vezérléshez (M2M), valamint megfigyeléshez és rögzítéshez. Minden téma a cfos_mqtt
kezdőbetűvel kezdődik. Ha több cFos MQTT eszközt szeretne egy MQTT brókerhez csatlakoztatni, akkor a téma opcionálisan a cfos_mqtt_<sorszám>/
kezdetű, konfiguráció alatt beállítható téma lehet. A konfigurációban megadhatja az alapértelmezett MQTT bróker URL-címét is. Az URL-címek opcionálisan kezdődhetnek mqtt://
és mqtts:
// karakterekkel. Az mqtts://
segítségével a cFos Charging Manager vagy a cFos Power Brain Wallbox TLS-kapcsolatot hoz létre. A titkosítatlan kapcsolatokhoz a 1883-as, a TLS-kapcsolatokhoz pedig a 8883-as szabványos portokat használják. Az URL-címben azonban portot is megadhat. A felhasználónevet és a jelszót a szokásos URL jelöléssel adhatja meg, pl. mqtt://user:[email protected].
Ha a cFos Charging Manager konfigurációjában megad egy MQTT brókert, akkor vagy megadhat egy egyedi brókert, vagy egyszerűen csak mqtt-t
írhat. Ebben az esetben a konfigurációban tárolt alapértelmezett bróker kerül felhasználásra.
A cFos Charging Manager támogatja az MQTT 3.1.1 és az MQTT 5-t. Ha az URL-cím mqtt3:// vagy mqtt5://-vel kezdődik (mqtts3:// és mqtts5:// titkosított kapcsolat esetén), akkor meghatározza a protokollverziót. Az alapértelmezett az MQTT 3.1.1. A cFos Charging Manager hibaüzenet megjelenése esetén megpróbál visszaváltani az MQTT 3.1.1-re az MQTT 5 esetében. Ez a régebbi Mosquitto brókerekkel működik, de más brókerekkel nem feltétlenül.
Megjegyzés: Mivel az MQTT beállításához admin jelszóra van szükség, a Charging Manager ennek megfelelően kezeli az adatokat. Ezért szándékosan olyan adatok kerülnek elküldésre, amelyek csak admin jelszóval érhetők el.
Megjegyzés az MQTT brókerekről: Stefan G.-nek (#diebestenuserderwelt) köszönhetően tesztelhettük az ioBrokerbe épített MQTT brókert. Ez az MQTT 3.1.1 broker (2023. febr.) több szempontból sem viselkedik a szabványnak megfelelően: a csatlakozási kísérletek hibaüzenet nélkül, némán megszakadnak, a PUBLISH csomagokból néha hiányzik a hasznos teher, a PUBLISH csomagokat látszólag kétszer küldi el (ez kikapcsolható egy konfigurációs beállítással?). Ez azt jelenti, hogy ez a bróker nem alkalmas a Charging Manager API vezérlésére, mivel az API-kérések többször is végrehajtódhatnak. Bár érdekünk, hogy az MQTT implementációnk minél több brókerrel kompatibilis legyen, jelenleg a Mosquitto használatát javasoljuk az ioBrokerhez.
Ahelyett, hogy ezeket az eszközöket HTTP-n keresztül látná el (lásd HTTP API -> HTTP mérők és wallboxok), ezek az eszközök az MQTT-t is hallgathatják. Adja meg az mqtt
vagy egy MQTT bróker URL-címét az eszköz címeként. Ezután a megfelelő mérő vagy wallbox a cfos_mqtt/set/<eszköz ID>
témára figyel, pl. egy M1 eszközazonosítóval rendelkező mérő esetében a cfos_mqtt/set/M1-re
. A HTTP bemeneti mérő ezután egy JSON karakterláncot vár üzenetként, ahogyan azt a HTTP API "HTTP mérők és wallboxok" című fejezetében leírtuk. Az MQTT-forrásnak tehát ebben a formátumban kell szolgáltatnia az adatokat. Ez lehetővé teszi olyan eszközök integrálását, amelyeket a cFos Charging Manager nem támogat, azáltal, hogy az adatokat egy másik forrásból (pl. egy otthoni automatizálási rendszerből) szerzi be, majd betáplálja a Charging Managerbe.
Megjegyzés: Ha a forrásból származó adatok más formátumúak, mint amit a HTTP-számláló elvár, akkor létrehozhat egy egyéni számlálót is. Az MQTT esetében ezt az alábbiakban ismertetjük.
Példa: Létrehozott egy HTTP bemeneti számlálót, és az eszköz azonosítója M3. Címként megadta a Mosquitto bróker címét, pl. mqtt://192.168.2.30. Ha a parancssorba beírja a következő parancsot azon a számítógépen, amelyen a Mosquitto fut: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] }'
a számlálónak ekkor a fenti értékeket kell tartalmaznia.
A Töltéskezelő konfigurációjában megadhat egy MQTT bróker URL-címet (vagy mqtt a szabványos bróker esetében), amely alatt a Töltéskezelő ezután közzéteszi az összes eszköz állapotát a cfos_mqqtt/get/dev_info
téma alatt. Ezt a HTTP get_dev_info által ismert formátumban továbbítja. Ez megadja az eszközök összes értékét, ahogy azok a felhasználói felületen is láthatóak, pl. a mérők teljesítményértékeit vagy a wallboxok állapotát. Ha csak az egyes eszközökre szeretne feliratkozni, akkor az egyes eszközök beállításaiban a "Publish info via MQTT" jelölőnégyzetet kikapcsolhatja, és helyette a "Publish info via MQTT" opciót jelölheti be a "Display" (Megjelenítés) alatt. Ekkor a megfelelő JSON string az adott eszközről a cfos_mqtt/get/<eszköz-ID> téma alatt kerül közzétételre. Ezenkívül a cfos_mqtt/get/params
téma alatt feliratkozhat az összes globális értékre, mivel azok a HTTP get_dev_info "params" alatt a HTTP get_dev_info ismert formátumában kerülnek kiadásra.
A cFos Charging Manager konfigurációjában a "Broker for API access for MQTT via MQTT" menüpont alatt megadhat egy MQTT bróker URL-címet (vagy mqtt a standard brókerek esetében). Ha ez az érték nem üres, a cFos Charging Manager feliratkozik minden olyan témára, amely cfos_mqtt/api/ kezdetű. Ezután az ilyen témák alatti üzeneteket úgy értelmezi, mintha a téma neve egy /cnf? kezdetű HTTP URL lenne, és továbbítja azokat a HTTP API-hoz. A Charging Manager ezután JSON formájában közzéteszi a HTTP API válaszát a cfos_mqqtt/api_res téma alatt. Ily módon szinte a teljes HTTP API az Ön irányítása alatt áll az MQTT-n keresztül. Kivételt képeznek az olyan API-hívások, amelyek hosszú JSON-válaszokat szolgáltatnak. Példa: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
az API set_cm_var függvénnyel az x töltéskezelő változót 1-re állítja. A cfos_mqtt/api/api/cmd=enter_rfid&rfid=5678&dev_id=E1
alatti üzenet az E1 eszközazonosítóval rendelkező wallbox 5678-as RFID azonosítóját adja meg (lásd még a kiterjesztett RFID-funkcióinkat).
A HTTP POST-on keresztül továbbított adatokat az üzenetben a téma alatt lehet elhelyezni.
Példa: A töltéskezelő számára elérhető maximális teljes áram időszakos módosítása:
Adja meg a brókerét az általános Charging Manager beállítások között a "Brokers for API access via MQTT" (vagy egyszerűen mqtt, ha a "Configuration" alatt tárolt alapértelmezett brókert kívánja használni) alatt. Ezután az MQTT segítségével tegyen közzé a
cfos_mqqtt/api/cmd=set_params
témában egy JSON objektumot a következő tartalommal:
{"max_total_cur_prc": p}
ahol p egy százalékban kifejezett jelzés arra vonatkozóan, hogy az előre beállított maximális teljes folyam mekkora részét kell elvenni.
Megjegyzés: Néhány HTTP API-hívás hatására a Charging Manager elmenti a konfigurációt. Ha túl gyakran hajtja végre őket, a flash (a cFos Power Brainben vagy a cFos Wallbox Boosterben) vagy a Raspberryben lévő SD-kártya elhasználódik. A "set_params" API-hívás a "max_total_cur_prc" egyetlen paraméterrel ezért nem menti el a paramétereket.
Ha a cFos Charging Manager nincs "Load management" üzemmódban, hanem "Observe" üzemmódban van, akkor az MQTT segítségével maga is átveheti az irányítást az összes wallbox felett. Ez különösen azokra a cFos Power Brain wallboxokra vonatkozik, amelyek "Observe" üzemmódban slave-ként működnek. Ehhez a Charging Manager beállításaiban az MQTT alatt be kell jelölnie a "Activate control of wallboxes" opciót. A cFos Charging Manager ezután a cfos_mqtt/ctl
MQTT-témát hallgatja, és JSON objektummal ellátott üzeneteket vár. Ez az objektum olyan alobjektumokat tartalmaz, amelyek tulajdonságai között szerepel az eszköz azonosítója, mint név. Az alobjektumok így néznek ki: {"cur": c, "ena": b, "wke": b, "phs": p}, ahol c a töltési áram mA-ben, és b lehet igaz vagy hamis. "ena": false kikapcsolja a töltést a wallboxon, "wke": true megpróbál "wake up car" parancsot küldeni a wallboxnak (jelenleg csak a cFos Power Brain wallboxokkal lehetséges). a p lehet 1 vagy 3 az 1-fázisú és a 3-fázisú töltés közötti váltáshoz. A "cur", "ena", "wke" és "phs" is elhagyható, és így csak bizonyos vezérlési funkciókat lehet végrehajtani.
Példa: {"E1":
{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000, phs: 3}}
A készülékazonosítóval rendelkező wallbox töltőáramát 8A-ra állítja, aktiválja a töltést és megpróbálja felébreszteni a járművet. Továbbá az E2 fali doboz töltőáramát 10A-ra állítja, és 3 fázisú töltésre kapcsol.
A "Konfiguráció" menüpont alatt megadhat egy MQTT bróker URL-címet a naplóbejegyzések továbbításához a rendszernaplóban. A cFos Charging Manager ezután minden naplóbejegyzést közzétesz a cfos_mqtt/log
téma alatt. Ez lehetővé teszi a Charging Manager naplóinak távoli nyomon követését. A "Konfiguráció" menüpontban megadhat egy MQTT bróker URL-címet is a tranzakciós naplóbejegyzésekhez. Ezután az összes díjszámítási tranzakciót a cfos_mqtt/ta_log
téma alá küldjük. Ez lehetővé teszi a díjszámítási tranzakciók könyvelési adatainak távoli értékelését és a díjszámítási tranzakciók biztonsági másolatainak létrehozását egy másik rendszerben. A töltési tranzakció akkor kezdődik, amikor a töltőcsatlakozót bedugják, és akkor ér véget, amikor kihúzzák.
Egyéni számlálókat hozhat létre az rtype = 2 használatával az MQTT számára. Ezek a számlálók a HTTP számlálókhoz hasonlóan vannak definiálva (rtype = 1). A címek itt azonban nem HTTP URL-címek, hanem MQTT-témák.
Példa: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Itt a felhasználó által definiált számláló feliratkozik a /test_topic3 témára, és egy JSON objektumot vár a "power_w" tulajdonsággal, pl. {"power_w": 1234}. A különböző számlálóváltozók különböző témákhoz tartozhatnak, és frissülnek, amint a megfelelő téma alatt üzenet jelenik meg.