乐趣区

关于javascript:Nodejs设备接入阿里云IoT平台设备接入类

1. 筹备工作

1.1 注册阿里云账号

应用集体淘宝账号或手机号,开明阿里云账号,并通过__实名认证 (能够用支付宝认证)__

1.2 收费开明 IoT 物联网套件

产品官网 ​​https://www.aliyun.com/product/iot​​

1.3 软件环境

Nodejs 装置 ​​https://nodejs.org/en/download/​​
编辑器 sublimeText/nodepad++/vscode
MQTT lib ​​https://www.npmjs.com/package/mqtt​​

2. 开发步骤

2.1 云端开发

1) 创立高级版产品

2) 性能定义,产品物模型增加属性

增加产品属性定义

物模型对应属性上报 topic

/sys/ 替换为 productKey/ 替换为 deviceName/thing/event/property/post

物模型对应的属性上报 payload

{
    id: 123452452,
    params: {
        temperature: 26.2,
        humidity: 60.4
    },
    method: "thing.event.property.post"
}

3) 设施治理 > 注册设施,取得身份三元组

2.2 设施端开发

咱们以 nodejs 程序来模仿设施,建设连贯,上报数据。

1. 创立文件夹 aliyun-iot-demo-nodejs
2. 进入文件夹,创立 package.json 文件,增加内容
3. 执行 npm install 命令,装置 sdk
4. 创立 thermometer.js 文件,增加内容
5. 执行 node thermometer.js 命令 

1) package.json 增加阿里云 IoT 套件 sdk 依赖

{
  "name": "aliyun-iot",
  "dependencies": {"mqtt": "2.18.8"},
  "author": "wongxming",
  "license": "MIT"
}

2) 下载安装 SDK

在 aliyun-iot-demo-nodejs 文件夹下,执行命令

$ npm install

3) 应用程序目录构造

4) 模仿设施 thermometer.js 代码

/**
"dependencies": {"mqtt": "2.18.8"}
*/
const crypto = require('crypto');
const mqtt = require('mqtt');
// 设施身份三元组 + 区域
const deviceConfig = require("./iot-device-config.json");

const options = {
    productKey: deviceConfig.productKey,
    deviceName: deviceConfig.deviceName,
    timestamp: Date.now(),
    clientId: Math.random().toString(36).substr(2)
}

options.password = signHmacSha1(options, deviceConfig.deviceSecret);
options.clientId = `${options.clientId}|securemode=3,signmethod=hmacsha1,timestamp=${options.timestamp}|`;
options.username = `${options.deviceName}&${options.productKey}`;

const url = `tcp://${deviceConfig.productKey}.iot-as-mqtt.${deviceConfig.regionId}.aliyuncs.com:1883`;
// 建设连贯
const client = mqtt.connect(url,options);

// 属性上报的 Topic
const topic = `/sys/${deviceConfig.productKey}/${deviceConfig.deviceName}/thing/event/property/post`;
setInterval(function() {
    // 公布数据到 topic
    client.publish(topic, getPostData());
}, 5 * 1000);


function getPostData(){
    const payloadJson = {id: Date.now(),
        params: {temperature: Math.floor((Math.random() * 20) + 10),
            humidity: Math.floor((Math.random() * 40) + 60)
        },
        method: "thing.event.property.post"
    }

    console.log("===postData topic=" + topic)
    console.log(payloadJson)

    return JSON.stringify(payloadJson);
}

/*
  生成基于 HmacSha1 的 password
  参考文档:https://help.aliyun.com/document_detail/73742.html?#h2-url-1
*/
function signHmacSha1(options, deviceSecret) {let keys = Object.keys(options).sort();
    // 按字典序排序
    keys = keys.sort();
    const list = [];
    keys.map((key) => {list.push(`${key}${options[key]}`);
    });
    const contentStr = list.join('');
    return crypto.createHmac('sha1', deviceSecret).update(contentStr).digest('hex');
}

设施配置文件

{
    "productKey": "替换 productKey",
    "deviceName": "替换 deviceName",
    "deviceSecret": "替换 deviceSecret",
    "regionId": "cn-shanghai"
}

3. 启动运行

3.1 设施启动

$ node thermometer.js

3.2 云端查看设施运行状态

物联网平台产品介绍详情:​​https://www.aliyun.com/product/iot/iot_instc_public_cn​​

              阿里云物联网平台客户交换群 
退出移动版