MQTT is een internetprotocol met een centrale message broker. Met deze berichtenmakelaar kunnen deelnemers zich abonneren op bepaalde "onderwerpen" en berichten naar onderwerpen sturen. De cFos Charging Manager kan luisteren naar berichten over specifieke onderwerpen en zo worden aangestuurd via MQTT. Het kan ook de status doorgeven van de apparaten die het beheert. De cFos Power Brain Wallbox kan ook worden bestuurd via MQTT en zijn status doorgeven. Dit is nuttig bij aansluiting op een domoticasysteem, voor industriële besturing (M2M) en voor monitoring en registratie. Alle onderwerpen beginnen met cfos_mqtt
. Als u meerdere cFos MQTT-apparaten wilt verbinden met één MQTT-broker, kan het onderwerp optioneel beginnen met cfos_mqtt_<serienummer>/
, instelbaar onder configuratie. In de configuratie kunt u ook een URL instellen voor de standaard MQTT-broker. URL's kunnen optioneel beginnen met mqtt://
en mqtts:
//. Met mqtts://
brengt de cFos Charging Manager of de cFos Power Brain Wallbox een TLS-verbinding tot stand. De standaardpoorten 1883 voor niet-gecodeerde verbindingen en 8883 voor TLS-verbindingen worden gebruikt. U kunt echter ook een poort opgeven in de URL. Gebruikersnaam en wachtwoord kunnen worden opgegeven in de gebruikelijke URL notatie, bijv. mqtt://user:password@192.168.2.111.
Als u een MQTT broker specificeert in de cFos Charging Manager configuratie, kunt u een individuele broker opgeven of gewoon mqtt
schrijven. In dit geval wordt de standaardmakelaar gebruikt die in de configuratie is opgeslagen.
De cFos Charging Manager ondersteunt zowel MQTT 3.1.1 als MQTT 5. Als u de URL laat beginnen met mqtt3:// of mqtt5:// (mqtts3:// en mqtts5:// voor versleutelde verbinding), bepaalt u de protocolversie. De standaard is MQTT 3.1.1. cFos Charging Manager probeert terug te schakelen naar MQTT 3.1.1 voor MQTT 5 als er een foutmelding wordt weergegeven. Dit werkt met oudere Mosquitto brokers, maar niet noodzakelijk met andere brokers.
Opmerking: Aangezien de instelling van MQTT het beheerderswachtwoord vereist, behandelt de Charging Manager de gegevens dienovereenkomstig. Er worden dus bewust gegevens verstuurd die alleen toegankelijk zijn met een admin-wachtwoord.
Opmerking over MQTT brokers: Dankzij Stefan G. (#diebestenuserderwelt) hebben we de MQTT broker die in ioBroker is ingebouwd kunnen testen. Deze MQTT 3.1.1 broker gedraagt zich (vanaf feb. 2023) op verschillende manieren niet standaard-conform: Connect-pogingen worden stilletjes beëindigd zonder foutmelding, de payload ontbreekt soms in PUBLISH-pakketten, PUBLISH-pakketten worden blijkbaar twee keer verzonden (kan dit worden uitgeschakeld door een config-instelling?). Dit betekent dat deze broker niet geschikt is voor het aansturen van de Charging Manager API, omdat API-verzoeken meer dan eens kunnen worden uitgevoerd. Hoewel we geïnteresseerd zijn in de compatibiliteit van onze MQTT-implementatie met zoveel mogelijk brokers, adviseren we momenteel Mosquitto te gebruiken voor ioBroker.
In plaats van deze apparaten te leveren via HTTP (zie HTTP API -> HTTP meters en wallboxes), kunnen deze apparaten ook luisteren naar MQTT. Voer mqtt
of een MQTT broker URL in als apparaatadres. Dan luistert de overeenkomstige meter of wallbox naar het topic cfos_mqtt/set/<device ID>,
bijv. voor een meter met de device ID M1 naar cfos_mqtt/set/M1
. De HTTP-invoermeter verwacht dan een JSON-string als bericht, zoals beschreven in de HTTP API onder "HTTP-meters en wallboxes". Uw MQTT-bron moet dus de gegevens in dit formaat aanleveren. Hierdoor kunt u apparaten integreren die niet door de cFos Charging Manager worden ondersteund, door de gegevens uit een andere bron te halen (bijv. een domoticasysteem) en ze vervolgens in de Charging Manager in te voeren.
Opmerking: Als de gegevens van de bron een ander formaat hebben dan de HTTP-teller verwacht, kunt u ook een aangepaste teller aanmaken. Voor MQTT wordt dit hieronder beschreven.
Voorbeeld: U hebt een HTTP-invoerteller aangemaakt en deze heeft als apparaat-ID M3. U hebt als adres het adres van de Mosquitto broker ingevoerd, bijvoorbeeld mqtt://192.168.2.30. Als u op de computer waarop Mosquitto draait het volgende commando op de commandoregel invoert: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] }'
de teller moet dan de bovenstaande waarden bevatten.
In de configuratie van de Laadmanager kun je een MQTT broker URL specificeren (of mqtt voor standaard broker), waaronder de Laadmanager dan de status van alle apparaten publiceert onder het onderwerp cfos_mqtt/get/dev_info
. Dit wordt verzonden in het formaat dat bekend is van HTTP get_dev_info. Dit geeft je alle waarden van de apparaten zoals ze ook zichtbaar zijn in de UI, bv. de vermogenswaarden van de meters of de status van de wallboxes. Als je je alleen wilt abonneren op individuele apparaten, kun je het selectievakje "Publish info via MQTT" uitschakelen en in plaats daarvan de optie "Publish info via MQTT" aanvinken in de instellingen van de individuele apparaten onder "Display". Dan wordt een overeenkomstige JSON-string over het respectieve apparaat gepubliceerd onder het onderwerp cfos_mqtt/get/<device-ID>. Daarnaast kun je je abonneren op alle globale waarden onder het onderwerp cfos_mqtt/get/params
, aangezien deze worden uitgevoerd in het formaat dat bekend is van HTTP get_dev_info onder "params".
In de configuratie van de cFos Charging Manager kun je een MQTT broker URL (of mqtt voor standaard brokers) opgeven onder "Broker voor API-toegang via MQTT". Als deze waarde niet leeg is, abonneert de cFos Charging Manager zich op alle onderwerpen die beginnen met cfos_mqtt/api/. Hij interpreteert dan berichten onder zulke topics alsof de topicnaam een HTTP URL is die begint met /cnf? en stuurt ze door naar de HTTP API. De Charging Manager publiceert dan het antwoord van de HTTP API als JSON onder het topic cfos_mqtt/api_res. Op deze manier heb je bijna de volledige HTTP API onder controle via MQTT. Uitzonderingen zijn API aanroepen die lange JSON antwoorden leveren. Voorbeeld: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1
zet de Charging Manager variabele x op 1 met de API functie set_cm_var. Een bericht onder cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1
voert de RFID 5678 in voor de wallbox met de apparaat-ID E1 (zie ook onze uitgebreide RFID functies).
Gegevens die via HTTP POST worden verzonden, kunnen in het bericht onder het onderwerp worden geplaatst.
Voorbeeld: Wijzig periodiek de maximale totale stroom die beschikbaar is voor de Laadmanager:
Voer je broker in onder de algemene Charging Manager instellingen onder "Brokers voor API-toegang via MQTT" (of gewoon mqtt als de standaardbroker opgeslagen onder "Configuratie" moet worden gebruikt). Publiceer vervolgens via MQTT naar het onderwerp
cfos_mqtt/api/cmd=set_params
een JSON-object met de volgende inhoud:
{"max_total_cur_prc": p}
waarbij p een indicatie in procenten is van welk deel van de vooraf ingestelde maximale totale stroom moet worden genomen.
Opmerking: Sommige HTTP API-aanroepen zorgen ervoor dat de Laadmanager de configuratie opslaat. Als je ze te vaak uitvoert, zal de flash (in de cFos Power Brain of cFos Wallbox Booster) of de SD-kaart in de Raspberry verslijten. De API-aanroep "set_params" met de enkele parameter "max_total_cur_prc" slaat de parameters daarom niet op.
Als de cFos Laadmanager niet in de "Laadbeheer" modus staat, maar in de "Observeer" modus, kun je MQTT gebruiken om zelf de controle over alle wallboxen over te nemen. Dit geldt in het bijzonder voor cFos Power Brain wallboxen die als slaves worden bediend in de "Observeer" modus. Hiervoor moet je de optie "Activate control of wallboxes" aanvinken onder MQTT in de Charging Manager instellingen. De cFos Charging Manager luistert dan naar het MQTT topic cfos_mqtt/ctl
en verwacht berichten met een JSON object. Dit object heeft sub-objecten met de apparaat-ID als naam als eigenschappen. De sub-objecten zien er als volgt uit: {"cur": c, "ena": b, "wke": b, "phs": p}, waarbij c de laadstroom in mA is en b elk waar of onwaar kan zijn. "ena": false deactiveert het laden bij de wallbox, "wke": true probeert een "wake up car" commando naar de wallbox te sturen (momenteel alleen mogelijk met cFos Power Brain wallboxen). p kan 1 of 3 zijn om te schakelen tussen 1-fase en 3-fase laden. Je kunt ook "cur", "ena", "wke" en "phs" weglaten en zo alleen bepaalde besturingsfuncties uitvoeren.
Voorbeeld: {"E1":
{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000, phs: 3}}
Stelt de laadstroom van de wallbox met de apparaat-ID in op 8A, activeert het laden en probeert de auto wakker te maken. Bovendien wordt de laadstroom voor wallbox E2 ingesteld op 10A en omgeschakeld naar driefasig laden.
Onder "Configuratie" kunt u een MQTT broker URL opgeven voor de verzending van logboekvermeldingen in het systeemlogboek. De cFos Charging Manager publiceert vervolgens alle logboekvermeldingen onder het onderwerp cfos_mqtt/log
. Hiermee kunt u de logboeken van de Charging Manager op afstand controleren. U kunt ook een MQTT broker URL opgeven voor transactielogboekvermeldingen onder "Configuratie". Dan worden alle oplaadtransacties verzonden onder het onderwerp cfos_mqtt/ta_log
. Dit maakt de evaluatie op afstand van boekhoudkundige gegevens over oplaadtransacties en het maken van back-ups van oplaadtransacties op een ander systeem mogelijk. Een laadtransactie begint wanneer de laadstekker in het stopcontact wordt gestoken en eindigt wanneer deze uit het stopcontact wordt gehaald.
U kunt aangepaste tellers aanmaken met rtype = 2 voor MQTT. Deze tellers worden op dezelfde manier gedefinieerd als HTTP-tellers (rtype = 1). De adressen zijn hier echter geen HTTP URL's, maar MQTT topics.
Voorbeeld: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
Hier abonneert de door de gebruiker gedefinieerde teller zich op het onderwerp /test_topic3 en verwacht een JSON-object met eigenschap "power_w", bijvoorbeeld {"power_w": 1234}. Verschillende tellervariabelen kunnen verschillende onderwerpen hebben en worden bijgewerkt zodra een bericht wordt gepubliceerd onder het overeenkomstige onderwerp.