このトピックでは、データ転送ルールを使用して、デバイスによって送信されたデータをDingTalkグループにプッシュする方法について説明します。 この例では、熱湿度計が使用される。
シナリオ
オフィスルームの温度湿度計によって送信されたデータは、DingTalkチャットボットに送信する必要があります。
処理中
ステップ1: プロダクトとデバイスを作成する
IoT Platformコンソールにログインします。
[概要] ページで、[すべての環境] をクリックします。 [すべての環境] タブで、管理するインスタンスを見つけ、インスタンスIDまたはインスタンス名をクリックします。
左側のナビゲーションウィンドウで、 [製品] を選択し、[熱湿度計] という名前の製品を作成します。 製品を作成するときに、[ノードタイプ] パラメーターを [直接接続デバイス] に設定します。
他のパラメーターにはデフォルト値を使用します。 詳細については、「プロダクトの作成」をご参照ください。
[TSLの作成] をクリックします。 [機能の定義] タブで、[ドラフトの編集] をクリックします。 [デフォルトモジュール] セクションで、製品にカスタム機能を追加します。
この例では、温度と湿度の特性が製品に追加されています。 詳細については、「TSL機能の追加」をご参照ください。
左側のナビゲーションウィンドウで、デバイスの作成」をご参照ください。 を選択します。 熱湿度計製品の下にTH_sensorという名前のデバイスを作成します。 詳細については、「
[デバイスが追加されました] ダイアログボックスで、[詳細] をクリックして、ProductKey、DeviceName、およびDeviceSecretを含むデバイス証明書を取得します。 デバイス証明書は安全な場所に保存する必要があります。 証明書は、デバイスとIoT Platform間の通信のための重要な資格情報です。
[デバイスリスト] タブで、作成したデバイスを見つけ、[操作] 列の [表示] をクリックします。 デバイスの詳細ページが表示されます。 [タグ情報] セクションで、[編集] をクリックしてデバイスにタグを追加します。
この例では、次の表に記載されているタグが追加されています。 詳細については、「タグ」をご参照ください。
キー
値
説明
tag
ルーム00XS、フロアF、ビルX、YYタウン
デバイスの場所。
deviceISN
T20180102X
デバイスのシリアル番号 (SN) 。
ステップ2: Function Computeの設定
Function Computeは、イベント駆動型で完全マネージド型のコンピューティングサービスです。 Function Computeは、Java、Node.js、およびPythonをサポートしています。 詳細は、「Function Compute の使用方法 (How to use Function Compute)」をご参照ください。
DingTalkチャットボットのwebhook URLを指定します。
DingTalkにログオンします。
DingTalkチャットウィンドウで、アイコンをクリックし
ます。 表示されるパネルで、[グループアシスタント] をクリックします。
[ロボットの追加] をクリックし、
アイコンをクリックします。
[カスタム] をクリックし、[追加] をクリックします。
Chatbot名とセキュリティ設定パラメーターを設定し、[<DingTalkカスタムロボットサービス利用規約> を読み、同意した] を選択し、[完了] をクリックします。
[コピー] をクリックしてwebhook URLをPCに保存します。
Function Computeスクリプトを記述します。
この例では、Node.jsランタイム環境が使用されています。 この関数は、IoT Platformからデバイスデータを取得し、指定されたDingTalkメッセージ形式に基づいてデータを処理し、HTTPS POSTメソッドを使用して、指定されたDingTalkチャットボットのwebhook URLにデータを送信します。 デバイスデータには、デバイスの場所、デバイスのSN、リアルタイムの温度と湿度のデータ、およびデバイスがIoT Platformにデータを送信した時刻が含まれます。
スクリプトを作成した後、スクリプトファイルにindex.jsという名前を付け、ファイルをindex.zipという名前のパッケージに圧縮します。 次のサンプルコードは、スクリプトの例を示しています。
accessTokenをwebhook URLのaccess_tokenパラメーターの値に置き換える必要があります。
const https = require ('http'); const accessToken = 'webhook URLのaccess_tokenパラメーターの値を指定します。module.exports.handler = function (イベント、コンテキスト、コールバック) { var eventJson = JSON.parse(event.toString()); // DingTalkメッセージ形式 const postData = JSON.stringify({ "msgtype": "markdown" 、"markdown": { "title": "Thermo-hygrometer" 、"text": "##### 温度と湿度の詳細 \n" + "> デバイスの場所:" + eventJson.tag + "\n\n" + "> Device SN: " + eventJson.isn + "\n\n" + "> Temperature: " + eventJson.temperature + "℃\n\n" + "> 湿度:" + eventJson. Humidity + "%\n\n" + "> ######" + eventJson.time + "published by [IoT Platform](https://www.aliyun.com/product/iot) \n" }, "at": { "isAtAll": false } }); const options = { ホスト名: 'oapi .dingtalk.com '、ポート: 443、パス: '/robot/send?access_token=' + accessToken, メソッド: 'POST' 、ヘッダー: { 'Content-Type': 'application/json' 、'Content-Length': Buffer.byteLength(postData) } }; const req = https.request (オプション、(res) => { res.setEncoding('utf8'); res.on('data', (chunk) => {}); res.on('end ', () => { コールバック (null、'success'); }); }); // エラーを返します。 req.on('error', (e) => { コールバック (e); }); // データを書き込みます。 req.write(postData); req.end(); };
サービスと関数の作成
Alibaba Cloud Function Computeの有効化 詳細については、「Function Computeの有効化」をご参照ください。
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
[サービスの作成] をクリックし、Nameパラメーターを [IoT_Service] に設定し、[OK] をクリックします。
[サービス] ページで、[IoT_Service] をクリックし、[関数の作成] をクリックします。
[関数の作成] ページで、[組み込みランタイムの使用] を選択します。
次の図に示すパラメーターを設定します。 他のパラメーターにはデフォルト値を使用します。 次に、[作成] をクリックします。
基本設定
次の図に示すように、関数名パラメーターをpushData2DingTalkに設定し、リクエストタイプパラメーターをイベントリクエストに設定します。
コード
次の図に示すように、[ランタイム環境] ドロップダウンリストから [Node.js 14] を選択し、作成したindex.zipファイルをアップロードします。
ステップ3: Function Computeへのデータ転送
TH_sensorデバイスから送信された温度と湿度のデータをpushData2DingTalk関数に転送するように、データ転送ルールを設定します。
IoT PlatformコンソールIoT Platformコンソールに移動し、インスタンスの詳細ページに移動します。 左側のナビゲーションウィンドウで、 を選択し、[ルールの作成] をクリックします。 ルール名Temperature_humidity_forwardingを入力し、[OK] をクリックします。
重要最新バージョンのデータ転送ページが表示されたら、ページの右上隅にある [前のバージョンに戻る] をクリックします。 以前のバージョンのデータ転送ページが表示されたら、[ルールの作成] をクリックします。
[データ転送ルール] ページで、[SQL文の書き込み] をクリックして、データの処理に使用するSQL文を書き込みます。
この例では、次のフィールドを指定してデータをフィルタリングします。
デバイス情報を指定するフィールド: deviceName、tag、deviceISN。
送信されたデータを指定するフィールド: 温度と湿度。
サンプルSQL文:
SELECT deviceName() をdeviceNameとして、属性 ('tag') をタグとして、属性 ('deviceISN') をisnとして、items.temperature.valueを温度として、items.humidity.valueを湿度として、タイムスタンプ ('yyyy-MM-dd HH:mm:ss ') から "/g5j3o ***/TH_sensorthing/event/property/post"
[データ転送ルール] ページで、[操作の追加] をクリックして、データをFunction Computeに転送します。
この例では、IoT_ServiceサービスとpushData2DingTalk機能が選択されています。 詳細については、「Function Computeへのデータ転送」をご参照ください。
[データ転送] ページで、作成したTemperature_humidity_Forwardingルールを見つけ、[操作] 列の [開始] をクリックしてルールを有効にします。
ステップ4: 温度湿度計デバイスをIoT Platformに接続し、温度と湿度のデータを送信します
デバイス証明書を使用して、MQTT (Message Queuing Telemetry Transport) を介してデバイスをIoT Platformに接続します。 次に、温度と湿度のデータの送信をシミュレートします。
Node.jsサンプルコードを保存するために、iot_device.jsなどのJavaScriptファイルをPCに作成します。
次のNode.jsサンプルコードは、デバイスをIoT Platformに接続してデータを送信する方法の例を示しています。
const mqtt = require('aliyun-iot-mqtt'); // 1。 デバイス証明書情報を指定します。 var options = { productKey: "g18l ***" 、 deviceName: "TH_sensor" 、 deviceSecret: "b2e6e4f102458d84 ***" 、 ホスト: "iot-cn-*** .mqtt.iothub.aliyuncs.com" }; // 2。 MQTT 接続を確立します。 const client = mqtt.getAliyunIotMqttClient (オプション); // IoT Platformからコマンドを受信するために使用されるトピックを購読します。 client.subscribe('/${options.productKey}/${options.de viceName}/user/get') client.on('message', function(topic, message) { console.log("topic" + topic) console.log (「メッセージ」 + メッセージ) }) setInterval(function() { // 3. 指定された間隔で温度と湿度のデータを送信します。 client.publish('/sys/${options.productKey}/${options.de viceName}/thing/event/property/post', getPostData(), { qos: 0 }); }, 5*1000; 関数getPostData() { const payloadJson = { id: Date.now() 、 バージョン: "1.0" 、 params: { 温度: Math.floor((Math.random() * 20) + 10) 、 湿度: Math.floor(((Math.random() * 20) + 10) }, メソッド: "thing.event.property.post" } console.log("payloadJson" + JSON.stringify(payloadJson)) JSON.stringify(payloadJson) を返します。}
パラメーター
例
説明
productKey
g18l ***
デバイスの作成後に保存したデバイス証明書情報。
IoT PlatformコンソールのTH_sensorデバイスの [デバイスの詳細] ページで情報を表示できます。
deviceName
TH_sensor
deviceSecret
b2e6e4f102458d84 ***
host
iot-cn-*** .mqtt.iothub.aliyuncs.com
デバイスがMQTT経由でIoT Platformにアクセスするために使用するエンドポイント。
エンドポイントの取得方法については、「インスタンスのエンドポイントの管理」をご参照ください。
MQTTライブラリがダウンロードされたら、コマンドプロンプトウィンドウに次のコマンドを入力し、iot_device.jsコードを実行してデバイスを起動します。
結果
次の応答は、デバイスがIoT Platformに接続され、データが送信されたことを示します。
payloadJson {"id":161848 ***,"version":"1.0","params":{"temperature":22,"humidity":15},"method":"thing.event.property.post"}
次の図は、DingTalkチャットボットが受信するメッセージを示しています。