SOURCE

var session = {};
var request = {};
var metadata = {};







var result = authorize(session,request,metadata);
console.log(result);
    var Time = new Date().getTime().toString();
    var Nonce = Date.parse(new Date());
    console.log(Time);

function authorize(session, request, metadata) {
    var result = {};

    result.auth = true;
    result.session = {
        "Accesstoken":  metadata["Accesstoken"],
        "refreshToken":  metadata["refreshToken"],

    };
    result.ack = {
        "code":0
    };

    return result;
};

/*map[
    data:[
        map[resourceId:1.7.85
         statusCode:0 
         subjectId:lumi.54ef44100035fd0d 
         time:1658234628838 
         triggerSource:map[time:1658234628 type:41] 
         value:3] 
        map[resourceId:1.9.85 
        statusCode:0 
        subjectId:lumi.54ef44100035fd0d 
        time:1658234628838 
        triggerSource:map[time:1658234628 type:41] 
        value:363]
    ] 
    msgId:AC12212A001E18B4AAC2612538199A101 
    msgType:resource_report 
    openId:376446126697996435569488674817 
    time:1658234629190 
    token:855ac4087a2a4a3c98fe4a22afcc0490
]*/ 

console.log("*****************decode******************");
var decode_request = {
    "body":{
        "data":[
            {
                "subjectId":"lumi.54ef44100035fd0d",
                "resourceId":"1.7.85",
                "value":"3"
            },
            {
                "subjectId":"lumi.54ef44100035fd0d",
                "resourceId":"1.9.85",
                "value":"363"
            }
        ],
        "msgType":"resource_report"
    }
    
}
var result_decode = decode({},decode_request,{},{});
console.log(result_decode);
function decode(session,request,metadata,deviceConfig) {
    var result = {};
    result.ack = {
        "code":0
    };
    
    var relations = {
        "8.0.2008":"Voltage",
        "8.0.2007":"ZigbeeLQI",
        "8.0.2024":"ZigbeeChannel",
        "8.0.2097":"SamplePeriod",
        "0.3.85":"Lux",
        "8.0.9001":"LowBatteryPower",
        "3.1.85":"MonitorStatus",
        "4.1.85":"SwitchStatus",
        "1.7.85":"Brightness",
        "1.9.85":"ColorTemperature",
        "8.0.2030":"PowerRemember",
        "8.0.2025":"WiFiChannel",
        "8.0.2026":"WiFiRSSI",
    };

    var body = request.body;
    var msgType = body.msgType;
    if (msgType != "resource_report") {
        return result;
    }
    var data = body.data;
    result.shadow = {};
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        result.sn = d.subjectId;
        let key = relations[d.resourceId];
        if (key != undefined) {
            if(key == "SwitchStatus") {
                result.shadow[key] = d["value"];
            } else {
                result.shadow[key] = Number(d["value"]);
            }
        }
    }


    return result;
}

var resp = {
    "result":{
        "data":[
            {
                "did":"111",
                "model":"aaa",
                "deviceName":"a1",
                "state":1
            },
            {
                "did":"222",
                "model":"bbb",
                "deviceName":"b2",
                "state":1
            },
            {
                "did":"333",
                "model":"ccc",
                "deviceName":"c3",
                "state":1
            }
        ]       
    }
};
var metadata = {
    "aaa":"aaaaaaaaa",
    "bbb":"bbbbbbbbb",
    "ccc":"ccccccccc"
};
var res = response({},{},resp,metadata);
console.log(res);
// deviceName:网关 M2 did:lumi1.54ef442b7a4d model:lumi.gateway.iragl5 state:1
function response(session,request,response,metadata) {
    var result = {};
    var data = response["result"]["data"];
    var devices = [];
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        let device = {
            "sn":d["did"],
            "category":metadata[d["model"]],
            "deviceName":d["deviceName"],
            "online":d["state"],
        };
        devices.push(device);
    }

    result.devices = devices;
    
    return result;
}
var metadata = {
    "Appid": "sffdas",
    "Accesstoken": "fasfd",
    "AppKey": "fafdeefdf",
    "Keyid": "ffsjlkfj",
}

function prerequest_getHeaders(session,info,metadata) {
    var time = new Date().getTime().toString();
    var nonce = new Date().getTime().toString();
    var Appid = metadata["Appid"];
    var Accesstoken = metadata["Accesstoken"];
    var Keyid = metadata["Keyid"];
    var AppKey = metadata["AppKey"];

    var preSign = "";
    if (Accesstoken != null && Accesstoken != "" && Accesstoken != undefined) {
        preSign = "Accesstoken=" + Accesstoken + "&";
    }
    preSign = preSign + "Appid=" + Appid + "&" + "Keyid=" + Keyid + "&" + "Nonce=" + nonce + "&" + "Time=" + time + AppKey;
    var Sign= CryptoJS.MD5(preSign.toLowerCase()).toString();

    var result = {};
    result.session = {
        "Time":time,
        "Nonce":nonce,
        "Sign":Sign,
        "body":body,
    };

    return result;
}

var info = {
    "to" : "123",
    "d": {
        "SwitchStatus": "1",
        "sn": "123",
        "time": 123456789
    }
}

console.log("*******************prerequest_getHeaders_body*********************")
var result_prerequest_getHeaders_body = prerequest_getHeaders_body({},info,metadata);
console.log(result_prerequest_getHeaders_body);

function prerequest_getHeaders_body(session,info,metadata) {
    var relations = {
        "Voltage":"8.0.2008",
        "ZigbeeLQI":"8.0.2007",
        "ZigbeeChannel":"8.0.2024",
        "SamplePeriod":"8.0.2097",
        "Lux":"0.3.85",
        "LowBatteryPower":"8.0.9001",
        "MonitorStatus":"3.1.85",
        "SwitchStatus":"4.1.85",
        "Brightness":"1.7.85",
        "ColorTemperature":"1.9.85",
        "PowerRemember":"8.0.2030",
        "WiFiChannel":"8.0.2025",
        "WiFiRSSI":"8.0.2026",
    };

    var time = new Date().getTime().toString();
    var nonce = new Date().getTime().toString();
    var Appid = metadata["Appid"];
    var Accesstoken = metadata["Accesstoken"];
    var Keyid = metadata["Keyid"];
    var AppKey = metadata["AppKey"];

    var preSign = "";
    if (Accesstoken != null && Accesstoken != "" && Accesstoken != undefined) {
        preSign = "Accesstoken=" + Accesstoken + "&";
    }
    preSign = preSign + "Appid=" + Appid + "&" + "Keyid=" + Keyid + "&" + "Nonce=" + nonce + "&" + "Time=" + time + AppKey;
    var Sign= CryptoJS.MD5(preSign.toLowerCase()).toString();
    //var Sign= (preSign.toLowerCase()).toString();
    var result = {};
    var sn = info.to;
    var resources = [];
    for (const k in info.d) {
        if(relations[k] != undefined) {
            let r = {
                "resourceId": relations[k],
                "value": info.d[k]
            };
            resources.push(r);
        } 
    }
    var body = {
        "intent": "write.resource.device",
        "data": [
            {
            "subjectId": sn,
            "resources": resources
            }
        ]
    };
    result.session = {
        "Time":time,
        "Nonce":nonce,
        "Sign":Sign,
        "body":body,
    };

    return result;
}


console.log("*******************downLink_getHeaders_body*********************")
var result_prerequest_getHeaders_body = prerequest_getHeaders_body({},info,metadata);
console.log(result_prerequest_getHeaders_body);

function downLink_getHeaders_body(session,info,metadata) {
    var relations = {
        "Voltage":"8.0.2008",
        "ZigbeeLQI":"8.0.2007",
        "ZigbeeChannel":"8.0.2024",
        "SamplePeriod":"8.0.2097",
        "Lux":"0.3.85",
        "LowBatteryPower":"8.0.9001",
        "MonitorStatus":"3.1.85",
        "SwitchStatus":"4.1.85",
        "Brightness":"1.7.85",
        "ColorTemperature":"1.9.85",
        "PowerRemember":"8.0.2030",
        "WiFiChannel":"8.0.2025",
        "WiFiRSSI":"8.0.2026",
    };

    var time = new Date().getTime().toString();
    var nonce = new Date().getTime().toString();
    var Appid = metadata["Appid"];
    var Accesstoken = metadata["Accesstoken"];
    var Keyid = metadata["Keyid"];
    var AppKey = metadata["AppKey"];

    var preSign = "";
    if (Accesstoken != null && Accesstoken != "" && Accesstoken != undefined) {
        preSign = "Accesstoken=" + Accesstoken + "&";
    }
    preSign = preSign + "Appid=" + Appid + "&" + "Keyid=" + Keyid + "&" + "Nonce=" + nonce + "&" + "Time=" + time + AppKey;
    var Sign= CryptoJS.MD5(preSign.toLowerCase()).toString();
    //var Sign= (preSign.toLowerCase()).toString();
    var result = {};
    var sn = info.to;
    var resources = [];
    for (const k in info.d) {
        if(relations[k] != undefined) {
            let r = {
                "resourceId": relations[k],
                "value": info.d[k]
            };
            resources.push(r);
        } 
    }
    var body = {
        "intent": "write.resource.device",
        "data": [
            {
            "subjectId": sn,
            "resources": resources
            }
        ]
    };
    result.session = {
        "Time":time,
        "Nonce":nonce,
        "Sign":Sign,
        "body":body,
    };

    return result;
}


function prerequest_getHeaders_body_refreshToken(session,info,metadata) {

    var time = new Date().getTime().toString();
    var nonce = new Date().getTime().toString();
    var Appid = metadata["Appid"];
    var Accesstoken = metadata["Accesstoken"];
    var Keyid = metadata["Keyid"];
    var AppKey = metadata["AppKey"];

    var preSign = "";
    if (Accesstoken != null && Accesstoken != "" && Accesstoken != undefined) {
        preSign = "Accesstoken=" + Accesstoken + "&";
    }
    preSign = preSign + "Appid=" + Appid + "&" + "Keyid=" + Keyid + "&" + "Nonce=" + nonce + "&" + "Time=" + time + AppKey;
    //var Sign= CryptoJS.MD5(preSign.toLowerCase()).toString();
    var Sign= (preSign.toLowerCase()).toString();
    var result = {};
    var body = {
        "intent": "config.auth.refreshToken",
        "data": {
            "refreshToken": metadata["refreshToken"]
        }
    };
    result.session = {
        "Time":time,
        "Nonce":nonce,
        "Sign":Sign,
        "body":body,
    };

    return result;
}

console.log("*************************")
var resp3 = {
    "result:":[
        {
            "timeStamp": 1657868370064,
            "resourceId": "1.7.85",
            "value": "4",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "4.1.85",
            "value": "0",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1654757654063,
            "resourceId": "8.0.2030",
            "value": "0",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "8.0.2007",
            "value": "129",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "1.9.85",
            "value": "370",
            "subjectId": "lumi.54ef44100035fd0d"
        }
    ]
};
function response22(session,request,response,metadata) {
    var result = {};
    var data = response["result"];
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        let device = {
            "sn":d["did"],
            "category":metadata[d["model"]],
            "deviceName":d["deviceName"],
            "online":d["state"],
        };
        devices.push(device);
    }

    result.devices = devices;
    
    return result;
}

var resp_M2Properties = {
    "result": [
        {
            "timeStamp": 1658082213125,
            "resourceId": "8.0.2024",
            "value": "15",
            "subjectId": "lumi1.54ef442b7a4d"
        },
        {
            "timeStamp": 1654669804355,
            "resourceId": "8.0.2025",
            "value": "8",
            "subjectId": "lumi1.54ef442b7a4d"
        },
        {
            "timeStamp": 1657675814662,
            "resourceId": "8.0.2026",
            "value": "0",
            "subjectId": "lumi1.54ef442b7a4d"
        }
    ]
}

var result_M2Properties = response_getM2Properties({},{},resp_M2Properties,{});
console.log(result_M2Properties);

function response_getM2Properties(session,request,response,metadata) {
    var result = {};
    var relation = {
        "8.0.2024":"ZigBeeChannel",
        "8.0.2025":"WiFiChannel",
        "8.0.2026":"WiFiRSSI",
    };

    var data = response["result"];
    var shadow = {};
    
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        result.sn = d["subjectId"];
        shadow[relation[d["resourceId"]]] = Number(d["value"]);
    }
    result.shadow = shadow;

    return result;
}

var resp_LightProperties = {
    "result": [
        {
            "timeStamp": 1657868370064,
            "resourceId": "1.7.85",
            "value": "4",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "4.1.85",
            "value": "0",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1654757654063,
            "resourceId": "8.0.2030",
            "value": "0",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "8.0.2007",
            "value": "129",
            "subjectId": "lumi.54ef44100035fd0d"
        },
        {
            "timeStamp": 1657868370064,
            "resourceId": "1.9.85",
            "value": "370",
            "subjectId": "lumi.54ef44100035fd0d"
        }
    ]
}

var result_LightProperties = response_getLightProperties({},{},resp_LightProperties,{});
console.log("****************result_LightProperties**************");
console.log(result_LightProperties);

function response_getLightProperties(session,request,response,metadata) {
    var result = {};
    var relation = {
        "4.1.85":"SwitchStatus",
        "1.7.85":"Brightness",
        "1.9.85":"ColorTemperature",
        "8.0.2007":"ZigbeeLQI",
        "8.0.2030":"PowerRemember"
    };

    var data = response["result"];
    var shadow = {};
    
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        result.sn = d["subjectId"];
        let key = relation[d["resourceId"]];
        if(key == "SwitchStatus") {
            shadow[key] = d["value"];
        } else {
            shadow[key] = Number(d["value"]);
        }
    }
    result.shadow = shadow;

    return result;
}


var resp_SensorProperties = {
    "result": [
        {
            "timeStamp": 1658112610224,
            "resourceId": "0.4.85",
            "value": "127",
            "subjectId": "lumi.158d0007e4faf6"
        },
        {
            "timeStamp": 1658082471018,
            "resourceId": "8.0.2008",
            "value": "3015",
            "subjectId": "lumi.158d0007e4faf6"
        },
        {
            "timeStamp": 1658113181708,
            "resourceId": "3.1.85",
            "value": "1",
            "subjectId": "lumi.158d0007e4faf6"
        },
        {
            "timeStamp": 1658041978872,
            "resourceId": "8.0.2007",
            "value": "111",
            "subjectId": "lumi.158d0007e4faf6"
        },
        {
            "timeStamp": 1658112610224,
            "resourceId": "0.3.85",
            "value": "127",
            "subjectId": "lumi.158d0007e4faf6"
        },
        {
            "timeStamp": 1654757316768,
            "resourceId": "8.0.2041",
            "value": "52",
            "subjectId": "lumi.158d0007e4faf6"
        }
    ]
}

var result_SensorProperties = response_getSensorProperties({},{},resp_SensorProperties,{});
console.log("**************result_SensorProperties*****************")
console.log(result_SensorProperties);

function response_getSensorProperties(session,request,response,metadata) {
    var result = {};
    var relation = {
        "8.0.2008":"Voltage",
        "8.0.2007":"ZigbeeLQI",
        "8.0.2024":"ZigbeeChannel",
        "8.0.2097":"SamplePeriod",
        "0.3.85":"Lux",
        "8.0.9001":"LowBatteryPower",
        "3.1.85":"MonitorStatus"
    };

    var data = response["result"];
    var shadow = {};
    
    for (let i=0;i<data.length;i++) {
        let d = data[i];
        result.sn = d["subjectId"];
        let key = relation[d["resourceId"]];
        if(key == undefined) {
            continue;
        } else if(key == "LowBatteryPower") {
            shadow[key] = d["value"];
        } else {
            shadow[key] = Number(d["value"]);
        }
    }
    result.shadow = shadow;

    return result;
}

function encode(session,command,metadata,deviceConfig) {
    var result = {};

    var body = {
        "intent": "write.resource.device",
        "data": [
            {
            "subjectId": "lumi.54ef44100035fd0d",
            "resources": [
                {
                "resourceId": "4.1.85",
                "value": "0"
                }
            ]
            }
        ]
    };
    


    return result;
}
console 命令行工具 X clear

                    
>
console