MQTT е интернет протокол с централен брокер на съобщения. С помощта на този брокер на съобщения участниците могат да се абонират за определени "теми" и да изпращат съобщения до тях. Мениджърът за зареждане на cFos може да слуша съобщения по определени теми и по този начин да бъде управляван чрез MQTT. Той може също така да съобщава състоянието на устройствата, които управлява. Уолбоксът cFos Power Brain може да се управлява и чрез MQTT и да предава състоянието си. Това е полезно при свързване към система за домашна автоматизация, за промишлен контрол (M2M) и за наблюдение и запис. Всички теми започват с cfos_mqtt
. Ако искате да свържете няколко cFos MQTT устройства към един MQTT брокер, темата може по желание да започне с cfos_mqtt_<сериен номер>/
, което може да се регулира при конфигурирането. В конфигурацията можете също така да зададете URL адрес за MQTT брокера по подразбиране. URL адресите могат по желание да започват с mqtt://
и mqtts:
//. С mqtts://
мениджърът за зареждане на cFos или кутията за захранване cFos Power Brain Wallbox установяват TLS връзка. Използват се стандартните портове 1883 за некриптирани връзки и 8883 за TLS връзки. Можете обаче да посочите и порт в URL адреса. Потребителското име и паролата могат да бъдат зададени в обичайната нотация на URL, напр. mqtt://user:[email protected]
. Ако посочите брокер на 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 (вж. HTTP API -> HTTP измервателни уреди и стенни кутии), тези устройства могат да слушат и MQTT. Въведете mqtt
или URL адрес на брокер на MQTT като адрес на устройството. След това съответният измервателен уред или стенна кутия слуша темата cfos_mqtt/set/<идентификатор на устройството>
, например за измервателен уред с идентификатор на устройството M1 - cfos_mqtt/set/M1
. След това измервателният уред с вход HTTP очаква JSON низ като съобщение, както е описано в HTTP API в "HTTP измервателни уреди и wallbox". Следователно вашият MQTT източник трябва да доставя данните в този формат. Това ви позволява да интегрирате устройства, които не се поддържат от мениджъра за таксуване cFos, като получавате данните от друг източник (напр. система за домашна автоматизация) и след това ги подавате към мениджъра за таксуване.
Забележка: Ако данните от източника са във формат, различен от този, който очаква 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] }'
след това броячът трябва да съдържа горните стойности.
В конфигурацията на мениджъра за зареждане можете да посочите URL адрес на MQTT брокер (или mqtt за стандартен брокер), под който мениджърът за зареждане публикува състоянието на всички устройства в темата cfos_mqtt/get/dev_info
. Той предава това във формат, познат от HTTP get_dev_info. Това ви дава всички стойности на устройствата, тъй като те са видими и в потребителския интерфейс, напр. стойностите на мощността на електромерите или състоянието на wallboxes. Ако искате да се абонирате само за отделни устройства, можете да деактивирате квадратчето за отметка "Publish info via MQTT" (Публикуване на информация чрез MQTT) и вместо това да поставите отметка на опцията "Publish info via MQTT" (Публикуване на информация чрез MQTT) в настройките на отделните устройства в "Display" (Показване). След това съответният JSON низ за съответното устройство се публикува под темата cfos_mqtt/get/<device-ID>. Освен това можете да се абонирате за всички глобални стойности под темата cfos_mqtt/get/params
, тъй като те се извеждат във формат, познат от HTTP get_dev_info, под "params".
В конфигурацията на мениджъра за таксуване на cFos можете да посочите URL адрес на брокер на MQTT (или mqtt за стандартни брокери) в "Брокер за достъп до API чрез MQTT". Ако тази стойност не е празна, cFos Charging Manager се абонира за всички теми, които започват с cfos_mqtt/api/. След това той интерпретира съобщенията по такива теми, сякаш името на темата е HTTP URL адрес, започващ с /cnf?, и ги препраща към HTTP API. След това мениджърът за таксуване публикува отговора на HTTP API като JSON под тема cfos_mqtt/api_res. По този начин имате почти целия HTTP API под свой контрол чрез MQTT. Изключения са API повикванията, които предоставят дълги JSON отговори. Пример: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
задава променливата x на Charging Manager на 1 с API функцията set_cm_var. Съобщение под cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1
въвежда RFID 5678 за wallbox с идентификатор на устройството E1 (вижте също нашите разширени RFID функции).
Данните, предавани чрез HTTP POST, могат да бъдат поместени в съобщението по темата.
Пример: Периодично променяйте максималния общ ток, с който разполага мениджърът за зареждане:
Въведете вашия брокер в общите настройки на Charging Manager в "Brokers for API access via MQTT" (или просто mqtt, ако трябва да се използва брокерът по подразбиране, съхранен в "Configuration"). След това, използвайки 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 не е в режим "Управление на натоварването", а в режим "Наблюдение", можете да използвате MQTT, за да поемете сами управлението на всички wallboxes. Това се отнася по-специално за wallbox-овете cFos Power Brain, които се управляват като подчинени устройства в режим "Наблюдение". За да направите това, трябва да поставите отметка на опцията "Activate control of wallboxes" (Активиране на контрола на wallboxes) под MQTT в настройките на Charging Manager (Мениджър за зареждане). След това мениджърът за зареждане на cFos слуша темата MQTT cfos_mqtt/ctl
и очаква съобщения с обект JSON. Този обект има подобекти с идентификатор на устройството като име като свойства. Подобектите изглеждат по следния начин: {"cur": c, "ena": b, "wke": b, "phs": p}, където c е токът на зареждане в mA, а 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-фазно зареждане.
Можете да зададете URL адрес на MQTT брокер за предаване на записи в системния дневник в раздел "Конфигурация". След това мениджърът за таксуване на cFos публикува всички записи в дневника в темата 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}. Различните променливи на брояча могат да имат различни теми и се актуализират веднага щом се публикува съобщение по съответната тема.