deviceShadow 设备模型
更新时间:2018-09-14 20:35:10
该模块让嵌入式设备通过 MQTT 协议,直接连接 LinkDeveloper 云平台,deviceShadow 提供设备的属性上报,事件触发,服务调用等功能,该模块自带设备模型,设备模型和 LinkDevelop 平台上创建的产品以及产品的标准模型有关。该模块支持 LiteJSE/DuktapeJSE
API 说明:
bindDevID(config) 绑定设备三元组
config
介绍:
config = {
productKey: 'xxxxxx',
deviceName: 'xxxxxx',
deviceSecret: 'xxxxxx',
domain: 'XXXXX',
port: 1883
}
domain
和 port
是可选项, 默认是上海正式环境, domain:'iot-as-mqtt.cn-shanghai.aliyuncs.com', port:1883
可支持环境如下:
- 10.125.3.189:1883 //日常
- 100.67.80.75:80 //上海预发
- 100.67.85.156:80 //新加坡预发
- ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 //上海正式
- ${productKey}.iot-as-mqtt.ap-southeast-1.aliyuncs.com:1883 //新加坡正式
- ${productKey}.iot-as-mqtt.us-west-1.aliyuncs.com:1883 //美西正式
- ${productKey}.iot-as-mqtt.ap-northeast-1.aliyuncs.com:1883 //日本正式
- ${productKey}.iot-as-mqtt.eu-central-1.aliyuncs.com:1883 //德国正式
- ${productKey}.iot-as-mqtt.us-east-1.aliyuncs.com:1883 //美东正式
start(notify_fn)
启动 deviceShadow 模块
nofity_fn 为注册的回调函数,启动 deviceShadow 完成时调用,包括成功或者失败
nofity_fn(err), err == null 表示连接正常,否则是错误信息
postProperty(name, value)
上报属性
未连云时也可以上报, 设备信息会缓存,等待上云连接成功之后会上报
postEvent(name,value)
上报事件
未连云时也可以上报, 设备信息会缓存,等待上云连接成功之后会上报
addDevSetPropertyNotify(name, ntfy_fn)
注册云端设置属性的回调处理
ntfy_fn(val), val云端设定的值
addDevCallServiceNotify(name, ntfy_fn)
注册云端远程调用服务的回调处理
ntfy_fn(msg, topic)
msg是云端下发的信息, topic服务主题
示例:
- 在嵌入式 JS 开发工作台上,创建测试工程并导入模块 deviceShadow。
- 编写测试 index.js 文件。
var deviceShadow = require(’deviceShadow‘);
console.log("=================================");
console.log(" deviceShadow test ");
console.log("=================================");
function initDeviceShadow() {
//设备三元组
var config = {
productKey: 'xxx',
deviceName: 'xxx',
deviceSecret: 'xxx',
domain: 'xxxx',
port: 1883
};
deviceShadow.bindDevID(config);
deviceShadow.start(deviceShadowStartCB);
}
// 设备初始化回调函数
function deviceShadowStartCB(err) {
if (err) {
console.log('连接 LD 失败, err = ' + err);
// 再次重连
setTimeout(initDeviceShadow, 2000);
} else {
console.log('连接 LD 成功 ');
registAllCloudNotify();
console.log('上报属性');
deviceShadow.postProperty('BatteryPercentage', 55);
console.log('上报事件');
deviceShadow.postEvent('Error', {
ErrorCode: 0
});
deviceShadow.postEvent('Error', {
ErrorCode: 1
});
}
}
// 注册所有云端设置设备端属性的处理函数
function registAllCloudNotify() {
deviceShadow.addDevSetPropertyNotify('batteryAlarm', cloudSetProperty);
deviceShadow.addDevCallServiceNotify('Reboot', cloudCallService);
}
// 设备端本地处理函数,将会注册到云端调用
function cloudSetProperty(val) {
console.log('云端设置batteryAlarm=' + val);
}
function cloudCallService(msg, topic) {
console.log('云端调用CallService, topic=' + topic);
var val = JSON.stringify(msg);
console.log('msg = ' + val);
}
var t1 = setInterval(function () {
//每秒检测一次网卡是否连上网络?
var ip = WIFI.getip();
if (ip != null) {
clearInterval(t1);
//连云之前也可以post,设备信息会缓存,等待上云连接成功之后会上报
console.log('开始链接 ' + 'LD Platform');
process.nextTick(initDeviceShadow);
}
}, 1000);