Documentation

Domaines d'application de MQTT

MQTT est un protocole Internet avec un agent de messages central. Avec ce courtier en messages, les participants peuvent s'abonner à certains "topics" et envoyer des messages relatifs à ces topics. Le gestionnaire de charge cFos peut écouter les messages relatifs à certains topics et être ainsi commandé via MQTT. Il peut également transmettre l'état des appareils qu'il gère. La cFos Power Brain Wallbox peut également être commandée via MQTT et transmettre son état. Cela est utile pour la connexion à un système domotique, pour le contrôle industriel (M2M) et pour la surveillance et l'enregistrement. Tous les topics commencent par cfos_mqtt. Si vous souhaitez connecter plusieurs appareils cFos MQTT à un broker MQTT, le topic peut en option commencer par cfos_mqtt_<numéro de série>/, réglable dans la configuration. Dans la configuration, il est également possible de définir une URL pour le broker MQTT standard. Les URL peuvent éventuellement commencer par mqtt:// et mqtts://. Avec mqtts://, le cFos Charging Manager ou la cFos Power Brain Wallbox établit une connexion TLS. Les ports standard 1883 pour les connexions non cryptées et 8883 pour les connexions TLS sont utilisés. Mais vous pouvez aussi indiquer un port dans l'URL. Vous pouvez indiquer le nom d'utilisateur et le mot de passe dans l'orthographe habituelle de l'URL, par exemple mqtt://user:password@192.168.2.111. Si vous indiquez un courtier MQTT dans la configuration de cFos Charging Manager, vous pouvez au choix indiquer un courtier individuel ou simplement écrire mqtt. Dans ce cas, le broker par défaut défini dans la configuration est utilisé.

Le cFos Charging Manager supporte aussi bien MQTT 3.1.1 que MQTT 5. Si vous faites commencer l'URL par mqtt3:// ou mqtt5:// (mqtts3:// et mqtts5:// pour une connexion cryptée), vous déterminez ainsi la version du protocole. La version par défaut est MQTT 3.1.1. Avec MQTT 5, le cFos Charging Manager essaie de revenir à MQTT 3.1.1 en cas de message d'erreur correspondant. Cela fonctionne avec les anciens courtiers Mosquitto, mais pas forcément avec d'autres courtiers.

Remarque: comme la mise en place de MQTT nécessite le mot de passe administrateur, le Charging Manager traite les données en conséquence. Il envoie donc délibérément des données auxquelles on ne peut accéder qu'avec un mot de passe administrateur.

Remarque concernant les courtiers MQTT: grâce à Stefan G. (#meilleurutilisateurdumonde), nous avons pu tester le courtier MQTT intégré à ioBroker. Ce broker MQTT 3.1.1 se comporte (en février 2023) de manière non conforme au standard à plusieurs égards : les tentatives de connexion se terminent silencieusement sans message d'erreur, la charge utile manque parfois dans les paquets PUBLISH, les paquets PUBLISH sont apparemment envoyés en double (est-il possible d'y remédier par un réglage de la configuration ?) Ce courtier n'est donc pas adapté au contrôle de l'API Charging Manager, car les demandes API peuvent être exécutées plusieurs fois. Bien que nous souhaitions que notre implémentation MQTT soit compatible avec le plus grand nombre possible de courtiers, nous recommandons actuellement l'utilisation de Mosquitto pour ioBroker.

Intégration de compteurs et de Wallbox au moyen du type d'appareil "HTTP Input".

Au lieu d'alimenter ces appareils au moyen de HTTP (voir HTTP API -> Compteurs HTTP et Wallbox), ces appareils peuvent aussi écouter MQTT. Saisissez mqtt ou une URL de courtier MQTT comme adresse d'appareil. Le compteur ou la Wallbox correspondant écoute alors le topic cfos_mqtt/set/<ID appareil>, par ex. pour un compteur avec l'ID appareil M1, cfos_mqtt/set/M1. Comme message, le compteur d'entrée HTTP attend alors une chaîne JSON, comme décrit dans l'API HTTP sous "Compteurs HTTP et Wallbox". Votre source MQTT doit donc fournir les données dans ce format. Vous pouvez ainsi intégrer des appareils que le cFos Charging Manager ne prend pas en charge en obtenant les données d'une autre source (p. ex. un système domotique) et les importer ensuite dans le Charging Manager.
Remarque: si les données de la source sont dans un format différent de celui attendu par le compteur HTTP, vous pouvez également créer un compteur personnalisé. Pour MQTT, cela est décrit plus loin.

Exemple :
Vous avez créé un compteur d'entrées HTTP et celui-ci a M3 comme ID de périphérique. Comme adresse, vous avez indiqué l'adresse du Mosquitto Broker, par exemple mqtt://192.168.2.30. Si vous entrez la commande suivante sur la ligne de commande de l'ordinateur sur lequel fonctionne 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] }'
le compteur devrait alors contenir les valeurs ci-dessus.

Transmettre l'état des appareils Charging Manager

Dans la configuration du Charging Manager, vous pouvez indiquer une URL de courtier MQTT (ou mqtt pour Standard broker), sous laquelle le Charging Manager publie ensuite l'état de tous les appareils sous le topic cfos_mqtt/get/dev_info. Il transmet cet état dans le format connu de HTTP get_dev_info. Vous obtenez ainsi toutes les valeurs des appareils, telles qu'elles sont également visibles dans l'UI, par ex. les valeurs de puissance des compteurs ou l'état des Wallbox. Si vous ne souhaitez vous abonner qu'à certains appareils, vous pouvez désactiver la case à cocher "Publier les infos via MQTT" et cocher à la place l'option "Publier les infos via MQTT" dans les paramètres des différents appareils sous "Affichage". Une chaîne JSON correspondante est alors publiée sur l'appareil concerné sous le topic cfos_mqtt/get/<ID appareil>. En outre, vous pouvez vous abonner sous le topic cfos_mqtt/get/params à toutes les valeurs globales, telles qu'elles sont émises sous "params" dans le format connu de HTTP get_dev_info.

piloter l'API cFos Charging Manager via MQTT

Dans la configuration de cFos Charging Manager, vous pouvez indiquer une URL de courtier MQTT sous "Courtier pour l'accès à l'API via MQTT" (ou mqtt pour le courtier standard). Si cette valeur n'est pas vide, le cFos Charging Manager s'abonne à tous les topics qui commencent par cfos_mqtt/api/. Il interprète alors les messages sous de tels topic comme si le nom du topic était une URL HTTP commençant par /cnf ? et les transmet à l'API HTTP. Le Charging Manager publie ensuite la réponse de l'API HTTP sous le topic cfos_mqtt/api_res en tant que JSON. Ainsi, via MQTT, vous avez la quasi-totalité de l'API HTTP sous votre contrôle. Les exceptions sont les appels API qui fournissent des réponses JSON longues. Exemple : cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 définit la variable Charging Manager x à 1 avec la fonction API set_cm_var. Un message sous cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 saisit le RFID 5678 pour la Wallbox avec l'ID d'appareil E1 (voir aussi nos fonctions RFID étendues).
Les données qui sont transmises par HTTP POST peuvent être mises dans le message sous le topic.

Exemple : modifier périodiquement le courant total maximal dont dispose le gestionnaire de charge :
Dans les paramètres généraux du Charging Manager, indiquez votre courtier (ou simplement mqtt si le courtier par défaut enregistré sous "Configuration" doit être utilisé) sous "Courtiers pour l'accès API via MQTT". Ensuite, publiez au moyen de MQTT au topic
cfos_mqtt/api/cmd=set_params
un objet JSON avec le contenu suivant :
{"max_total_cur_prc" : p}
où p est une indication en pourcentage de la part du flux total maximal prédéfini qui doit être prise.
Remarque: certains appels à l'API HTTP entraînent l'enregistrement de la configuration par le Charging Manager. Si vous les exécutez trop souvent, la flash (dans le cFos Power Brain ou le cFos Wallbox Booster) ou la carte SD dans le Raspberry s'usera. L'appel API "set_params" avec le paramètre unique "max_total_cur_prc" ne permet donc pas de sauvegarder les paramètres.

Contrôler les Wallbox via MQTT

Si le cFos Charging Manager n'est pas en mode "Gestion de la charge", mais en mode "Observation", vous pouvez prendre en charge vous-même la commande de toutes les wallboxes au moyen de MQTT. Cela vaut en particulier pour les wallbox cFos Power Brain qui sont exploitées en mode "Observation" en tant qu'esclaves. Pour cela, il faut cocher l'option "Activer la commande des wallboxes" dans les paramètres du Charging Manager sous MQTT. Ensuite, le cFos Charging Manager écoute le topic MQTT cfos_mqtt/ctl et attend des messages avec un objet JSON. Cet objet a comme propriétés des sous-objets avec l'ID de l'appareil comme nom. Les sous-objets se présentent comme suit : {"cur" : c, "ena" : b, "wke" : b}, où c est le courant de charge en mA, et b peut être respectivement true ou false. "ena" : false désactive la charge sur la wallbox, "wke" : true tente d'envoyer à la wallbox une commande "Réveiller la voiture" (actuellement uniquement possible sur les wallboxes cFos Power Brain). Vous pouvez également omettre "cur", "ena" et "wke" pour n'exécuter que certaines fonctions de contrôle. Exemple :
{"E1" :
{cur : 8000, ena : true, wke : true},
"E2" :
{cur : 10000}}

Définit le courant de charge de la Wallbox avec l'ID de l'appareil sur 8A, active la charge et tente de réveiller la voiture. De plus, le courant de charge de la Wallbox E2 est fixé à 10A.

Envoi du log et du log des transactions via MQTT

Pour la transmission des entrées de log, vous pouvez indiquer une URL de courtier MQTT dans le journal du système sous "Configuration". Le cFos Charging Manager publie alors toutes les entrées de log sous le topic cfos_mqtt/log. Cela vous permet de surveiller le Charging Manager et d'évaluer les logs à distance. Vous pouvez également indiquer sous "Configuration" une URL de courtier MQTT pour les entrées du journal des transactions. Toutes les transactions de chargement sont alors envoyées sous le topic cfos_mqtt/ta_log. Cela permet d'évaluer à distance les données de facturation des transactions de chargement et de créer des sauvegardes des transactions de chargement sur un autre système. Une transaction de charge commence lorsque la prise de charge est branchée et se termine lorsque la prise est débranchée.

Compteurs définis par l'utilisateur avec MQTT

Vous pouvez créer des compteurs personnalisés en utilisant rtype = 2 pour MQTT. Ces compteurs sont définis de manière similaire aux compteurs HTTP (rtype = 1). Les adresses ne sont toutefois pas des URL HTTP, mais des topics MQTT. Exemple :
"power_w" : {
"address" : "/test_topic3",
"type" : "float",
"query" : "power_w"
}

Ici, le compteur personnalisé s'abonne au topic /test_topic3 et attend un objet JSON avec la propriété "power_w", donc par exemple {"power_w" : 1234}. Différentes variables de compteur peuvent avoir différents topics et sont actualisées dès qu'un message est publié sous le topic correspondant.