Documentação

Áreas de aplicação do MQTT

O MQTT é um protocolo de Internet com um corretor central de mensagens. Com este corretor de mensagens, os participantes podem subscrever certos "tópicos" e enviar mensagens aos tópicos. O Gestor de Carregamento cFos pode ouvir mensagens sobre tópicos específicos e assim ser controlado através do MQTT. Pode também comunicar o estado dos dispositivos que gere. O cFos Power Brain Wallbox também pode ser controlado via MQTT e transmitir o seu estado. Isto é útil quando se liga a um sistema de domótica, para controlo industrial (M2M) e para monitorização e registo. Todos os tópicos começam com cfos_mqtt. Se desejar ligar vários dispositivos cFos MQTT a um corretor MQTT, o tópico pode opcionalmente começar com cfos_mqtt_< número de série>/, ajustável sob configuração. Na configuração pode também definir um URL para o corretor MQTT padrão. Os URLs podem opcionalmente começar com mqtt:// e mqtts://. Com mqtts://, o cFos Charging Manager ou o cFos Power Brain Wallbox estabelece uma ligação TLS. São utilizadas as portas padrão 1883 para ligações não encriptadas e 8883 para ligações TLS. No entanto, pode também especificar um porto no URL. Pode especificar o nome de utilizador e palavra-passe na notação URL habitual, por exemplo mqtt://user:password@192.168.2.111. Se especificar um corretor MQTT na configuração do cFos Charging Manager, pode especificar um corretor individual ou simplesmente escrever mqtt. Neste caso, é utilizado o corretor padrão armazenado na configuração.

O cFos Charging Manager suporta tanto MQTT 3.1.1 como MQTT 5. Se deixar o URL começar com mqtt3:// ou mqtt5:// (mqtts3:// e mqtts5:// para ligação encriptada), determina a versão do protocolo. O padrão é MQTT 3.1.1. cFos Charging Manager tenta mudar para MQTT 3.1.1 para MQTT 5 se for exibida uma mensagem de erro. Isto funciona com corretores Mosquitto mais antigos, mas não necessariamente com outros corretores.

Nota: Uma vez que a configuração do MQTT requer a senha de administração, o Gestor de Carregamento trata os dados em conformidade. Assim, são deliberadamente enviados dados que só podem ser acedidos com uma palavra-passe de administrador.

Nota sobre corretores MQTT: Graças a Stefan G. (#diebestenuserderwelt) pudemos testar o corretor MQTT incorporado no ioBroker. Este corretor MQTT 3.1.1 comporta-se (a partir de Fev. 2023) de várias maneiras não conformes com as normas: as tentativas de ligação são silenciosamente terminadas sem uma mensagem de erro, a carga útil por vezes falta nos pacotes PUBLISH, os pacotes PUBLISH são aparentemente enviados duas vezes (isto pode ser desligado por uma configuração?). Isto significa que este corretor não é adequado para controlar a API do Charging Manager, uma vez que os pedidos API podem ser executados mais do que uma vez. Embora estejamos interessados em que a nossa implementação MQTT seja compatível com o maior número possível de corretores, recomendamos actualmente a utilização de Mosquitto para o ioBroker.

Integração de contadores e caixas de parede através de dispositivo do tipo "HTTP Input".

Em vez de fornecer estes dispositivos via HTTP (ver HTTP API -> medidores e caixas de parede HTTP), estes dispositivos também podem ouvir o MQTT. Introduza o mqtt ou um URL do corretor MQTT como endereço do dispositivo. Depois o medidor ou wallbox correspondente escuta o tópico cfos_mqtt/set/<device ID>, por exemplo, para um medidor com o ID do dispositivo M1 a cfos_mqtt/set/M1. O medidor de entrada HTTP espera então uma string JSON como mensagem, conforme descrito no HTTP API em "HTTP meters and wallboxes". A sua fonte MQTT deve, portanto, entregar os dados neste formato. Isto permite-lhe integrar dispositivos que não são suportados pelo Gestor de Carregamento cFos, obtendo os dados de outra fonte (por exemplo, um sistema de domótica) e depois alimentá-los com o Gestor de Carregamento.
Nota: Se os dados da fonte estiverem num formato diferente do que o contador HTTP espera, pode também criar um contador personalizado. Para o MQTT, isto é descrito abaixo.


Exemplo: Criou um contador de entrada HTTP e este tem M3 como ID do dispositivo. Introduziu o endereço do corretor Mosquitto como endereço, por exemplo, mqtt://192.168.2.30. Se introduzir o seguinte comando na linha de comandos do computador em que o Mosquitto está a ser executado:
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] }'
o contador deve então conter os valores acima referidos.

Transferir o estado dos dispositivos do Gestor de Carregamento

Na configuração do gestor de carregamento, pode especificar um URL do broker MQTT (ou mqtt para o broker standard), no qual o gestor de carregamento publica o estado de todos os aparelhos no tópico cfos_mqtt/get/dev_info. Transmite-o no formato conhecido do HTTP get_dev_info. Isto dá-lhe todos os valores dos dispositivos tal como são visíveis na interface do utilizador, por exemplo, os valores de potência dos contadores ou o estado das Wallboxes. Se pretender subscrever apenas dispositivos individuais, pode desactivar a caixa de verificação "Publicar informações via MQTT" e, em vez disso, marcar a opção "Publicar informações via MQTT" nas definições dos dispositivos individuais em "Mostrar". Em seguida, é publicada uma cadeia JSON correspondente sobre o respectivo dispositivo no tópico cfos_mqtt/get/<device-ID>. Para além disso, pode subscrever todos os valores globais no tópico cfos_mqtt/get/params, uma vez que estes são apresentados no formato conhecido de HTTP get_dev_info em "params".

controlo cFos Charging Manager API via MQTT

Na configuração do cFos Charging Manager, pode especificar um URL do broker MQTT (ou mqtt para os brokers standard) em "Broker for API access via MQTT". Se este valor não estiver vazio, o cFos Charging Manager subscreve todos os tópicos que começam por cfos_mqtt/api/. Em seguida, interpreta as mensagens nesses tópicos como se o nome do tópico fosse um URL HTTP que começa por /cnf? e encaminha-as para a API HTTP. O gestor de carregamento publica então a resposta da API HTTP como JSON no tópico cfos_mqtt/api_res. Desta forma, tem quase toda a API HTTP sob o seu controlo através do MQTT. As excepções são as chamadas de API que fornecem respostas JSON longas. Exemplo: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 define a variável x do Charging Manager para 1 com a função API set_cm_var. Uma mensagem em cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 introduz o RFID 5678 para a Wallbox com o ID de aparelho E1 (consulte também as nossas funções RFID alargadas).
Os dados transmitidos via HTTP POST podem ser colocados na mensagem sob o tópico.

Exemplo: Alterar periodicamente a corrente total máxima disponível para o gestor de carregamento:
Introduza o seu broker nas definições gerais do gestor de carregamento em "Brokers para acesso à API via MQTT" (ou simplesmente mqtt se for utilizado o broker predefinido guardado em "Configuração"). Em seguida, utilizando o MQTT, publique no tópico
cfos_mqtt/api/cmd=set_params
um objeto JSON com o seguinte conteúdo:
{"max_total_cur_prc": p}
onde p é uma indicação em percentagem da parte do fluxo total máximo predefinido que deve ser utilizada.
Nota: Algumas das chamadas à API HTTP fazem com que o gestor de carregamento guarde a configuração. Se as executar com demasiada frequência, o flash (no cFos Power Brain ou no cFos Wallbox Booster) ou o cartão SD no Raspberry ficarão gastos. A chamada à API "set_params" com o único parâmetro "max_total_cur_prc" não guarda, portanto, os parâmetros.

Caixas de controlo de parede via MQTT

Se o cFos Charging Manager não estiver no modo "Load Management", mas sim no modo "Observe", pode utilizar o MQTT para controlar todas as Wallboxes. Isto aplica-se em particular às Wallboxes cFos Power Brain que são operadas como escravas no modo "Observar". Para tal, tem de assinalar a opção "Activate control of wallboxes" (Ativar controlo das Wallboxes) em Charging Manager Settings (Definições do Gestor de Carregamento) na secção MQTT. Em seguida, o gestor de carregamento cFos ouve o tópico MQTT cfos_mqtt/ctl e espera mensagens com um objeto JSON. Este objecto tem sub-objectos como propriedades com o ID do aparelho como nome. Os subobjectos têm o seguinte aspecto: {"cur": c, "ena": b, "wke": b}, em que c é a corrente de carga em mA e b pode ser verdadeiro ou falso, respectivamente. "ena": falso desactiva o carregamento na wallbox, "wke": verdadeiro tenta enviar um comando "wake up car" para a wallbox (actualmente só é possível com wallboxes cFos Power Brain). Também é possível omitir "cur", "ena" e "wke" e, assim, executar apenas determinadas funções de controlo.
Exemplo: {"E1":


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

Define a corrente de carga da Wallbox com o ID do dispositivo para 8A, activa o carregamento e tenta acordar o automóvel. Além disso, a corrente de carga da Wallbox E2 é definida para 10A.

Enviar registo e registo de transacções via MQTT

Pode especificar um URL de corretor MQTT para a transmissão de entradas de registo no registo do sistema em "Configuração". O Gestor de Carregamento cFos publica então todas as entradas de registo sob o tópico cfos_mqtt/log. Isto permite-lhe monitorizar os registos do Gestor de Carregamento remotamente. Pode também especificar um URL de corretor MQTT para entradas de registo de transacções em "Configuração". Depois todas as transacções de cobrança são enviadas sob o tópico cfos_mqtt/ta_log. Isto permite a avaliação remota dos dados contabilísticos das transacções de cobrança e a criação de cópias de segurança das transacções de cobrança num outro sistema. Uma transacção de carregamento começa quando a ficha de carregamento está ligada e termina quando está desligada da corrente.

Contadores definidos pelo utilizador com MQTT

É possível criar contadores personalizados utilizando rtype = 2 para MQTT. Estes contadores são definidos de forma semelhante aos contadores HTTP (rtype = 1). No entanto, os endereços aqui não são URLs HTTP, mas tópicos MQTT.




Exemplo: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Aqui o contador definido pelo utilizador subscreve o tópico /test_topic3 e espera um objecto JSON com a propriedade "power_w", por exemplo, {"power_w": 1234}. Diferentes variáveis de contador podem ter diferentes tópicos e são actualizadas assim que uma mensagem é publicada no tópico correspondente.