ドキュメント

MQTTアプリケーション分野

MQTTは、中央のメッセージブローカーを持つインターネットプロトコルである。このメッセージブローカーにより、参加者は特定の「トピック」を購読し、トピックに対してメッセージを送信することができます。cFosチャージングマネージャーは、特定のトピックに関するメッセージをリスニングすることができるため、MQTTを介して制御することができます。また、管理する機器の状態も伝えることができます。cFos Power Brain Wallboxは、MQTTで制御し、その状態を送信することも可能です。ホームオートメーションシステムとの接続、産業用制御(M2M)、監視・記録用として有効です。すべてのトピックはcfos_mqttで始まります。複数のcFos MQTTデバイスを1つのMQTTブローカーに接続したい場合、トピックはオプションでcfos_mqtt_<シリアル番号>/で始まり、設定の下で調整することが可能です。設定では、デフォルトのMQTTブローカーのURLも設定することができます。URLは、オプションでmqtt://およびmqtts://で始めることができます。mqtts://で、cFos Charging ManagerまたはcFos Power Brain WallboxはTLS接続を確立する。暗号化されていない接続には標準的なポート1883、TLS接続には8883が使用されます。ただし、URLでポートを指定することも可能です。ユーザー名とパスワードは通常のURL表記で、例えばmqtt://user:[email protected]。cFos Charging Managerの設定でMQTTブローカーを指定する場合は、個別のブローカーを指定するか、単にmqttと書けばよいでしょう。この場合、コンフィギュレーションに保存されているデフォルトのブローカーが使用されます。

URLの先頭をmqtt3://またはmqtt5://(暗号化接続の場合はmqtts3://およびmqtts5://)にすると、プロトコルバージョンが決定されます。デフォルトはMQTT 3.1.1です。cFos Charging Managerは、エラーメッセージが表示された場合、MQTT 5のMQTT 3.1.1に戻そうとします。これは、古い Mosquitto ブローカーで動作しますが、他のブローカーでは必ずしも動作しません。

)MQTTの設定には管理者パスワードが必要なため、チャージングマネージャーはそれに従ってデータを扱います。そのため、意図的に管理者パスワードでしかアクセスできないデータを送信しています。

MQTTブローカーについて: Stefan G. (#diebestenuserderwelt) のおかげで、ioBrokerに組み込まれたMQTTブローカーをテストすることができた。この MQTT 3.1.1 ブローカーは (2023年2月現在) 標準に準拠しない挙動をします: 接続試行がエラーメッセージなしで無言で終了する、 PUBLISH パケットのペイロードが時々欠ける、 PUBLISH パケットが明らかに二回送られる (これは設定でオフにできる?) などがあります。これは、APIリクエストが複数回実行される可能性があるため、このブローカーはチャージングマネージャAPIの制御には適していないことを意味します。私たちのMQTT実装ができるだけ多くのブローカーと互換性があることに関心があるとしても、現時点ではioBrokerにはMosquittoを使用することをお勧めします。

デバイスタイプ「HTTP Input」によるメーターやウォールボックスの統合。

HTTP経由でこれらのデバイスに供給する代わりに(HTTP API -> HTTPメーターとウォールボックス参照)、これらのデバイスはMQTTをリッスンすることもできます。デバイスアドレスとして、mqttまたはMQTTブローカーURLを入力します。次に、対応するメーターまたはウォールボックスは、トピックcfos_mqtt/set/<デバイスID>をリスンします。例えば、デバイスID M1のメーターは、cfos_mqtt/set/M1です。HTTP入力メーターは、HTTP APIの「HTTPメーターとウォールボックス」で説明されているように、メッセージとしてJSON文字列を期待します。したがって、MQTTソースはこのフォーマットでデータを配信する必要があります。これにより、別のソース(ホームオートメーションシステムなど)からデータを取得し、それをチャージングマネージャーに入力することで、cFosチャージングマネージャーでサポートされていないデバイスを統合することができます。
:ソースからのデータがHTTPカウンタが期待する形式と異なる場合、カスタムカウンタを作成することもできます。MQTTの場合、これは以下に説明されています。


例:HTTP入力カウンターを作成し、デバイスIDとして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] }'
の場合、カウンタには上記の値が格納されるはずです。

チャージングマネージャーのデバイスのステータスを転送する

チャージングマネージャーの設定では、MQTTブローカーURL(または標準ブローカーのmqtt)を指定することができ、その下でチャージングマネージャーは、cfos_mqtt/get/dev_infoというトピックですべてのデバイスのステータスを公開します。これは、HTTP get_dev_infoから知られるフォーマットで送信されます。これにより、メーターの電力値やウォールボックスのステータスなど、UIに表示されているデバイスのすべての値が得られます。個々のデバイスにのみサブスクライブしたい場合は、「Publish info via MQTT」のチェックボックスを無効にし、代わりに個々のデバイスの「Display」の設定で「Publish info via MQTT」のオプションをオンにします。すると、それぞれのデバイスに関する対応するJSON文字列が、cfos_mqtt/get/<device-ID>というトピックで公開されます。さらに、cfos_mqtt/get/paramsトピックでは、HTTP get_dev_infoから知られるフォーマットで出力されるすべてのグローバル値を "params "で購読することができます。

MQTTによるcFosチャージングマネージャーAPIの制御

cFosチャージングマネージャーの設定では、"Broker for API access via MQTT "の下にMQTTブローカーURL(標準ブローカーの場合はmqtt)を指定できます。この値が空でない場合、cFosチャージングマネージャーは、cfos_mqtt/api/で始まるすべてのトピックをサブスクライブします。そして、そのようなトピックの下のメッセージを、トピック名が/cnf?で始まるHTTP URLであるかのように解釈し、HTTP APIに転送します。チャージング・マネージャーは、HTTP APIのレスポンスをJSONとしてcfos_mqtt/api_resトピックにパブリッシュします。このようにして、HTTP API のほぼ全体を MQTT 経由で制御できるようになります。例外は、長いJSONレスポンスを配信するAPIコールです。例:cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1は、API関数set_cm_varでチャージングマネージャー変数xを1に設定します。cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1のメッセージは、デバイスID E1のウォールボックスのRFID 5678を入力します(拡張RFID関数も参照してください)。
HTTP POSTで送信されたデータは、トピックの下のメッセージに入れることができます。

例:チャージングマネージャーが利用可能な最大総電流を定期的に変更します:
チャージングマネージャーの一般設定の "Brokers for API access via MQTT"("Configuration "に保存されているデフォルトのブローカーを使用する場合は、単にmqtt)にブローカーを入力します。次に、MQTTを使用して、
cfos_mqtt/api/cmd=set_params
トピックに、次の内容のJSONオブジェクトをパブリッシュします:
{"max_total_cur_prc": p}
ここでpは、プリセットされた最大合計ストリームのどの部分を取るべきかをパーセントで示したものです。
:HTTP APIコールの中には、チャージング・マネージャーが設定を保存するものがあります。これらを頻繁に実行すると、(cFos Power BrainまたはcFos Wallbox Boosterの)フラッシュまたはラズベリーのSDカードが消耗します。そのため、パラメータ "max_total_cur_prc "を1つ指定したAPIコール "set_params "はパラメータを保存しません。

MQTTによるウォールボックスの制御

cFos Charging Managerが "Load management "モードではなく、"Observe "モードの場合、MQTTを使用してすべてのウォールボックスを自分で制御することができます。これは特に、"Observe "モードでスレーブとして操作されているcFos Power Brainウォールボックスに適用されます。これを行うには、チャージングマネージャー設定のMQTTの下にある「ウォールボックスの制御を有効にする」オプションにチェックを入れる必要があります。cFosチャージングマネージャーは、MQTTトピックcfos_mqtt/ctlをリッスンし、JSONオブジェクトのメッセージを期待します。このオブジェクトには、プロパティとしてデバイスIDを名前に持つサブオブジェクトがあります。サブオブジェクトは以下のようになる:{cur": c, "ena": b, "wke": b, "phs": p} ここで、cはmA単位の充電電流であり、bはそれぞれtrueまたはfalseである。「ena":falseはウォールボックスでの充電を無効にする。"wke":trueはウォールボックスに "wake up car "コマンドを送ろうとする(現在cFos Power Brainウォールボックスでのみ可能)。pは1または3で、単相と三相の充電を切り替えることができます。cur"、"ena"、"wke"、"phs "を省略し、特定の制御機能のみを実行することもできます。
例: {"E1":


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

デバイスIDのwallboxの充電電流を8Aに設定し、充電をアクティブにして、車のウェイクアップを試みます。さらに、ウォールボックスE2の充電電流を10Aに設定し、3相充電に切り替えます。

MQTTによるロギング、トランザクションログの送信

システムログのログエントリーを送信するMQTTブローカーのURLは、「設定」で指定することができます。cFosチャージングマネージャーは、次にすべてのログエントリーをcfos_mqtt/logというトピックの下に公開します。これにより、Charging Managerのログをリモートで監視することができます。また、「設定」でトランザクションログのエントリーにMQTTブローカーのURLを指定することができます。その後、すべての充電トランザクションがcfos_mqtt/ta_logというトピックで送信されます。これにより、課金取引会計データの遠隔評価や、課金取引のバックアップを別システムで作成することができます。充電のトランザクションは、充電プラグが差し込まれたときに始まり、抜かれたときに終わります。

MQTTによるユーザー定義カウンタ

MQTTのrtype = 2を使用してカスタムカウンターを作成することができます。これらのカウンターは、HTTPカウンター(rtype = 1)と同様に定義されます。ただし、ここでのアドレスは、HTTP URLではなく、MQTTトピックです。




例: 「power_w」:{"address": "/test_topic3", "type": "float", "query": "power_w"}。
ここでは、ユーザー定義のカウンターは、トピック /test_topic3 を購読し、プロパティ "power_w" を持つ JSON オブジェクトを期待します(例:{"power_w": 1234})。異なるカウンタ変数は異なるトピックを持つことができ、対応するトピックの下でメッセージが公開されるとすぐに更新されます。