SOURCE

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

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

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

    return result;


}

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 session_2 = {
    "Accesstoken":"39cadd1b74cd74d46f660a96bcf24e1e",
};
var metadata_2 = {
    "Accesstoken":"39cadd1b74cd74d46f660a96bcf24e1e",
    "AppKey":"kd0uroksvglsti4t1q4websj07mf4pic",
     "Appid":"984408497394700288533b04",
      "Keyid":"K.984408497541500928" ,
};
var command_2 = {
    "command":"shadow",
     "d":{
         "SwitchStatus":1, 
         "sn":"lumi.54ef44100035fd0d"
        },
         "detached":1,
          "from":"svc.devshadow#shadow", 
          "id":"2.0220816041e+10",
           "method":"set",
            "to":"lumi.54ef44100035fd0d"
            
};
var result_2 = encode(session_2,command_2,metadata_2,{});
console.log(result_2);
function encode(session, command, metadata, deviceConfig) {
    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"];
    console.log("appid--"+Appid);
    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 = command.to;
    var resources = [];
    for (const k in command.d) {
        if(relations[k] != undefined) {
            let r = {
                "resourceId": relations[k],
                "value": command.d[k]
            };
            resources.push(r);
        } 
    }
    var body = {
        "intent": "write.resource.device",
        "data": [
            {
            "subjectId": sn,
            "resources": resources
            }
        ]
    };

    var url="https://open-cn.aqara.com/v3.0/open/api";
	var headers = {
				"Accesstoken": Accesstoken,
				"Appid": Appid,
				"AppKey": AppKey,
				"Keyid": Keyid,
				"Time":time,
                "Nonce":nonce,
                "Sign":Sign
	};

    var str = JSON.stringify(body);
    console.log("str--"+str);
    var bb = JSON.parse(str);
    console.log("bb"+bb);
    console.log(bb);

    var resp = HTTP.Post(url,headers,body);
    console.log(resp);

    return result;

}

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

    if (request.method == "set") {
        return result;
    }

    var shadow = {};
    // set shadow


    result.shadow = shadow;
    return result;
}

// ******************平台命令下发222222222*****************

var result_2 = encode(session_2,command_2,metadata_2,{});
console.log(result_2);
function encode(session, command, metadata, deviceConfig) {
    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"];
    console.log("appid--"+Appid);
    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 = {};
    var sn = command.to;
    var resources = [];
    for (const k in command.d) {
        if(relations[k] != undefined) {
            let r = {
                "resourceId": relations[k],
                "value": command.d[k]
            };
            resources.push(r);
        } 
    }
    var body = {
        "intent": "write.resource.device",
        "data": [
            {
            "subjectId": sn,
            "resources": resources
            }
        ]
    };

    var url="https://open-cn.aqara.com/v3.0/open/api";
	var headers = {
				"Accesstoken": Accesstoken,
				"Appid": Appid,
				"AppKey": AppKey,
				"Keyid": Keyid,
				"Time":time,
                "Nonce":nonce,
                "Sign":Sign
	};

    var str = JSON.stringify(body);
    console.log("str--"+str);
    var bb = JSON.parse(str);
    console.log("bb"+bb);
    console.log(bb);

    var apiConfig = {
			"url": "https://open-cn.aqara.com/v3.0/open/api",
			"method": "POST",
			//"params": {},
			"headers": headers,
            "body":bb
	};

    result.session = {
        "apiConfig":apiConfig,
        "body":body,
    };
    result.apiConfig = apiConfig;

    //var resp = HTTP.Post(url,headers,body);
    //console.log(resp);

    return result;

}

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

    if (request.method == "set") {
        return result;
    }

    var shadow = {};
    // set shadow


    result.shadow = shadow;
    return result;
}

// ******************自定义接口-获取设备***********************
function prerequest(session, command, 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
    };

    return result;
}

// **************************
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;

}
console 命令行工具 X clear

                    
>
console