MQTT - це інтернет-протокол з центральним брокером повідомлень. За допомогою цього брокера повідомлень учасники можуть підписуватися на певні "теми" та надсилати повідомлення на теми. CFos Charging Manager може прослуховувати повідомлення на певні теми і, таким чином, керувати ними через MQTT. Він також може передавати інформацію про стан пристроїв, якими керує. Зарядним пристроєм cFos Power Brain Wallbox також можна керувати через MQTT і передавати його стан. Це корисно при підключенні до системи домашньої автоматизації, для промислового управління (M2M) і для моніторингу та запису. Всі теми починаються з cfos_mqtt
. Якщо ви хочете підключити кілька пристроїв cFos MQTT до одного брокера MQTT, тема за бажанням може починатися з cfos_mqtt_<серійний номер>/
, що регулюється в конфігурації. У конфігурації ви також можете встановити URL-адресу для брокера MQTT за замовчуванням. За бажанням URL-адреси можуть починатися з mqtt://
та mqtts:
//. За допомогою mqtts://
cFos Charging Manager або cFos Power Brain Wallbox встановлює з'єднання TLS. Використовуються стандартні порти 1883 для незашифрованих з'єднань та 8883 для TLS-з'єднань. Однак, ви також можете вказати порт в URL-адресі. Ви можете вказати ім'я користувача та пароль у звичайній нотації URL, наприклад, mqtt://user:[email protected].
Якщо ви вказуєте брокера MQTT в конфігурації cFos Charging Manager, ви можете або вказати окремого брокера, або просто написати mqtt
. При цьому використовується брокер за замовчуванням, що зберігається в конфігурації.
CFos Charging Manager підтримує як MQTT 3.1.1, так і MQTT 5. Якщо ви дозволите URL-адресі починатися з mqtt3:// або mqtt5:// (mqtts3:// і mqtts5:// для зашифрованого з'єднання), ви визначите версію протоколу. За замовчуванням використовується MQTT 3.1.1. cFos Charging Manager намагається переключитися назад на MQTT 3.1.1 для MQTT 5, якщо відображається повідомлення про помилку. Це працює зі старими брокерами Mosquitto, але не обов'язково з іншими брокерами.
Примітка: Оскільки для налаштування MQTT потрібен пароль адміністратора, диспетчер заряджання обробляє дані відповідним чином. Тому навмисно надсилаються дані, доступ до яких можна отримати лише за допомогою пароля адміністратора.
Примітка щодо брокерів MQTT: Завдяки Стефану Г. (#diebestenuserderwelt) ми змогли протестувати MQTT-брокер, вбудований в ioBroker. Цей брокер MQTT 3.1.1 поводить себе (станом на лютий 2023 року) нестандартно: спроби підключення тихо завершуються без повідомлення про помилку, корисне навантаження іноді відсутнє в пакетах PUBLISH, пакети PUBLISH, очевидно, відправляються двічі (чи можна це вимкнути за допомогою налаштування конфігурації?). Це означає, що цей брокер не підходить для управління API Charging Manager, оскільки запити API можуть виконуватися більше одного разу. Незважаючи на те, що ми зацікавлені в тому, щоб наша реалізація MQTT була сумісна з якомога більшою кількістю брокерів, наразі ми рекомендуємо використовувати Mosquitto для ioBroker.
Замість того, щоб постачати ці пристрої через HTTP (див. HTTP API -> HTTP лічильники і wallbox), ці пристрої можуть також слухати MQTT. Введіть mqtt
або URL-адресу брокера MQTT як адресу пристрою. Потім відповідний лічильник або зарядний пристрій прослуховує тему cfos_mqtt/set/<ідентифікатор пристрою>,
наприклад, для лічильника з ідентифікатором пристрою M1 - cfos_mqtt/set/M1
. Потім HTTP-лічильник очікує JSON-рядок як повідомлення, як описано в HTTP API у розділі "HTTP-лічильники та wallboxes". Отже, ваше джерело MQTT має передавати дані у цьому форматі. Це дозволяє інтегрувати пристрої, які не підтримуються cFos Charging Manager, отримуючи дані з іншого джерела (наприклад, системи домашньої автоматизації), а потім передаючи їх у Charging Manager.
Примітка: Якщо дані з джерела мають інший формат, ніж очікує HTTP-лічильник, ви також можете створити власний лічильник. Для MQTT це описано нижче.
Приклад: Ви створили HTTP-лічильник входів, і він має M3 як ідентифікатор пристрою. Ви ввели адресу брокера Mosquitto, наприклад, mqtt://192.168.2.30. Якщо ви введете наступну команду в командному рядку на комп'ютері, на якому запущено 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] }'
лічильник повинен містити вищевказані значення.
У конфігурації Charging Manager ви можете вказати URL-адресу брокера MQTT (або mqtt для стандартного брокера), за якою Charging Manager потім публікує стан усіх пристроїв у темі cfos_mqtt/get/dev_info
. Він передає це у форматі, відомому з HTTP get_dev_info. Це дає вам всі значення пристроїв, оскільки вони також відображаються в інтерфейсі користувача, наприклад, значення потужності лічильників або стан настінних коробок. Якщо ви хочете підписатися лише на окремі пристрої, ви можете деактивувати прапорець "Публікувати інформацію через MQTT" і натомість позначити опцію "Публікувати інформацію через MQTT" у налаштуваннях окремих пристроїв у розділі "Відображення". Тоді відповідний JSON-рядок про відповідний пристрій буде опубліковано в темі cfos_mqtt/get/<device-ID>. Крім того, ви можете підписатися на всі глобальні значення в темі cfos_mqtt/get/params
, оскільки вони виводяться у форматі, відомому з HTTP get_dev_info в розділі "params".
У конфігурації cFos Charging Manager ви можете вказати URL-адресу брокера MQTT (або mqtt для стандартних брокерів) у розділі "Брокер для доступу до API через MQTT". Якщо це значення не порожнє, cFos Charging Manager підписується на всі теми, які починаються з cfos_mqtt/api/. Потім він інтерпретує повідомлення в таких темах так, ніби назва теми є HTTP URL, що починається з /cnf? і пересилає їх до HTTP API. Потім Charging Manager публікує відповідь HTTP API у форматі JSON у темі cfos_mqtt/api_res. Таким чином, ви маєте майже весь HTTP API під вашим контролем через MQTT. Виняток становлять виклики API, які надають довгі відповіді у форматі JSON. Приклад: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
встановлює змінну Charging Manager x на 1 за допомогою функції API set_cm_var. Повідомлення за адресою cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1
вводить RFID 5678 для зарядного пристрою з ідентифікатором E1 (див. також наші розширені функції RFID).
Дані, передані через HTTP POST, можна розмістити в повідомленні під темою.
Приклад: Періодично змінюйте максимальний загальний струм, доступний для диспетчера заряджання:
У загальних налаштуваннях Charging Manager у розділі "Брокери для доступу до API через MQTT" введіть свого брокера (або просто mqtt, якщо потрібно використовувати брокера за замовчуванням, який зберігається в розділі "Конфігурація"). Потім, використовуючи MQTT, опублікуйте в темі
cfos_mqtt/api/cmd=set_params
JSON-об'єкт з таким вмістом:
{"max_total_cur_prc": p}
де p - це вказівка у відсотках, яку частину від заданого максимального загального потоку слід взяти.
Примітка: Деякі виклики HTTP API призводять до того, що Диспетчер заряджання зберігає конфігурацію. Якщо ви виконуєте їх занадто часто, флеш (в cFos Power Brain або cFos Wallbox Booster) або SD-карта в Raspberry зноситься. Тому виклик API "set_params" з єдиним параметром "max_total_cur_prc" не зберігає параметри.
Якщо cFos Charging Manager перебуває не в режимі "Керування навантаженням", а в режимі "Спостереження", ви можете використовувати MQTT, щоб самостійно керувати всіма зарядними пристроями. Це стосується, зокрема, зарядних пристроїв cFos Power Brain, які працюють як підлеглі в режимі "Спостереження". Для цього ви повинні відзначити опцію "Активувати контроль над wallboxes" під MQTT в налаштуваннях Charging Manager. Після цього cFos Charging Manager прослуховує тему MQTT cfos_mqtt/ctl
і очікує на повідомлення з об'єктом JSON. Цей об'єкт має підоб'єкти з ідентифікатором пристрою у якості назви та властивостей. Суб-об'єкти виглядають наступним чином: {"cur": c, "ena": b, "wke": b, "phs": p}, де c - струм заряду в мА, а b може мати значення true або false. "ena": false деактивує заряджання зарядного пристрою, "wke": true намагається надіслати на зарядний пристрій команду "wake up car" (наразі це можливо лише для зарядних пристроїв cFos Power Brain). p може бути 1 або 3 для перемикання між 1-фазною та 3-фазною зарядкою. Ви також можете опустити "cur", "ena", "wke" і "phs" і таким чином виконувати лише певні функції керування.
Приклад: {"E1":
{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000, phs: 3}}
Встановлює струм заряджання зарядного пристрою з ідентифікатором пристрою на 8А, активує заряджання і намагається розбудити автомобіль. Крім того, зарядний струм для wallbox E2 встановлюється на 10А і перемикається на 3-фазну зарядку.
URL-адресу брокера MQTT для передачі записів журналу в системний журнал можна вказати в розділі "Конфігурація". Потім cFos Charging Manager публікує всі записи журналу в темі cfos_mqtt/log
. Це дозволяє віддалено контролювати журнали Charging Manager. Ви також можете вказати URL-адресу брокера MQTT для записів журналу транзакцій у розділі "Конфігурація". Після цього всі операції по нарахуванню надсилаються в темі cfos_mqtt/ta_log
. Це дає змогу дистанційно оцінювати дані бухгалтерського обліку та створювати резервні копії транзакцій на іншій системі. Операція заряджання починається, коли зарядний пристрій вставляється в розетку, і закінчується, коли він від'єднується від розетки.
Ви можете створювати власні лічильники, використовуючи rtype = 2 для MQTT. Ці лічильники визначаються аналогічно до HTTP лічильників (rtype = 1). Однак, адреси тут не HTTP URL, а MQTT-теми.
Приклад: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Тут користувацький лічильник підписується на тему /test_topic3 і очікує JSON-об'єкт з властивістю "power_w", наприклад, {"power_w": 1234}. Різні змінні лічильника можуть мати різні теми і оновлюються, як тільки у відповідній темі публікується повідомлення.