echolot mqtt
MQTTブローカー(バージョン3.1.1または5.0、TCP、TLS、WebSocket経由)のトピックをサブスクライブし、メッセージをパブリッシュします。
echolot mqtt は、ターミナルからMQTTブローカーと通信します:subscribe は届いたメッセージを出力し、publish はメッセージを送信します。
どちらもデフォルトではMQTT 5.0を使い、指定すれば3.1.1を使います。接続はTCP(mqtt://)、TLS(mqtts://)、WebSocket(ws://、wss://)のいずれかです。
アプリでの同じ操作については、MQTTリクエストを参照してください。
例では、Alpenglowのリクエスト Warehouse sensors と同じように、Mac上の localhost にあるブローカーを使います。デモAPIはMQTTを動かせません。
echolot mqtt subscribe
echolot mqtt subscribe [<options>] <broker> <filters> ...<broker> は mqtt://host[:1883]、mqtts://host[:8883]、ws://host/mqtt、wss://host/mqtt のいずれかです。<filters> は1つ以上のトピックフィルターで、
+ は1階層に、# は残りすべてに一致します。
echolot mqtt subscribe mqtt://localhost 'warehouses/+/temperature' --qos 1warehouses/bern/temperature 4.5
warehouses/zurich/temperature 5.1各メッセージは、標準出力に1行で出力されます:トピック、スペース、ペイロードの順です。UTF-8のテキストでないペイロードは、Base64で出力されます。--json を指定すると、
各メッセージは topic、payload(または payload_base64)、qos、retain を持つJSON行になり、そのまま jq に渡せます。
echolot mqtt subscribe mqtt://localhost 'warehouses/#' --count 10 --json | jq -r .payloadサブスクリプションは、あなたが停止する(⌃C)、ブローカーが切断する、--listen で指定した秒数が経過する、または --count で指定した数のメッセージが届くまで続きます。
ブローカーが拒否したフィルターは、標準エラーに表示されます。
| オプション | 意味 |
|---|---|
--qos <level> | 0(最大1回)、1(最低1回)、2(ちょうど1回)。デフォルトは0。 |
--listen <seconds> | 待ち受ける秒数。0 は、停止するかブローカーが切断するまで待ち受けます。デフォルトは0。 |
--count <n> | このメッセージ数で停止します。 |
--json | 各メッセージをJSON行で出力します:topic、payload、qos、retain。バイナリのペイロードはBase64。 |
echolot mqtt publish
echolot mqtt publish [<options>] <broker> <topic>-m でペイロードを指定します。指定しない場合は、標準入力の各行が1つのメッセージになります。
echolot mqtt publish mqtt://localhost warehouses/bern/temperature -m '4.5' --qos 1
tail -f readings.log | echolot mqtt publish mqtt://localhost warehouses/bern/logQoS 1または2では、Echolotはブローカーがすべてのメッセージを確認応答するまで待ち、拒否されたメッセージがあればそれを表示します。QoS 0では、パブリッシュした数を表示します。
| オプション | 意味 |
|---|---|
-m、--message <payload> | ペイロード。 |
--qos <level> | 0(最大1回)、1(最低1回)、2(ちょうど1回)。デフォルトは0。 |
--retain | あとからサブスクライブする相手のために、ブローカーにメッセージを保持させます。 |
両方に共通のオプション
| オプション | 意味 |
|---|---|
--mqtt-version <version> | プロトコルのバージョン:5 または 3.1.1。デフォルトは5。 |
--client-id <id> | クライアントID。デフォルトは echolot- とランダムな接尾辞。 |
-u、--user <name> | ユーザ名。 |
--password <password> | パスワード。環境変数 ECHOLOT_MQTT_PASSWORD の使用をおすすめします。 |
--keep-alive <seconds> | ping間隔の秒数。0 はなし。デフォルトは60。 |
--timeout <seconds> | 接続とブローカーの応答を待つ秒数。デフォルトは30。 |
-i、--insecure | ブローカーのTLS証明書を検証しません。 |
-v、--verbose | 接続とブローカーの応答を標準エラーに出力します。 |
--proxy <url> | このプロキシ経由で接続します:http://host:port、https://…、socks5://user:password@host:port。 |
--no-proxy | HTTP_PROXY などを無視して直接接続します。 |
--cacert <file> | このPEMファイル内のCA証明書も信頼します。複数回指定できます。 |
--cert <file> | このクライアント証明書を送信します:PEMファイル(--key と併用)または .p12/.pfx ファイル。 |
--key <file> | クライアント証明書のPEM秘密鍵。証明書ファイルに鍵が含まれていない場合に使います。 |
--pass <passphrase> | 鍵またはPKCS#12ファイルのパスフレーズ。ECHOLOT_CERT_PASSPHRASE の使用をおすすめします。 |
ここでの -i は --insecure を意味し、echolot send のような「include」ではありません。
export ECHOLOT_MQTT_PASSWORD='…'
echolot mqtt publish mqtts://broker.example.com:8883 status/door -m open --retain -u heidi終了コード
| コード | 条件 |
|---|---|
0 | 接続し、サブスクライブまたはパブリッシュしました。 |
1 | subscribe:ブローカーが接続またはすべてのサブスクリプションを拒否しました。publish:ブローカーが接続、またはQoS 1・2のメッセージを拒否しました。 |
64 | オプションまたはブローカーのアドレスが正しくありません。 |