mini program: add qcloud_device_linkage_demo

This commit is contained in:
royye62
2020-04-12 03:24:18 +08:00
parent ccde26c1e9
commit 3e757c1688
22 changed files with 3494 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# 设备联动Demo
## 配置文件 miniprogram/config.js
```
// 传感设备配置
const SensorDevice = {
// 腾讯云物联网通信平台中获取 产品ID和设备名称
ProductId: "ZLN6Q20QHU", // 产品ID
DeviceName: "dev001", // 设备名称
// 腾讯云控制台-访问管理-访问密钥-API密钥管理中获取 SecretId, SecretKey
SecretId: "XXXX",
SecretKey: "XXXX",
}
// 执行设备配置
const ExecuteDevice = {
ProductId: "U1BZWHF7F9", // 产品ID
DeviceName: "dev_01", // 设备名称
// 腾讯云控制台-访问管理-访问密钥-API密钥管理中获取 SecretId, SecretKey
SecretId: "XXXX",
SecretKey: "XXXX",
Topic: "U1BZWHF7F9/dev_01/data"
}
```

View File

@@ -0,0 +1,38 @@
const tencentcloud = require("tencentcloud-sdk-nodejs");
const IotcloudClient = tencentcloud.iotcloud.v20180614.Client;
const models = tencentcloud.iotcloud.v20180614.Models;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
// 云函数入口函数
exports.main = async (event, context) => {
let cred = new Credential(event.SecretId, event.SecretKey);
let httpProfile = new HttpProfile();
httpProfile.endpoint = "iotcloud.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new IotcloudClient(cred, "ap-guangzhou", clientProfile);
let req = new models.PublishMessageRequest();
// req.Topic = "U1BZWHF7F9/dev_01/data";
// req.DeviceName = "dev_01";
// req.ProductId = "U1BZWHF7F9";
req.Topic = event.Topic
req.DeviceName = event.DeviceName;
req.ProductId = event.ProductId;
req.Payload = event.Payload;
return new Promise((resolve, reject)=>{
client.PublishMessage(req, function (errMsg, response) {
if (errMsg) {
console.log(errMsg);
reject(errMsg)
return;
}
console.log(response.to_json_string());
resolve(response)
});
})
}

View File

@@ -0,0 +1,14 @@
{
"name": "iothub-publish",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"wx-server-sdk": "latest"
}
}

View File

@@ -0,0 +1,34 @@
const tencentcloud = require("tencentcloud-sdk-nodejs");
const IotcloudClient = tencentcloud.iotcloud.v20180614.Client;
const models = tencentcloud.iotcloud.v20180614.Models;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
exports.main = async (event, context) => {
let cred = new Credential(event.SecretId, event.SecretKey);
let httpProfile = new HttpProfile();
httpProfile.endpoint = "iotcloud.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new IotcloudClient(cred, "ap-guangzhou", clientProfile);
let req = new models.DescribeDeviceShadowRequest();
req.DeviceName = event.DeviceName;
req.ProductId = event.ProductId;
return new Promise((resolve, reject)=>{
client.DescribeDeviceShadow(req, function (errMsg, response) {
if (errMsg) {
console.log(errMsg);
reject(errMsg)
return;
}
console.log(response.to_json_string());
resolve(response)
});
})
}

View File

@@ -0,0 +1,15 @@
{
"name": "iotexplorer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"tencentcloud-sdk-nodejs": "^3.0.77",
"wx-server-sdk": "latest"
}
}

View File

@@ -0,0 +1,549 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@cloudbase/database": {
"version": "0.1.1",
"resolved": "https://registry.npm.taobao.org/@cloudbase/database/download/@cloudbase/database-0.1.1.tgz",
"integrity": "sha1-yf/JK3HhkAVxljkL6odpZ3f/l/8=",
"requires": {
"bson": "^4.0.2"
}
},
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/aspromise/download/@protobufjs/aspromise-1.1.2.tgz",
"integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
},
"@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/base64/download/@protobufjs/base64-1.1.2.tgz",
"integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU="
},
"@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npm.taobao.org/@protobufjs/codegen/download/@protobufjs/codegen-2.0.4.tgz",
"integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs="
},
"@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/eventemitter/download/@protobufjs/eventemitter-1.1.0.tgz",
"integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
},
"@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/fetch/download/@protobufjs/fetch-1.1.0.tgz",
"integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/float/download/@protobufjs/float-1.0.2.tgz",
"integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
},
"@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/inquire/download/@protobufjs/inquire-1.1.0.tgz",
"integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
},
"@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@protobufjs/path/download/@protobufjs/path-1.1.2.tgz",
"integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
},
"@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/pool/download/@protobufjs/pool-1.1.0.tgz",
"integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
},
"@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/@protobufjs/utf8/download/@protobufjs/utf8-1.1.0.tgz",
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@types/long": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/@types/long/download/@types/long-4.0.0.tgz",
"integrity": "sha1-cZVR0jUtMBrIuB23Mqy2vcKNve8="
},
"@types/node": {
"version": "10.14.13",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.14.13.tgz?cache=0&sync_timestamp=1563391049881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.14.13.tgz",
"integrity": "sha1-rHhtYjhgrfOaP1HWKUgKrNam7sc="
},
"ajv": {
"version": "6.10.2",
"resolved": "http://mirrors.cloud.tencent.com/npm/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"asn1": {
"version": "0.2.4",
"resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
"integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"asynckit": {
"version": "0.4.0",
"resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.8.0",
"resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz",
"integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8="
},
"base64-js": {
"version": "1.3.0",
"resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz",
"integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "http://mirrors.cloud.tencent.com/npm/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bson": {
"version": "4.0.2",
"resolved": "https://registry.npm.taobao.org/bson/download/bson-4.0.2.tgz",
"integrity": "sha1-KSn9/tGhRbHDYZCKK5UKbPS+0sI=",
"requires": {
"buffer": "^5.1.0",
"long": "^4.0.0"
}
},
"buffer": {
"version": "5.2.1",
"resolved": "http://registry.npm.taobao.org/buffer/download/buffer-5.2.1.tgz",
"integrity": "sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
"integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"dashdash": {
"version": "1.14.1",
"resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"extend": {
"version": "3.0.2",
"resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
"integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz?cache=0&sync_timestamp=1562517919182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"forever-agent": {
"version": "0.6.1",
"resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz?cache=0&sync_timestamp=1562216133657&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.3.3.tgz",
"integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
},
"getpass": {
"version": "0.1.7",
"resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"har-schema": {
"version": "2.0.0",
"resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.3",
"resolved": "http://mirrors.cloud.tencent.com/npm/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
"ajv": "^6.5.5",
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
"integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
"requires": {
"function-bind": "^1.1.1"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"ieee754": {
"version": "1.1.13",
"resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
"integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q="
},
"is-regex": {
"version": "1.0.4",
"resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz",
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"requires": {
"has": "^1.0.1"
}
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isstream": {
"version": "0.1.2",
"resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-schema": {
"version": "0.2.3",
"resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
"integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsprim": {
"version": "1.4.1",
"resolved": "http://mirrors.cloud.tencent.com/npm/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npm.taobao.org/lodash.merge/download/lodash.merge-4.6.2.tgz",
"integrity": "sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo="
},
"long": {
"version": "4.0.0",
"resolved": "http://registry.npm.taobao.org/long/download/long-4.0.0.tgz",
"integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg="
},
"mime-db": {
"version": "1.40.0",
"resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz",
"integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI="
},
"mime-types": {
"version": "2.1.24",
"resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz",
"integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
"requires": {
"mime-db": "1.40.0"
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
"integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
},
"performance-now": {
"version": "2.1.0",
"resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"protobufjs": {
"version": "6.8.8",
"resolved": "http://mirrors.cloud.tencent.com/npm/protobufjs/-/protobufjs-6.8.8.tgz",
"integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
}
},
"psl": {
"version": "1.2.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/psl/-/psl-1.2.0.tgz",
"integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
},
"punycode": {
"version": "2.1.1",
"resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
},
"qs": {
"version": "6.5.2",
"resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
"integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
},
"request": {
"version": "2.88.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
}
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz",
"integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
},
"sax": {
"version": "1.2.4",
"resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
"integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
},
"sshpk": {
"version": "1.16.1",
"resolved": "http://mirrors.cloud.tencent.com/npm/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"tcb-admin-node": {
"version": "1.9.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/tcb-admin-node/-/tcb-admin-node-1.9.0.tgz",
"integrity": "sha512-TYoBo66CEIIw1QzgK4Jq43G45zvBE6ZB35LbDV8wwLQvg6CiZHlmOTVZkgj2YZ8O87ELi+ZE3UBVNZM3nFa6lQ==",
"requires": {
"@cloudbase/database": "0.1.1",
"is-regex": "^1.0.4",
"lodash.merge": "^4.6.1",
"request": "^2.87.0",
"xml2js": "^0.4.19"
}
},
"tencentcloud-sdk-nodejs": {
"version": "3.0.77",
"resolved": "http://mirrors.cloud.tencent.com/npm/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-3.0.77.tgz",
"integrity": "sha512-DULk7IFdR8BQnvC1iRuj+GrYnuU72Lj3oyIO1U2pubf71GtN9PeZ/9km2T7lsCeySU/J6jCTvwVPZaIhip/H1g==",
"requires": {
"request": "^2.85.0"
}
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "http://mirrors.cloud.tencent.com/npm/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
},
"dependencies": {
"punycode": {
"version": "1.4.1",
"resolved": "http://mirrors.cloud.tencent.com/npm/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}
}
},
"tslib": {
"version": "1.10.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "http://mirrors.cloud.tencent.com/npm/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"uri-js": {
"version": "4.2.2",
"resolved": "http://mirrors.cloud.tencent.com/npm/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"requires": {
"punycode": "^2.1.0"
}
},
"uuid": {
"version": "3.3.2",
"resolved": "http://mirrors.cloud.tencent.com/npm/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"verror": {
"version": "1.10.0",
"resolved": "http://mirrors.cloud.tencent.com/npm/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"wx-server-sdk": {
"version": "0.8.1",
"resolved": "http://mirrors.cloud.tencent.com/npm/wx-server-sdk/-/wx-server-sdk-0.8.1.tgz",
"integrity": "sha512-mE7O3E7GtRhqk1ukWw2+NiykaO5DaJYiMFCeHrwvekYTVL5Z2nFXnSrUx6nPg/vZ7LWWQbCgQlGOygBjj2+hkQ==",
"requires": {
"protobufjs": "6.8.8",
"tcb-admin-node": "1.9.0",
"tslib": "^1.9.3"
}
},
"xml2js": {
"version": "0.4.19",
"resolved": "http://mirrors.cloud.tencent.com/npm/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~9.0.1"
}
},
"xmlbuilder": {
"version": "9.0.7",
"resolved": "http://mirrors.cloud.tencent.com/npm/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
}
}
}

View File

@@ -0,0 +1,37 @@
// 云函数入口文件
const cloud = require('wx-server-sdk')
const tencentcloud = require("tencentcloud-sdk-nodejs");
const IotexplorerClient = tencentcloud.iotexplorer.v20190423.Client;
const models = tencentcloud.iotexplorer.v20190423.Models;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
cloud.init()
// 云函数入口函数
exports.main = async(event, context) => {
console.log("event:", event);
let cred = new Credential(event.SecretId, event.SecretKey);
let httpProfile = new HttpProfile();
httpProfile.endpoint = "iotexplorer.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new IotexplorerClient(cred, "ap-guangzhou", clientProfile);
let req = new models.DescribeDeviceDataRequest();
req.ProductId = event.ProductId;
req.DeviceName = event.DeviceName;
console.log("req:", req);
return new Promise((resolve, reject) => {
client.DescribeDeviceData(req, function(errMsg, response) {
if (errMsg) {
console.log(errMsg);
reject(errMsg);
}
console.log(response);
resolve(response)
});
})
}

View File

@@ -0,0 +1,15 @@
{
"name": "iotexplorer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"tencentcloud-sdk-nodejs": "^3.0.77",
"wx-server-sdk": "latest"
}
}

View File

@@ -0,0 +1,22 @@
//app.js
App({
globalData: {
},
onLaunch: function () {
wx.setKeepScreenOn({
keepScreenOn: true
})
if (!wx.cloud) {
console.error('请使用 2.2.3 或以上的基础库以使用云能力')
} else {
wx.cloud.init({
// env 参数说明:
// env 参数决定接下来小程序发起的云开发调用wx.cloud.xxx会默认请求到哪个云环境的资源
// 此处请填入环境 ID, 环境 ID 可打开云控制台查看
// 如不填则使用默认环境(第一个创建的环境)
env: "tos-demo",
traceUser: true,
})
}
}
})

View File

@@ -0,0 +1,13 @@
{
"pages": [
"pages/index/index"
],
"window": {
"backgroundColor": "#F6F6F6",
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#F6F6F6",
"navigationBarTitleText": "设备联动Demo",
"navigationBarTextStyle": "black"
},
"sitemapLocation": "sitemap.json"
}

View File

@@ -0,0 +1,156 @@
/**app.wxss**/
.container {
display: flex;
flex-direction: column;
align-items: center;
box-sizing: border-box;
}
button {
background: initial;
}
button:focus{
outline: 0;
}
button::after{
border: none;
}
page {
background: #f6f6f6;
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.userinfo, .uploader, .tunnel {
margin-top: 40rpx;
height: 140rpx;
width: 100%;
background: #fff;
border: 1px solid rgba(0, 0, 0, 0.1);
border-left: none;
border-right: none;
display: flex;
flex-direction: row;
align-items: center;
transition: all 300ms ease;
}
.userinfo-avatar {
width: 100rpx;
height: 100rpx;
margin: 20rpx;
border-radius: 50%;
background-size: cover;
background-color: white;
}
.userinfo-avatar:after {
border: none;
}
.userinfo-nickname {
font-size: 32rpx;
color: #007aff;
background-color: white;
background-size: cover;
}
.userinfo-nickname::after {
border: none;
}
.uploader, .tunnel {
height: auto;
padding: 0 0 0 40rpx;
flex-direction: column;
align-items: flex-start;
box-sizing: border-box;
}
.uploader-text, .tunnel-text {
width: 100%;
line-height: 52px;
font-size: 34rpx;
color: #007aff;
}
.uploader-container {
width: 100%;
height: 400rpx;
padding: 20rpx 20rpx 20rpx 0;
display: flex;
align-content: center;
justify-content: center;
box-sizing: border-box;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.uploader-image {
width: 100%;
height: 360rpx;
}
.tunnel {
padding: 0 0 0 40rpx;
}
.tunnel-text {
position: relative;
color: #222;
display: flex;
flex-direction: row;
align-content: center;
justify-content: space-between;
box-sizing: border-box;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.tunnel-text:first-child {
border-top: none;
}
.tunnel-switch {
position: absolute;
right: 20rpx;
top: -2rpx;
}
.disable {
color: #888;
}
.service {
position: fixed;
right: 40rpx;
bottom: 40rpx;
width: 140rpx;
height: 140rpx;
border-radius: 50%;
background: linear-gradient(#007aff, #0063ce);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3);
display: flex;
align-content: center;
justify-content: center;
transition: all 300ms ease;
}
.service-button {
position: absolute;
top: 40rpx;
}
.service:active {
box-shadow: none;
}
.request-text {
padding: 20rpx 0;
font-size: 24rpx;
line-height: 36rpx;
word-break: break-all;
}

View File

@@ -0,0 +1,24 @@
// 传感设备配置
const SensorDevice = {
// 腾讯云物联网通信平台中获取 产品ID和设备名称
ProductId: "ZLN6Q20QHU", // 产品ID
DeviceName: "dev001", // 设备名称
// 腾讯云控制台-访问管理-访问密钥-API密钥管理中获取 SecretId, SecretKey
SecretId: "XXXX",
SecretKey: "XXXX",
}
// 执行设备配置
const ExecuteDevice = {
ProductId: "U1BZWHF7F9", // 产品ID
DeviceName: "dev_01", // 设备名称
// 腾讯云控制台-访问管理-访问密钥-API密钥管理中获取 SecretId, SecretKey
SecretId: "XXXX",
SecretKey: "XXXX",
Topic: "U1BZWHF7F9/dev_01/data"
}
module.exports = {
SensorDevice: SensorDevice,
ExecuteDevice: ExecuteDevice,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,266 @@
const app = getApp()
const config = require('../../config.js')
var util = require('../../utils/util.js');
var wxCharts = require('../../utils/wxcharts.js');
var lineChart = null;
var startPos = null;
Page({
data: {
tempHigh: 20,
sensorDevice: {},
executeDevice: {},
chartDataTemp: [],
chartDataHumi: [],
chartCategories: [],
},
onLoad: async function(options) {
console.log("index onLoad")
while (true) {
let executor = await this.queryExecuteDeviceStatus()
let sensor = await this.querySensorDeviceStatus()
this.renderChart(sensor.temperature.Value, sensor.humidity.Value)
let temp = sensor.temperature.Value
console.log(temp)
if (temp >= this.data.tempHigh) {
if (executor.light == 0) {
wx.showModal({
title: '提示',
content: `温度达到门限(${this.data.tempHigh}),打开风扇和灯`,
showCancel: false,
})
this.turnOnLight()
this.turnOnFan()
}
} else {
// this.turnOffLight()
// this.turnOffFan()
}
await util.delayMs(5000)
}
},
sliderChange(e) {
console.log(e.detail)
this.setData({
tempHigh: e.detail.value
})
},
renderChart(temperature, humidity) {
let epoch = Math.round(new Date().getTime() / 1000)
let timestamp = util.formatEpoch(epoch)
if (this.data.chartDataTemp.length > 5) {
this.data.chartDataTemp.pop();
this.data.chartDataHumi.pop();
this.data.chartCategories.pop();
}
this.data.chartDataTemp.unshift(temperature)
this.data.chartDataHumi.unshift(humidity)
this.data.chartCategories.unshift(timestamp.substring(11))
this.setData({
timestamp: timestamp,
chartDataTemp: this.data.chartDataTemp,
chartDataHumi: this.data.chartDataHumi,
chartCategories: this.data.chartCategories,
})
this.renderChartTemp(400, 160)
this.renderChartHumi(400, 160)
},
// 查询传感器设备状态
async querySensorDeviceStatus() {
let res = await wx.cloud.callFunction({
name: 'query',
data: config.SensorDevice
})
console.log("sensorDevice status", res.result.Data)
let data = JSON.parse(res.result.Data)
this.setData({
sensorDevice: data
})
return this.data.sensorDevice
},
// 查询执行设备状态
async queryExecuteDeviceStatus() {
let res = await wx.cloud.callFunction({
name: 'iothub-shadow-query',
data: config.ExecuteDevice,
})
console.log("executeDevice status", res.result)
let deviceData = JSON.parse(res.result.Data)
// this.setData({
// executeDevice: deviceData.payload.state.reported
// })
return deviceData.payload.state.reported
},
async turnOnLight() {
await this.control({
light: 1
})
this.setData({
[`executeDevice.light`]: 1
})
},
async turnOffLight() {
await this.control({
light: 0
})
this.setData({
[`executeDevice.light`]: 0
})
},
async turnOnFan() {
await this.control({
motor: 1
})
this.setData({
[`executeDevice.motor`]: 1
})
},
async turnOffFan() {
await this.control({
motor: 0
})
this.setData({
[`executeDevice.motor`]: 0
})
},
async control(obj) {
let data = config.ExecuteDevice
data.Payload = JSON.stringify(obj)
await wx.cloud.callFunction({
name: 'iothub-publish',
data: data
})
},
async switchChange(e) {
let value = 0
if (e.detail.value == true) {
value = 1
}
let item = e.currentTarget.dataset.item
let obj = {
[`${item}`]: value
}
wx.showLoading()
let data = config.ExecuteDevice
data.Payload = JSON.stringify(obj)
console.log(data)
await wx.cloud.callFunction({
name: 'iothub-publish',
data: data
})
wx.hideLoading()
},
touchHandler: function(e) {
if (!lineChart) {
return;
}
lineChart.scrollStart(e);
},
moveHandler: function(e) {
if (!lineChart) {
return;
}
lineChart.scroll(e);
},
touchEndHandler: function(e) {
if (!lineChart) {
return;
}
lineChart.scrollEnd(e);
lineChart.showToolTip(e, {
format: function(item, category) {
return category + ' ' + item.name + ':' + item.data
}
});
},
renderChartHumi: function(windowWidth, windowHeight) {
lineChart = new wxCharts({
canvasId: 'chartHumi',
type: 'line',
categories: this.data.chartCategories, // simulationData.categories,
animation: false,
series: [{
name: '湿度',
data: this.data.chartDataHumi, // simulationData.data2,
format: function(val, name) {
return val.toFixed(2) + "%";
// return val + "%";
}
}],
xAxis: {
disableGrid: false,
fontColor: '#666666',
},
yAxis: {
// title: '湿度 (%)',
// format: function (val) {
// return val.toFixed(2);
// },
max: 100,
min: 50,
disabled: false,
},
width: windowWidth,
height: windowHeight,
legend: true,
dataLabel: true,
dataPointShape: true,
enableScroll: true,
extra: {
lineStyle: 'curve'
},
});
},
renderChartTemp: function(windowWidth, windowHeight) {
lineChart = new wxCharts({
canvasId: 'chartTemp',
type: 'line',
categories: this.data.chartCategories, // simulationData.categories,
animation: false,
series: [{
name: '温度',
data: this.data.chartDataTemp, //simulationData.data,
format: function(val, name) {
return val.toFixed(2) + "℃";
// return val + "℃";
}
}],
xAxis: {
disableGrid: false
},
yAxis: {
// title: '温度 (℃)',
// format: function (val) {
// return val.toFixed(2);
// },
min: 15,
max: 25,
disabled: false,
},
width: windowWidth,
height: windowHeight,
legend: true,
dataLabel: true,
dataPointShape: true,
enableScroll: true,
extra: {
lineStyle: 'curve'
},
});
},
createSimulationData: function() {
var categories = [];
var data = [];
var data2 = [];
for (var i = 0; i < 10; i++) {
categories.push('201620162-' + (i + 1));
data.push(Math.random() * (20 - 10) + 10);
data2.push(Math.random() * (20 - 10) + 30);
}
return {
categories: categories,
data: data,
data2: data2
}
},
})

View File

@@ -0,0 +1,66 @@
<!-- <wxs module="dateUtil" src="../../utils/timeutil.wxs"> -->
<view style="display:flex; flex-direction:column; align-items:center;">
<image style="width:200px; height:60px;" src="../../images/TencentOS_tiny_log.png" mode="cover"></image>
</view>
<view class="body">
<form bindsubmit="">
<view style="display:flex; flex-direction:row; justify-content: space-between;">
<view style="font-weight: bold;">
传感设备
</view>
<view>
{{timestamp}}
</view>
</view>
<view class="box">
<view class="cell">
<view class="left">温度</view>
<view class="right">
{{sensorDevice.temperature.Value}}
</view>
<view class="unit">℃</view>
</view>
<canvas canvas-id="chartTemp" disable-scroll="false" class="canvas" bindtouchstart="touchHandler" bindtouchmove="moveHandler" bindtouchend="touchEndHandler"></canvas>
<view class="cell">
<view class="left">湿度</view>
<view class="right">
{{sensorDevice.humidity.Value}}
</view>
<view class="unit">%</view>
</view>
</view>
<canvas canvas-id="chartHumi" disable-scroll="false" class="canvas" bindtouchstart="touchHandler" bindtouchmove="moveHandler" bindtouchend="touchEndHandler"></canvas>
</form>
<form bindsubmit="">
<view style="display:flex; flex-direction:row; justify-content: space-between;">
<view style="font-weight: bold;">
执行设备
</view>
</view>
<view class="box">
<view class="cell">
<view>照明</view>
<view>
<switch name="light" data-item="light" checked="{{executeDevice.light}}" bindchange="switchChange" />
</view>
</view>
<view class="cell">
<view>风扇</view>
<view>
<switch name="motor" data-item="motor" checked="{{executeDevice.motor}}" bindchange="switchChange" />
</view>
</view>
<view class="cell">
<view>温度门限</view>
</view>
<slider bindchange="sliderChange" min="0" max="100" value="{{tempHigh}}" show-value/>
</view>
</form>
</view>
<view>
</view>

View File

@@ -0,0 +1,32 @@
.body {
margin: 10rpx 20rpx;
}
.box {
padding: 0rpx 20rpx;
border-top: 2px solid #000;
}
.cell {
margin-top: 10rpx;
margin-bottom: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
.left {
width: 50%;
text-align: left;
}
.right {
width: 40%;
text-align: right;
}
.unit {
width: 10%;
text-align: right;
}

View File

@@ -0,0 +1,7 @@
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
}

View File

@@ -0,0 +1,48 @@
var formatNumber = function (n) {
n = n.toString()
return n[1] ? n : '0' + n
}
var regYear = getRegExp("(y+)", "i");
var dateFormat = function (timestamp, format) {
if (!format) {
format = "yyyy-MM-dd hh:mm:ss";
}
timestamp = parseInt(timestamp);
var realDate = getDate(timestamp);
function timeFormat(num) {
return num < 10 ? '0' + num : num;
}
var date = [
["M+", timeFormat(realDate.getMonth() + 1)],
["d+", timeFormat(realDate.getDate())],
["h+", timeFormat(realDate.getHours())],
["m+", timeFormat(realDate.getMinutes())],
["s+", timeFormat(realDate.getSeconds())],
["q+", Math.floor((realDate.getMonth() + 3) / 3)],
["S+", realDate.getMilliseconds()],
];
var reg1 = regYear.exec(format);
// console.log(reg1[0]);
if (reg1) {
format = format.replace(reg1[1], (realDate.getFullYear() + '').substring(4 - reg1[1].length));
}
for (var i = 0; i < date.length; i++) {
var k = date[i][0];
var v = date[i][1];
var reg2 = getRegExp("(" + k + ")").exec(format);
if (reg2) {
format = format.replace(reg2[1], reg2[1].length == 1
? v : ("00" + v).substring(("" + v).length));
}
}
return format;
}
module.exports = {
dateFormat: dateFormat
}

View File

@@ -0,0 +1,33 @@
// await util.delayMs(1000)
const delayMs = (ms) => {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
function Appendzero(obj) {
if (obj < 10) return "0" + "" + obj;
else return obj;
}
// epoch => datetime str
// 1578450878 => 2019-10-23 18:05:30
function formatEpoch(epoch) {
var dateTime = new Date(parseInt(epoch) * 1000)
var year = dateTime.getFullYear();
var month = dateTime.getMonth() + 1;
var day = dateTime.getDate();
var hour = dateTime.getHours();
var minute = dateTime.getMinutes();
var second = dateTime.getSeconds();
var now = new Date();
var now_new = Date.parse(now.toDateString()); //typescript转换写法
var milliseconds = now_new - dateTime;
var timeSpanStr = year + '-' + Appendzero(month) + '-' + Appendzero(day) + ' ' + Appendzero(hour) + ':' + Appendzero(minute) + ':' + Appendzero(second);
return timeSpanStr;
}
module.exports = {
delayMs: delayMs,
formatEpoch: formatEpoch,
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,52 @@
{
"miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
"setting": {
"urlCheck": false,
"es6": true,
"postcss": true,
"minified": true,
"newFeature": true,
"coverView": true,
"nodeModules": true,
"autoAudits": false,
"showShadowRootInWxmlPanel": true,
"scopeDataCheck": false,
"checkInvalidKey": true,
"checkSiteMap": true,
"uploadWithSourceMap": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"enhance": true
},
"appid": "wx394efa031612f9b5",
"projectname": "qcloud_device_linkage_demo",
"libVersion": "2.7.7",
"simulatorType": "wechat",
"simulatorPluginLibVersion": {},
"cloudfunctionTemplateRoot": "cloudfunctionTemplate",
"compileType": "miniprogram",
"condition": {
"search": {
"current": -1,
"list": []
},
"conversation": {
"current": -1,
"list": []
},
"plugin": {
"current": -1,
"list": []
},
"game": {
"list": []
},
"miniprogram": {
"current": 0
}
}
}