更新组件初始数据
parent
d59aad1199
commit
fc7510708e
|
@ -0,0 +1,8 @@
|
||||||
|
FROM openjdk:11-jre-slim
|
||||||
|
WORKDIR /app
|
||||||
|
ADD iot-standalone/target/iot-standalone-0.4.0-SNAPSHOT.tar /app
|
||||||
|
ADD data/init /app/data/init
|
||||||
|
ADD data/components /app/data/components
|
||||||
|
ADD data/converters /app/data/converters
|
||||||
|
EXPOSE 8086
|
||||||
|
ENTRYPOINT ["java", "-classpath", ".:lib/*","cc.iotkit.Application"]
|
|
@ -0,0 +1,238 @@
|
||||||
|
//api配置
|
||||||
|
apiTool.config("127.0.0.1",8085,3000);
|
||||||
|
|
||||||
|
this.onReceive=function(method,path,header,params,body){
|
||||||
|
//method:post、get、delete...
|
||||||
|
//path:请求路径
|
||||||
|
//header:http请求头数据,结构:{xx:xx,yy:yy}
|
||||||
|
//params:请求参数,结构:{xx:[...],yy:[...]}
|
||||||
|
//body:请求体,当提交的数据为json格式时使用,结构:{xx:xx,yy:yy}
|
||||||
|
apiTool.log("onReceive body:"+body);
|
||||||
|
var duHeader=body.header;
|
||||||
|
var namespace=duHeader.namespace;
|
||||||
|
var requestName=duHeader.name;
|
||||||
|
var messageId=duHeader.messageId;
|
||||||
|
var duPayload=body.payload;
|
||||||
|
var token=duPayload.accessToken;
|
||||||
|
var openUid=duPayload.openUid;
|
||||||
|
|
||||||
|
//设备发现
|
||||||
|
if(namespace=="DuerOS.ConnectedHome.Discovery" && requestName=="DiscoverAppliancesRequest"){
|
||||||
|
var deviceIds=[];
|
||||||
|
var discoveredDevices=[];
|
||||||
|
var content={
|
||||||
|
header:{
|
||||||
|
namespace:"DuerOS.ConnectedHome.Discovery",
|
||||||
|
name:"DiscoverAppliancesResponse",
|
||||||
|
messageId:messageId,
|
||||||
|
payloadVersion:1
|
||||||
|
},
|
||||||
|
payload:{
|
||||||
|
discoveredAppliances:discoveredDevices,
|
||||||
|
discoveredGroups:[{
|
||||||
|
groupName:"客厅",
|
||||||
|
applianceIds:deviceIds,
|
||||||
|
groupNotes:"客厅分组控制",
|
||||||
|
additionalGroupDetails:{}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var rst=apiTool.getSpaceDevices(token);
|
||||||
|
apiTool.log(JSON.stringify(rst));
|
||||||
|
if(rst && rst.status==200 && rst.data){
|
||||||
|
var devices=rst.data;
|
||||||
|
for(var i in devices){
|
||||||
|
var device=devices[i];
|
||||||
|
var did=device.deviceId;
|
||||||
|
var pk=device.productKey;
|
||||||
|
var dn=device.deviceName;
|
||||||
|
|
||||||
|
//更新设备openUid
|
||||||
|
rst=apiTool.setOpenUid(token,did,"dueros",openUid);
|
||||||
|
if(!rst || rst.status!=200){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//插座
|
||||||
|
if(pk=="cGCrkK7Ex4FESAwe"){
|
||||||
|
var powerstate=device.property.powerstate;
|
||||||
|
discoveredDevices.push({
|
||||||
|
actions:["turnOn","turnOff"],
|
||||||
|
applianceTypes:["SOCKET"],
|
||||||
|
additionalApplianceDetails:{},
|
||||||
|
applianceId:device.deviceId,
|
||||||
|
friendlyDescription:"智能插座",
|
||||||
|
friendlyName:device.name,
|
||||||
|
isReachable:device.online,
|
||||||
|
manufacturerName:"海曼",
|
||||||
|
modelName:"S1",
|
||||||
|
version:"v1.0",
|
||||||
|
attributes:[
|
||||||
|
{
|
||||||
|
name:"客厅的插座",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name:"connectivity",
|
||||||
|
value:"REACHABLE",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name:"turnOnState",
|
||||||
|
value:powerstate==1?"ON":"OFF",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10,
|
||||||
|
legalValue:"(ON, OFF)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}else if(pk=="Rf4QSjbm65X45753"){
|
||||||
|
//开关
|
||||||
|
var powerstate=device.property.powerstate;
|
||||||
|
discoveredDevices.push({
|
||||||
|
actions:["turnOn","turnOff"],
|
||||||
|
applianceTypes:["SWITCH"],
|
||||||
|
additionalApplianceDetails:{},
|
||||||
|
applianceId:device.deviceId,
|
||||||
|
friendlyDescription:"智能开关",
|
||||||
|
friendlyName:device.name,
|
||||||
|
isReachable:device.online,
|
||||||
|
manufacturerName:"海曼",
|
||||||
|
modelName:"S1",
|
||||||
|
version:"v1.0",
|
||||||
|
attributes:[
|
||||||
|
{
|
||||||
|
name:"客厅的开关",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name:"connectivity",
|
||||||
|
value:"REACHABLE",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name:"turnOnState",
|
||||||
|
value:powerstate==1?"ON":"OFF",
|
||||||
|
scale:"",
|
||||||
|
timestampOfSample:0,
|
||||||
|
uncertaintyInMilliseconds:10,
|
||||||
|
legalValue:"(ON, OFF)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
url:"",//不指定直接作为响应返回
|
||||||
|
header:{
|
||||||
|
contentType:"application/json"
|
||||||
|
},
|
||||||
|
content:JSON.stringify(content)
|
||||||
|
}
|
||||||
|
}else if(namespace=="DuerOS.ConnectedHome.Control"){
|
||||||
|
//设备控制
|
||||||
|
var appliance=duPayload.appliance;
|
||||||
|
var deviceId=appliance.applianceId;
|
||||||
|
var confirmName="UnsupportedOperationError";
|
||||||
|
var rst={status:500};
|
||||||
|
|
||||||
|
//开关
|
||||||
|
if(requestName=="TurnOnRequest"){
|
||||||
|
//开
|
||||||
|
confirmName="TurnOnConfirmation";
|
||||||
|
rst=apiTool.setProperties(token,deviceId,{powerstate:1});
|
||||||
|
}else if(requestName=="TurnOffRequest"){
|
||||||
|
//关
|
||||||
|
confirmName="TurnOffConfirmation";
|
||||||
|
rst=apiTool.setProperties(token,deviceId,{powerstate:0});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(rst.status!=200){
|
||||||
|
confirmName="UnsupportedOperationError";
|
||||||
|
apiTool.log("device control failed:"+JSON.stringify(rst));
|
||||||
|
}
|
||||||
|
|
||||||
|
var content={
|
||||||
|
header: {
|
||||||
|
namespace: "DuerOS.ConnectedHome.Control",
|
||||||
|
name: confirmName,
|
||||||
|
messageId: messageId,
|
||||||
|
payloadVersion: "1"
|
||||||
|
},
|
||||||
|
payload: {
|
||||||
|
"attributes": []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
url:"",
|
||||||
|
header:{
|
||||||
|
contentType:"application/json"
|
||||||
|
},
|
||||||
|
content:JSON.stringify(content)
|
||||||
|
}
|
||||||
|
}else if(namespace=="DuerOS.ConnectedHome.Query"){
|
||||||
|
//属性查询
|
||||||
|
if(requestName=="ReportStateRequest"){
|
||||||
|
var appliance=duPayload.appliance;
|
||||||
|
var deviceId=appliance.applianceId;
|
||||||
|
var property=appliance.attributeName;
|
||||||
|
var propertyVal="";
|
||||||
|
var success=false;
|
||||||
|
if(property=="turnOnState"){
|
||||||
|
//开关状态查询
|
||||||
|
var rst= apiTool.getSpaceDeviceDetail(token,deviceId);
|
||||||
|
if(rst && rst.status==200 && rst.data.property){
|
||||||
|
propertyVal=rst.data.property.powerstate==1?"ON":"OFF";
|
||||||
|
success=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var content=success?{
|
||||||
|
"header": {
|
||||||
|
"namespace": "DuerOS.ConnectedHome.Query",
|
||||||
|
"name": "ReportStateResponse",
|
||||||
|
"messageId": new Date().getTime()+"",
|
||||||
|
"payloadVersion": "1"
|
||||||
|
},
|
||||||
|
"payload": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"name": property,
|
||||||
|
"value": propertyVal,
|
||||||
|
"scale": "",
|
||||||
|
"timestampOfSample": new Date().getTime()/1000,
|
||||||
|
"uncertaintyInMilliseconds": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}:{};
|
||||||
|
|
||||||
|
return {
|
||||||
|
url:"",
|
||||||
|
header:{
|
||||||
|
contentType:"application/json"
|
||||||
|
},
|
||||||
|
content:JSON.stringify(content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
url:"",//不指定直接作为响应返回
|
||||||
|
header:{
|
||||||
|
contentType:"application/json"
|
||||||
|
},
|
||||||
|
content:""
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,302 @@
|
||||||
|
!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);
|
||||||
|
var md5=this.md5;
|
||||||
|
|
||||||
|
function isServerId(clientId){
|
||||||
|
return JSON.parse(component.getCompMqttClientIdList()).indexOf(clientId) > -1
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPkDn(clientId){
|
||||||
|
var arr=clientId.split("_");
|
||||||
|
return {
|
||||||
|
pk:arr[0],
|
||||||
|
dn:arr[1]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function auth(head,type,payload){
|
||||||
|
if(isServerId(payload.clientid)){
|
||||||
|
return {
|
||||||
|
type:"serverAuth",
|
||||||
|
data:{
|
||||||
|
productKey:"pd",
|
||||||
|
deviceName:"dn",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var arr= payload.clientid.split("_");
|
||||||
|
if(arr.length<3){
|
||||||
|
throw new Error("incorrect clientid:" + payload.clientid);
|
||||||
|
}
|
||||||
|
|
||||||
|
var pk=arr[0];
|
||||||
|
var dn=arr[1];
|
||||||
|
var model=arr[2];
|
||||||
|
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+payload.clientid);
|
||||||
|
if(pwd!=payload.password){
|
||||||
|
throw new Error("incorrect password:" + pwd);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type:"register",
|
||||||
|
data:{
|
||||||
|
productKey:pk,
|
||||||
|
deviceName:dn,
|
||||||
|
model:model
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function acl(head,type,payload){
|
||||||
|
var _topic = payload.topic;
|
||||||
|
|
||||||
|
if(isServerId(payload.clientid)){
|
||||||
|
return {
|
||||||
|
type: "acl",
|
||||||
|
data:{
|
||||||
|
productKey:"pd",
|
||||||
|
deviceName:"dn",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/^\/sys\/.+\/.+\/c\/#/i.test(_topic)) {
|
||||||
|
return subscribe(head,type,payload);
|
||||||
|
}
|
||||||
|
if (/^\/sys\/.+\/.+\/s\/.*/i.test(_topic)) {
|
||||||
|
return subscribe(head,type,payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function register(head,type,payload){
|
||||||
|
var auth= payload;
|
||||||
|
var arr= auth.clientid.split("_");
|
||||||
|
if(arr.length<3){
|
||||||
|
throw new Error("incorrect clientid:" + auth.clientid);
|
||||||
|
}
|
||||||
|
|
||||||
|
var pk=arr[0];
|
||||||
|
var dn=arr[1];
|
||||||
|
var model=arr[2];
|
||||||
|
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+auth.clientid);
|
||||||
|
if(pwd!=auth.password){
|
||||||
|
throw new Error("incorrect password:" + pwd);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type:"register",
|
||||||
|
data:{
|
||||||
|
productKey:pk,
|
||||||
|
deviceName:dn,
|
||||||
|
model:model
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function subRegister(topic,parent, payload){
|
||||||
|
if(!topic){
|
||||||
|
throw new Error("topic is blank")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var params= payload.params;
|
||||||
|
|
||||||
|
var reply=
|
||||||
|
{
|
||||||
|
productKey: parent.productKey,
|
||||||
|
deviceName: parent.deviceName,
|
||||||
|
mid: "0",
|
||||||
|
content:{
|
||||||
|
topic: topic.replace("/s/","/c/")+"_reply",
|
||||||
|
payload: JSON.stringify({
|
||||||
|
id: payload.id,
|
||||||
|
code: 0,
|
||||||
|
data: {
|
||||||
|
"productKey":params.productKey,
|
||||||
|
"deviceName":params.deviceName
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
type:"register",
|
||||||
|
data:{
|
||||||
|
productKey:parent.productKey,
|
||||||
|
deviceName:parent.deviceName,
|
||||||
|
subDevices:[{
|
||||||
|
productKey:params.productKey,
|
||||||
|
deviceName:params.deviceName,
|
||||||
|
model:params.model
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
action:{
|
||||||
|
type:"ack",
|
||||||
|
content:JSON.stringify(reply)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect(head,type,payload){
|
||||||
|
var clientId = payload.clientid
|
||||||
|
var device=getPkDn(clientId);
|
||||||
|
return {
|
||||||
|
type:"state",
|
||||||
|
data:{
|
||||||
|
productKey:device.pk,
|
||||||
|
deviceName:device.dn,
|
||||||
|
state:"offline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect(head,type,payload) {
|
||||||
|
var clientId = payload.clientid
|
||||||
|
var device = getPkDn(clientId);
|
||||||
|
return {
|
||||||
|
type: "state",
|
||||||
|
data: {
|
||||||
|
productKey: device.pk,
|
||||||
|
deviceName: device.dn,
|
||||||
|
state: "online"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsubscribe(head,type,payload){
|
||||||
|
var topic = payload.topic;
|
||||||
|
|
||||||
|
if(isServerId(payload.clientid)){
|
||||||
|
return {
|
||||||
|
type: "acl",
|
||||||
|
data:{
|
||||||
|
productKey:"pd",
|
||||||
|
deviceName:"dn",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var arr= topic.split('/');
|
||||||
|
if(arr.length<6){
|
||||||
|
throw new Error("incorrect topic: "+topic)
|
||||||
|
}
|
||||||
|
|
||||||
|
var pk=arr[2];
|
||||||
|
var dn=arr[3];
|
||||||
|
|
||||||
|
return {
|
||||||
|
type:"state",
|
||||||
|
data:{
|
||||||
|
productKey: pk,
|
||||||
|
deviceName: dn,
|
||||||
|
state:"offline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function subscribe(head,type,payload){
|
||||||
|
var topic = payload.topic;
|
||||||
|
|
||||||
|
if(isServerId(payload.clientid)){
|
||||||
|
return {
|
||||||
|
type: "acl",
|
||||||
|
data:{
|
||||||
|
productKey:"pd",
|
||||||
|
deviceName:"dn",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var arr= topic.split('/');
|
||||||
|
if(arr.length<6){
|
||||||
|
throw new Error("incorrect topic: "+topic)
|
||||||
|
}
|
||||||
|
var pk=arr[2];
|
||||||
|
var dn=arr[3];
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: "state",
|
||||||
|
data: {
|
||||||
|
productKey: pk,
|
||||||
|
deviceName: dn,
|
||||||
|
state: "online"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var messageHandler = {
|
||||||
|
"/sys/client/connected":connect,
|
||||||
|
"/sys/client/disconnected":disconnect,
|
||||||
|
"/mqtt/auth":auth,
|
||||||
|
"/mqtt/acl":acl,
|
||||||
|
"/sys/session/subscribed":subscribe,
|
||||||
|
"/sys/session/unsubscribed":unsubscribe
|
||||||
|
}
|
||||||
|
|
||||||
|
//必须提供onReceive方法
|
||||||
|
this.onReceive=function(head,type,payload){
|
||||||
|
payload=JSON.parse(payload);
|
||||||
|
|
||||||
|
print("======================================================================= ");
|
||||||
|
print("【message from】: " + (isServerId(payload.clientid)?"Server":"Device") );
|
||||||
|
print("onReceive head: "+JSON.stringify(head));
|
||||||
|
print("onReceive type: "+JSON.stringify(type));
|
||||||
|
print("onReceive payload: "+ JSON.stringify(payload));
|
||||||
|
//print("onReceive compMqttClientIdList: "+ component.getCompMqttClientIdList());
|
||||||
|
|
||||||
|
var result = {};
|
||||||
|
var topic = head.topic;
|
||||||
|
if(!topic) {
|
||||||
|
|
||||||
|
print("【result】: " + JSON.stringify(result));
|
||||||
|
print("======================================================================= ");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
var fun = messageHandler[topic];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(fun){
|
||||||
|
result = fun(head,type,payload)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
var arr= topic.split('/');
|
||||||
|
if(arr.length<6){
|
||||||
|
throw new Error("incorrect topic: "+topic)
|
||||||
|
}
|
||||||
|
var pk=arr[2];
|
||||||
|
var dn=arr[3];
|
||||||
|
|
||||||
|
//子设备注册
|
||||||
|
if(topic.endsWith('/register')){
|
||||||
|
result = subRegister(topic,{productKey:pk,deviceName:dn}, payload);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//数据上报
|
||||||
|
result = {
|
||||||
|
type: "report",
|
||||||
|
data: {
|
||||||
|
productKey: pk,
|
||||||
|
deviceName: dn,
|
||||||
|
mid: payload.id,
|
||||||
|
content: {
|
||||||
|
topic: topic,
|
||||||
|
payload: payload
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
print("【result】: " + JSON.stringify(result));
|
||||||
|
print("======================================================================= ");
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onRegistered=function(regInfo,result){
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
|
@ -1,47 +1,23 @@
|
||||||
[
|
[
|
||||||
{
|
|
||||||
"id": "fee0e826-963f-4e53-a2cf-11e3e5f784ea",
|
|
||||||
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
|
||||||
"name": "移动Onenet Studio接入",
|
|
||||||
"type": "biz",
|
|
||||||
"protocol": "http",
|
|
||||||
"jarFile": "http-biz-component-0.1.0-SNAPSHOT.jar",
|
|
||||||
"config": "{\"port\":\"8086\"}",
|
|
||||||
"converter": "6260396d67aced2696184053",
|
|
||||||
"state": "stopped",
|
|
||||||
"createAt": 1652238780184
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "eabb131d-8fd1-43a8-88d9-a198abfd3d42",
|
"id": "eabb131d-8fd1-43a8-88d9-a198abfd3d42",
|
||||||
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
||||||
"name": "MQTT标准协议组件",
|
"name": "MQTT标准协议组件",
|
||||||
"type": "device",
|
"type": "device",
|
||||||
"protocol": "mqtt",
|
"protocol": "mqtt",
|
||||||
"jarFile": "iot-mqtt-component-0.3.1-SNAPSHOT.jar",
|
"jarFile": "iot-mqtt-component-0.4.0-SNAPSHOT.jar",
|
||||||
"config": "{\"port\":1883,\"ssl\":false,\"type\":\"server\"}",
|
"config": "{\"port\":1883,\"ssl\":false,\"type\":\"server\"}",
|
||||||
"converter": "6260396d67aced2696184053",
|
"converter": "6260396d67aced2696184053",
|
||||||
"state": "running",
|
"state": "running",
|
||||||
"createAt": 1650473458084
|
"createAt": 1650473458084
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "cd8253c1-b489-434c-845d-d18c7b70dcea",
|
|
||||||
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
|
||||||
"name": "电信NB协议接入组件",
|
|
||||||
"type": "device",
|
|
||||||
"protocol": "http",
|
|
||||||
"jarFile": "ctwing-component-0.2.1-SNAPSHOT.jar",
|
|
||||||
"config": "{\"port\":\"8087\"}",
|
|
||||||
"converter": "62995ba4dbf51a5ec41d5f7b",
|
|
||||||
"state": "stopped",
|
|
||||||
"createAt": 1654235056032
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "6c095554-35e7-4e9d-a8d2-bb919e9479f4",
|
"id": "6c095554-35e7-4e9d-a8d2-bb919e9479f4",
|
||||||
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
"uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
|
||||||
"name": "EMQX标准协议组件",
|
"name": "EMQX标准协议组件",
|
||||||
"type": "device",
|
"type": "device",
|
||||||
"protocol": "mqtt",
|
"protocol": "mqtt",
|
||||||
"jarFile": "emqx-component-0.2.1-SNAPSHOT.jar",
|
"jarFile": "emqx-component-0.4.0-SNAPSHOT.jar",
|
||||||
"config": "{\"port\":\"1884\",\"ssl\":false,\"type\":\"client\",\"subscribeTopics\":[\"/sys/+/+/s/#\",\"/sys/client/connected\",\"/sys/client/disconnected\",\"/sys/session/subscribed\",\"/sys/session/unsubscribed\"],\"authPort\":\"8088\",\"broker\":\"127.0.0.1\",\"clientId\":\"test\",\"username\":\"test\",\"password\":\"123\"}",
|
"config": "{\"port\":\"1884\",\"ssl\":false,\"type\":\"client\",\"subscribeTopics\":[\"/sys/+/+/s/#\",\"/sys/client/connected\",\"/sys/client/disconnected\",\"/sys/session/subscribed\",\"/sys/session/unsubscribed\"],\"authPort\":\"8088\",\"broker\":\"127.0.0.1\",\"clientId\":\"test\",\"username\":\"test\",\"password\":\"123\"}",
|
||||||
"converter": "6260396d67aced2696184053",
|
"converter": "6260396d67aced2696184053",
|
||||||
"state": "stopped",
|
"state": "stopped",
|
||||||
|
@ -53,7 +29,7 @@
|
||||||
"name": "小度音箱接入组件",
|
"name": "小度音箱接入组件",
|
||||||
"type": "biz",
|
"type": "biz",
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
"jarFile": "http-biz-component-0.1.0-SNAPSHOT.jar",
|
"jarFile": "http-biz-component-0.4.0-SNAPSHOT.jar",
|
||||||
"config": "{\"port\":\"8084\"}",
|
"config": "{\"port\":\"8084\"}",
|
||||||
"converter": "",
|
"converter": "",
|
||||||
"state": "stopped",
|
"state": "stopped",
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
version: '3.3'
|
||||||
|
services:
|
||||||
|
ui:
|
||||||
|
image: uncleregan/iotkit-ui:0.3.4
|
||||||
|
container_name: iotkit-ce-ui
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
links:
|
||||||
|
- iotkit:iotkit
|
||||||
|
iotkit:
|
||||||
|
image: iotkits/iotkit:0.4.0
|
||||||
|
container_name: iotkit-cei
|
||||||
|
restart: on-failure
|
||||||
|
ports:
|
||||||
|
- 8086:8086 # API端口
|
||||||
|
- 1883-1890:1883-1890 # 预留
|
||||||
|
- 8000-8010:8000-8010 # 预留
|
|
@ -50,6 +50,8 @@
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>11</source>
|
<source>11</source>
|
||||||
<target>11</target>
|
<target>11</target>
|
||||||
|
<forceJavacCompilerUse>true</forceJavacCompilerUse>
|
||||||
|
<useIncrementalCompilation>false</useIncrementalCompilation>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
@ -97,5 +99,11 @@
|
||||||
<version>0.4.0-SNAPSHOT</version>
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.iotkit</groupId>
|
||||||
|
<artifactId>iot-data-service</artifactId>
|
||||||
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.22</version>
|
<version>1.18.24</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>iot-components</artifactId>
|
||||||
|
<groupId>cc.iotkit</groupId>
|
||||||
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>iot-mqtt-component</artifactId>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<artifactSet>
|
||||||
|
<includes>
|
||||||
|
<include>io.vertx:vertx-core</include>
|
||||||
|
<include>io.vertx:vertx-mqtt</include>
|
||||||
|
<include>io.netty:netty-codec-mqtt</include>
|
||||||
|
<include>org.luaj:luaj-jse</include>
|
||||||
|
</includes>
|
||||||
|
</artifactSet>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>11</source>
|
||||||
|
<target>11</target>
|
||||||
|
<forceJavacCompilerUse>true</forceJavacCompilerUse>
|
||||||
|
<useIncrementalCompilation>false</useIncrementalCompilation>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.vertx</groupId>
|
||||||
|
<artifactId>vertx-core</artifactId>
|
||||||
|
<version>4.2.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.vertx</groupId>
|
||||||
|
<artifactId>vertx-mqtt</artifactId>
|
||||||
|
<version>4.2.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-codec-mqtt</artifactId>
|
||||||
|
<version>4.1.72.Final</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.24</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.7.32</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.luaj</groupId>
|
||||||
|
<artifactId>luaj-jse</artifactId>
|
||||||
|
<version>3.0.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.iotkit</groupId>
|
||||||
|
<artifactId>iot-common</artifactId>
|
||||||
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.iotkit</groupId>
|
||||||
|
<artifactId>iot-component-base</artifactId>
|
||||||
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.iotkit</groupId>
|
||||||
|
<artifactId>iot-data-service</artifactId>
|
||||||
|
<version>0.4.0-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
Loading…
Reference in New Issue