跳转至

对接阿里云平台


概述

对接阿里云平台代码。


代码


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