Документация

Области применения MQTT

MQTT - это интернет-протокол с центральным брокером сообщений. С помощью этого брокера сообщений участники могут подписываться на определенные "темы" и отправлять сообщения в темы. Менеджер зарядки cFos может прослушивать сообщения на определенные темы и, таким образом, управляться через MQTT. Он также может передавать информацию о состоянии управляемых им устройств. CFos Power Brain Wallbox также может управляться через MQTT и передавать свое состояние. Это полезно при подключении к системе домашней автоматизации, для промышленного управления (M2M), а также для мониторинга и записи. Все темы начинаются с cfos_mqtt. Если вы хотите подключить несколько MQTT-устройств cFos к одному MQTT-брокеру, тема может опционально начинаться с cfos_mqtt_<серийный номер>/, настраивается под конфигурацию. В конфигурации вы также можете задать URL для брокера MQTT по умолчанию. По желанию URL могут начинаться с mqtt:// и mqtts: //. С помощью mqtts://, cFos Charging Manager или cFos Power Brain Wallbox устанавливает TLS-соединение. Используются стандартные порты 1883 для незашифрованных соединений и 8883 для соединений TLS. Однако вы также можете указать порт в URL. Имя пользователя и пароль могут быть указаны в обычной нотации URL, например, mqtt://user:password@192.168.2.111. Если вы указываете MQTT-брокера в конфигурации cFos Charging Manager, вы можете либо указать отдельного брокера, либо просто написать mqtt. В этом случае используется брокер по умолчанию, хранящийся в конфигурации.

Менеджер зарядки cFos поддерживает как 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 брокерам: благодаря Stefan G. (#diebestenuserderwelt) мы смогли протестировать MQTT брокер, встроенный в ioBroker. Этот MQTT 3.1.1 брокер ведет себя (по состоянию на февраль 2023 года) несколько несовместимо со стандартом: попытки соединения молча прерываются без сообщения об ошибке, полезная нагрузка иногда отсутствует в PUBLISH пакетах, PUBLISH пакеты, очевидно, отправляются дважды (можно ли это отключить настройкой конфигурации?). Это означает, что данный брокер не подходит для управления API Charging Manager, так как запросы API могут выполняться более одного раза. Несмотря на то, что мы заинтересованы в том, чтобы наша реализация MQTT была совместима с как можно большим количеством брокеров, в настоящее время мы рекомендуем использовать Mosquitto для ioBroker.

Интеграция счетчиков и настенных ящиков через устройство типа "HTTP Input".

Вместо того чтобы снабжать эти устройства через HTTP (см. HTTP API -> HTTP счетчики и настенные блоки), эти устройства могут также прослушивать MQTT. Введите mqtt или URL брокера MQTT в качестве адреса устройства. Затем соответствующий счетчик или wallbox прослушивает тему cfos_mqtt/set/<идентификатор устройства>, например, для счетчика с идентификатором устройства M1 - cfos_mqtt/set/M1. Затем счетчик HTTP-входа ожидает строку JSON в качестве сообщения, как описано в HTTP API в разделе "HTTP-счетчики и настенные ящики". Поэтому ваш источник 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

В конфигурации Charging Manager можно указать URL брокера MQTT (или mqtt для стандартного брокера), под которым Charging Manager затем публикует статус всех устройств в теме cfos_mqtt/get/dev_info. Он передает его в формате, известном из HTTP get_dev_info. Это дает вам все значения устройств, поскольку они также видны в пользовательском интерфейсе, например, значения мощности счетчиков или статус настенных ящиков. Если вы хотите подписаться только на отдельные устройства, вы можете деактивировать флажок "Публиковать информацию через MQTT" и вместо этого отметить опцию "Публиковать информацию через MQTT" в настройках отдельных устройств в разделе "Отображение". Тогда в теме cfos_mqtt/get/<device-ID> будет опубликована соответствующая JSON-строка о соответствующем устройстве . Кроме того, вы можете подписаться на все глобальные значения в теме cfos_mqtt/get/params, поскольку они выводятся в формате, известном из HTTP get_dev_info в разделе "params".

управление cFos Charging Manager API через MQTT

В конфигурации cFos Charging Manager в разделе "Брокер для доступа к API через MQTT" можно указать URL MQTT-брокера (или 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:
В общих настройках Charging Manager в разделе "Брокеры для доступа к API через MQTT" укажите своего брокера (или просто mqtt, если будет использоваться брокер по умолчанию, сохраненный в разделе "Конфигурация"). Затем, используя MQTT, опубликуйте в теме
cfos_mqtt/api/cmd=set_params
объект JSON следующего содержания:
{"max_total_cur_prc": p}
где p - это указание в процентах, какую часть от заданного максимального общего потока необходимо взять.
Примечание: Некоторые вызовы HTTP API заставляют Charging Manager сохранять конфигурацию. Если выполнять их слишком часто, это приведет к износу флэш-памяти (в cFos Power Brain или cFos Wallbox Booster) или SD-карты в Raspberry. Поэтому вызов API "set_params" с единственным параметром "max_total_cur_prc" не сохраняет параметры.

Управление настенными ящиками через MQTT

Если cFos Charging Manager находится не в режиме "Управление нагрузкой", а в режиме "Наблюдение", вы можете использовать MQTT, чтобы самостоятельно управлять всеми настенными блоками. В частности, это относится к настенным блокам cFos Power Brain, которые в режиме "Наблюдение" работают как ведомые. Для этого необходимо отметить опцию "Активировать управление настенными боксами" в разделе 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 пытается отправить настенному блоку команду "разбудить машину" (в настоящее время это возможно только с настенными блоками cFos Power Brain). p может быть 1 или 3 для переключения между 1-фазной и 3-фазной зарядкой. Вы также можете опустить "cur", "ena", "wke" и "phs" и таким образом выполнить только определенные функции управления.
Пример: {"E1":


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

Устанавливает ток зарядки wallbox с идентификатором устройства на 8A, активирует зарядку и пытается разбудить автомобиль. Кроме того, ток зарядки для wallbox E2 устанавливается на 10A и переключается на 3-фазную зарядку.

Отправка журнала регистрации и журнала транзакций через MQTT

В разделе "Конфигурация" можно указать URL-адрес брокера MQTT для передачи записей журнала в системный журнал. Затем cFos Charging Manager публикует все записи журнала в теме cfos_mqtt/log. Это позволяет удаленно контролировать журналы Charging Manager. Вы также можете указать URL-адрес брокера MQTT для записей журнала транзакций в разделе "Конфигурация". Затем все транзакции начисления отправляются в тему cfos_mqtt/ta_log. Это позволяет удаленно оценивать данные учета операций начисления и создавать резервные копии операций начисления на другой системе. Операция зарядки начинается, когда зарядный штекер вставляется в розетку, и заканчивается, когда он вынимается из розетки.

Определяемые пользователем счетчики с помощью MQTT

Вы можете создавать пользовательские счетчики, используя 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}. Различные переменные счетчика могут иметь разные темы и обновляются, как только сообщение публикуется в соответствующей теме.