Dokumentáció

MQTT alkalmazási területek

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:password@192.168.2.111. 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.

Mérők és fali dobozok integrálása "HTTP Input" típusú eszközzel.

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ő eszközök állapotának átvitele

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 API vezérlése MQTT-n keresztül

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.

Wallboxok vezérlése MQTT-n keresztül

Ha a cFos Charging Manager nincs "Load Management" üzemmódban, hanem "Observe" üzemmódban van, akkor az MQTT segítségével maga is vezérelheti az összes wallboxot. Ez különösen azokra a cFos Power Brain wallboxokra vonatkozik, amelyek "Observe" üzemmódban slave-ként működnek. Ehhez be kell jelölnie a "Wallboxok vezérlésének aktiválása" opciót a Charging Manager beállításai között az MQTT alatt. Ezután a cFos Charging Manager a cfos_mqtt/ctl MQTT-témát hallgatja, és JSON objektummal ellátott üzeneteket vár. Ez az objektum tulajdonságként alobjektumokat tartalmaz, amelyeknek a készülék azonosítója a neve. Az alobjektumok így néznek ki: {"cur": c, "ena": b, "wke": b}, ahol c a töltési áram mA-ben, b pedig igaz vagy hamis lehet. "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 "cur", "ena" és "wke" ki is hagyható, és így csak bizonyos vezérlési funkciókat lehet végrehajtani.
Példa: {"E1":


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

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 be.

Naplózás és tranzakciós napló küldése MQTT-n keresztül

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.

Felhasználó által definiált számlálók MQTT-vel

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.