对接阿里云平台
概述
对接阿里云平台代码。
代码
var server = "iot-040a03u8.mqtt.iothub.aliyuncs.com";
var port = 1883;
var pkt_id = 1;
/*********这些参数从阿里云注册设备时获得*******************/
var productKey = "g61qSAcgCqv";
var deviceName = "XY-MD02";
var deviceSecret = "56d882cdd2f802a8a2475e70041e465e";
var clientname = "1234";
var securemode = 3;
var signmethod = "hmacsha1"; //"hmacmd5";
var clientid = clientname + "|securemode="+ securemode +",signmethod=" + signmethod + "|";
var username = deviceName + "&" + productKey;
var content = "clientId" + clientname + "deviceName" + deviceName + "productKey" + productKey;
var password = hmac_sha1(deviceSecret, content).hex(true);
var topic1 = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
var topic2 = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply";
function hmac_sha1(key, data)
{
if(key.length > 64) key = Coder.sha1(key);
else key = Bytes.create(key);
var hkey = Bytes.create(64);
hkey.copy(key);
var ipad = Bytes.create(64 + data.length);
var opad = Bytes.create(64 + 20);
for(var i = 0; i < 64; i++)
{
ipad[i] = hkey[i] ^ 0x36;
opad[i] = hkey[i] ^ 0x5C;
}
ipad.sets(data, 64);
var hash = Coder.sha1(ipad);
opad.copy(hash, 64);
return Coder.sha1(opad, 64);
}
function handleMQTTData(data)
{
//print(JSON.stringify(data));
switch(data.type)
{
case Packet.MQTT.CONNACK:
Net.send(1, Packet.MQTT.subscribe(pkt_id, topic2, 1));
print("aaa");
pkt_id++;
break;
case Packet.MQTT.PUBLISH:
if(data.qos == 1)
Net.send(1, Packet.MQTT.puback(data.id));
break;
}
}
var mqtt = Packet.MQTT.Parser.create(handleMQTTData);
function handleNetEvent(m)
{
switch(m.event)
{
case Net.READY:
print("csq:", Net.csq());
print("syncTime:", Net.syncTime());
var t = Box.getTime();
print(t.year, t.month, t.day,t.hour, t.minute, t.second);
Net.connect(1, server, port);
break;
case Net.CONN_OK:
Net.send(1, Packet.MQTT.connect(clientid, 60, 1, username, password));
Timer.start(1, 20000);
Timer.start(2, 9000);
//Timer.start(3, 30000);
//Timer.start(4, 50000);
break;
case Net.CONN_FAIL:
print("connect failed");
break;
case Net.CONN_CLOSE:
print("connect closed");
Timer.stop(1);
Timer.stop(2);
break;
case Net.RECV:
print("mqtt_data:");
print(m.data.hex());
mqtt.parse(m.data);
break;
}
}
function handleTimerOut(id)
{
switch(id)
{
case 1: //send heartbeat packet
Net.send(1, Packet.MQTT.ping());
Timer.start(1, 30000);
break;
case 2: //send publish packet
var sensor_data = {params:{}};
sensor_data.params.CurrentHumidity = 60;
sensor_data.params.CurrentVoltage = 5;
sensor_data.params.CurrentTemperature = 28;
//{CurrentHumidity:10, CurrentVoltage:1, CurrentTemperature:15, color:10}
var str = JSON.stringify(sensor_data);
Net.send(1, Packet.MQTT.publish(topic1, Bytes.create(str), 1, pkt_id));
pkt_id++;
//Timer.start(2, 11000);
break;
case 3: //send unsubscribe packet
Net.send(1, Packet.MQTT.unsubscribe(pkt_id, topic2));
pkt_id++;
break;
case 4: //send disconnect packet
Net.send(1, Packet.MQTT.disconnect());
break;
}
}
GPIO.set(GPIO.POWER, 1)
Net.init()
while(true)
{
var m = Event.get();
switch(m.msg)
{
case Event.NET_EVENT:
handleNetEvent(m);
break;
case Event.TIMER_OUT:
handleTimerOut(m.id);
break;
}
}
下载代码(右键另存为):aliyun.js