Dokumentacja

Obszary zastosowań MQTT

MQTT to protokół internetowy z centralnym brokerem komunikatów. Dzięki temu brokerowi wiadomości uczestnicy mogą subskrybować określone "tematy" i wysyłać wiadomości do tematów. Menedżer ładowania cFos może nasłuchiwać wiadomości na określone tematy i w ten sposób być sterowany poprzez MQTT. Może również przekazywać informacje o stanie urządzeń, którymi zarządza. Wallbox cFos Power Brain może być również sterowany poprzez MQTT i przesyłać swój status. Jest to przydatne przy podłączeniu do systemu automatyki domowej, do sterowania przemysłowego (M2M) oraz do monitorowania i nagrywania. Wszystkie tematy zaczynają się od cfos_mqtt. Jeśli chcesz podłączyć wiele urządzeń cFos MQTT do jednego brokera MQTT, temat może opcjonalnie zaczynać się od cfos_mqtt_<numer seryjny>/, ustawiany pod konfiguracją. W konfiguracji można również ustawić adres URL dla domyślnego brokera MQTT. Adresy URL mogą opcjonalnie zaczynać się od mqtt:// i mqtts: //. Za pomocą mqtts://, cFos Charging Manager lub cFos Power Brain Wallbox nawiązuje połączenie TLS. Używane są standardowe porty 1883 dla połączeń nieszyfrowanych i 8883 dla połączeń TLS. Można jednak również określić port w adresie URL. Możesz określić nazwę użytkownika i hasło w zwykłej notacji URL, np. mqtt://user:password@192.168.2.111. Jeśli określisz brokera MQTT w konfiguracji cFos Charging Manager, możesz określić indywidualnego brokera lub po prostu napisać mqtt. W takim przypadku używany jest domyślny broker zapisany w konfiguracji.

Menedżer ładowania cFos obsługuje zarówno MQTT 3.1.1 jak i MQTT 5. Jeśli pozwolisz, aby adres URL zaczynał się od mqtt3:// lub mqtt5:// (mqtts3:// i mqtts5:// dla połączenia szyfrowanego), określasz wersję protokołu. Domyślnie jest to MQTT 3.1.1. cFos Charging Manager próbuje przełączyć się z powrotem na MQTT 3.1.1 dla MQTT 5, jeśli zostanie wyświetlony komunikat o błędzie. Działa to ze starszymi brokerami Mosquitto, ale niekoniecznie z innymi brokerami.

Uwaga: Ponieważ konfiguracja MQTT wymaga podania hasła administratora, Charging Manager odpowiednio obsługuje dane. Celowo wysyłane są więc dane, do których dostęp można uzyskać tylko za pomocą hasła administratora.

Uwaga dotycząca brokerów MQTT: Dzięki Stefanowi G. (#diebestenuserderwelt) mogliśmy przetestować brokera MQTT wbudowanego w ioBroker. Ten broker MQTT 3.1.1 zachowuje się (od lutego 2023) na kilka sposobów niezgodnych ze standardem: próby połączenia są cicho kończone bez komunikatu o błędzie, czasami brakuje payloadu w pakietach PUBLISH, pakiety PUBLISH są najwyraźniej wysyłane dwa razy (czy można to wyłączyć przez ustawienie w configu?). Oznacza to, że ten broker nie nadaje się do sterowania API Charging Managera, ponieważ żądania API mogą być wykonywane więcej niż raz. Chociaż jesteśmy zainteresowani tym, aby nasza implementacja MQTT była kompatybilna z jak największą liczbą brokerów, obecnie zalecamy używanie Mosquitto dla ioBrokera.

Integracja liczników i wallboxów poprzez urządzenie typu "HTTP Input".

Zamiast dostarczać te urządzenia przez HTTP (patrz HTTP API -> Liczniki HTTP i wallboxy), urządzenia te mogą również nasłuchiwać MQTT. Jako adres urządzenia wpisz mqtt lub URL brokera MQTT. Następnie odpowiedni miernik lub wallbox nasłuchuje do tematu cfos_mqtt/set/<device ID>, np. dla miernika o ID urządzenia M1 do cfos_mqtt/set/M1. Licznik wejściowy HTTP oczekuje następnie ciągu JSON jako wiadomości, jak opisano w HTTP API pod "Liczniki HTTP i wallboxy". Twoje źródło MQTT musi zatem dostarczyć dane w tym formacie. Pozwala to na integrację urządzeń, które nie są obsługiwane przez cFos Charging Manager, poprzez uzyskanie danych z innego źródła (np. systemu automatyki domowej), a następnie przekazanie ich do Charging Manager.
Uwaga: Jeśli dane ze źródła są w innym formacie niż oczekuje licznik HTTP, można również utworzyć niestandardowy licznik. W przypadku MQTT jest to opisane poniżej.


Przykład: Utworzono licznik wejściowy HTTP, który ma M3 jako identyfikator urządzenia. Jako adres wprowadziłeś adres brokera Mosquitto, np. mqtt://192.168.2.30. Jeśli wpiszesz następujące polecenie w wierszu poleceń na komputerze, na którym działa 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] }'
licznik powinien wtedy zawierać powyższe wartości.

Przekazanie statusu urządzeń Charging Manager

W konfiguracji Charging Managera można określić adres URL brokera MQTT (lub mqtt dla standardowego brokera), pod którym Charging Manager publikuje status wszystkich urządzeń w temacie cfos_mqtt/get/dev_info. Przekazuje to w formacie znanym z HTTP get_dev_info. Daje to wszystkie wartości urządzeń, ponieważ są one również widoczne w interfejsie użytkownika, np. wartości mocy mierników lub stan stacji ładowania. Jeśli chcesz subskrybować tylko pojedyncze urządzenia, możesz dezaktywować pole wyboru "Publikuj informacje przez MQTT" i zamiast tego zaznaczyć opcję "Publikuj informacje przez MQTT" w ustawieniach poszczególnych urządzeń w sekcji "Wyświetlanie". Następnie odpowiedni ciąg JSON o danym urządzeniu zostanie opublikowany w temacie cfos_mqtt/get/<device-ID>. Ponadto można subskrybować wszystkie wartości globalne w temacie cfos_mqtt/get/params, ponieważ są one wyprowadzane w formacie znanym z HTTP get_dev_info w sekcji "params".

sterowanie API menedżera ładowania cFos poprzez MQTT

W konfiguracji cFos Charging Manager można określić adres URL brokera MQTT (lub mqtt dla standardowych brokerów) w sekcji "Broker for API access via MQTT". Jeśli ta wartość nie jest pusta, cFos Charging Manager subskrybuje wszystkie tematy zaczynające się od cfos_mqtt/api/. Następnie interpretuje wiadomości w takich tematach tak, jakby nazwa tematu była adresem URL HTTP zaczynającym się od /cnf? i przekazuje je do interfejsu API HTTP. Charging Manager publikuje następnie odpowiedź HTTP API jako JSON w temacie cfos_mqtt/api_res. W ten sposób masz prawie cały interfejs API HTTP pod kontrolą za pośrednictwem MQTT. Wyjątkiem są wywołania API, które dostarczają długie odpowiedzi JSON. Przykład: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 ustawia zmienną x menedżera ładowania na 1 za pomocą funkcji API set_cm_var. Wiadomość pod cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 wprowadza identyfikator RFID 5678 dla stacji Wallbox z identyfikatorem urządzenia E1 (zobacz także nasze rozszerzone funkcje RFID).
Dane przesyłane za pomocą HTTP POST można umieścić w wiadomości w temacie.

Przykład: Okresowa zmiana maksymalnego całkowitego prądu dostępnego dla Charging Manager:
Wprowadź swojego brokera w ogólnych ustawieniach Charging Manager w sekcji "Brokerzy dla dostępu API przez MQTT" (lub po prostu mqtt, jeśli ma być używany domyślny broker zapisany w sekcji "Konfiguracja"). Następnie, używając MQTT, opublikuj w temacie
cfos_mqtt/api/cmd=set_params
obiekt JSON o następującej zawartości:
{"max_total_cur_prc": p}
gdzie p jest wskazaniem w procentach, jaka część wstępnie ustawionego maksymalnego całkowitego strumienia powinna zostać pobrana.
Uwaga: Niektóre wywołania HTTP API powodują, że Charging Manager zapisuje konfigurację. Jeśli będą one wykonywane zbyt często, pamięć flash (w cFos Power Brain lub cFos Wallbox Booster) lub karta SD w Raspberry ulegną zużyciu. Wywołanie API "set_params" z pojedynczym parametrem "max_total_cur_prc" nie zapisuje zatem parametrów.

Sterowanie wallboxami poprzez MQTT

Jeśli cFos Charging Manager nie jest w trybie "Load management", ale w trybie "Observe", można użyć MQTT do samodzielnego przejęcia kontroli nad wszystkimi stacjami ładowania. Dotyczy to w szczególności stacji ładowania cFos Power Brain, które są obsługiwane jako urządzenia podrzędne w trybie "Observe". Aby to zrobić, należy zaznaczyć opcję "Activate control of wallboxes" w sekcji MQTT w ustawieniach Charging Managera. Następnie cFos Charging Manager nasłuchuje tematu MQTT cfos_mqtt/ctl i oczekuje wiadomości z obiektem JSON. Ten obiekt ma podobiekty z identyfikatorem urządzenia jako nazwą jako właściwościami. Podobiekty wyglądają następująco: {"cur": c, "ena": b, "wke": b, "phs": p}, gdzie c to prąd ładowania w mA, a b może mieć wartość true lub false. "ena": false dezaktywuje ładowanie w stacji Wallbox, "wke": true próbuje wysłać polecenie "wake up car" do stacji Wallbox (obecnie możliwe tylko ze stacjami Wallbox cFos Power Brain). p może wynosić 1 lub 3, aby przełączać między ładowaniem 1-fazowym i 3-fazowym. Można również pominąć "cur", "ena", "wke" i "phs", a tym samym wykonać tylko niektóre funkcje sterowania.
Przykład: {"E1":


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

Ustawia prąd ładowania stacji ładowania o identyfikatorze urządzenia na 8A, aktywuje ładowanie i próbuje wybudzić samochód. Ponadto prąd ładowania stacji ładowania E2 jest ustawiony na 10 A i przełączony na ładowanie 3-fazowe.

Wysyłanie logowania i dziennika transakcji przez MQTT

W "Konfiguracji" można określić adres URL brokera MQTT do przesyłania wpisów dziennika systemowego. Menedżer ładowania cFos następnie publikuje wszystkie wpisy dziennika w temacie cfos_mqtt/log. Pozwala to na zdalne monitorowanie logów programu Charging Manager. Możesz również określić adres URL brokera MQTT dla wpisów dziennika transakcji w "Konfiguracji". Następnie wszystkie transakcje ładowania są wysyłane pod tematem cfos_mqtt/ta_log. Umożliwia to zdalną ocenę danych księgowych transakcji ładowania oraz tworzenie kopii zapasowych transakcji ładowania w innym systemie. Transakcja ładowania rozpoczyna się w momencie podłączenia wtyczki do ładowania i kończy się w momencie jej odłączenia.

Liczniki zdefiniowane przez użytkownika z MQTT

Można tworzyć niestandardowe liczniki przy użyciu rtype = 2 dla MQTT. Liczniki te są zdefiniowane podobnie do liczników HTTP (rtype = 1). Jednak adresy tutaj nie są adresami URL HTTP, ale tematami MQTT.




Przykład: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Tutaj licznik zdefiniowany przez użytkownika subskrybuje temat /test_topic3 i oczekuje obiektu JSON z właściwością "power_w", np {"power_w": 1234}. Różne zmienne licznika mogą mieć różne tematy i są aktualizowane, gdy tylko wiadomość zostanie opublikowana w odpowiednim temacie.