樹莓派連接阿里雲物聯網平臺-事件(nodejs)

陳拓 [email protected] 2019/12/14-2020/01/02

1. 阿里雲物聯網平臺設置
2. 在樹莓派上安裝Node.js LTS工具包
3. 阿里雲物聯網平臺Node.js SDK
4. 發送溫度數據到阿里雲
5. node.js讀DS18B20數據發送到阿里雲

上面的內容見《樹莓派連接阿里雲物聯網平臺-屬性(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103705694

6. 阿里雲控制LED

上面的內容見《樹莓派連接阿里雲物聯網平臺-服務(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103754860

7. 訂閱Topic

上面的內容見《樹莓派連接阿里雲物聯網平臺-訂閱(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103769449

8. 上報事件

先看參考文檔《阿里雲物聯網平臺基本設置》。

  • 查看我們的產品事件功能定義

事件的標識符:TemperatureSensorExceptional

查看輸出參數:

輸出參數標識符:TemperatureExceptional

  • 修改index.js代碼

pi@raspberrypi:~/PiAliNode/alibabacloud-iot-device-sdk/examples/quickstart $ nano index.js

在setInterval函數中添加事件上報代碼:

setInterval(() => {

    var data = fs.readFileSync('/sys/bus/w1/devices/28-000004d627c6/w1_slave', $

    var i = data.indexOf('t=');

    var temp = data.substring(i+2, data.length)/1000;

    const params = {

      RoomTemp: temp

    };

    console.log(`Post properties: ${JSON.stringify(params)}`);

    device.postProps(

      params,

      (res) => {

      console.log(`postProps:`,res);

    });

    if (temp > 30) {

      device.postEvent("TemperatureSensorExceptional", {

        TemperatureExceptional: temp,

        }, (res) => {

        console.log(`postEvent:${res}`);

      });

    }

  }, 30000);

  • 運行node index

  • 雲端查看

 

Index.js完整代碼

const Gpio = require('/home/pi/node_modules/onoff').Gpio;

const led = new Gpio(17, 'out');

const fs = require('fs');

const iot = require('alibabacloud-iot-device-sdk');

const deviceConfig = require('./device_id_password.json');

const device = iot.device(deviceConfig);

 

device.on('connect', () => {

  console.log('Connect successfully!');

  console.log('Post properties every 30 seconds...');

  device.subscribe('/a14U7TTbz9q/BedroomTemp/user/get');

  setInterval(() => {

var data = fs.readFileSync('/sys/bus/w1/devices/28-000004d627c6/w1_slave', 'utf8');

    var i = data.indexOf('t=');

    var temp = data.substring(i+2, data.length)/1000;

    const params = {

      RoomTemp: temp

    };

    console.log(`Post properties: ${JSON.stringify(params)}`);

    device.postProps(

      params,

      (res) => {

      console.log(`postProps:`,res);

    });

    if (temp > 30) {

      device.postEvent("TemperatureSensorExceptional", {

        TemperatureExceptional: temp,

        }, (res) => {

        console.log(`postEvent:${res}`);

      });

    }

  }, 30000);

 

  device.onService('property/set', (data) => {

    console.log('Received a message: ', JSON.stringify(data));

  });

});

 

device.onService('switch', function (res,reply) {

  console.log('^onService',res);

  paramsStr = JSON.stringify(res.params)

  var stateInfo

  if (paramsStr.indexOf('on') > 0) {

    led.writeSync(1)

    stateInfo = {state:'led on'}

  } else {

    led.writeSync(0)

    stateInfo = {state:'led off'}

  }

  reply({

    "code": 200,

    "data": stateInfo

  });

});

 

device.on('message', (topic, payload) => {

  console.log('topic:',topic);

  if(payload){

    console.log('payload',payload.toString());

  }

});

 

device.on('error', err => {

  console.error('err: ', err);

});

 

參考文檔:

  1. 阿里雲物聯網平臺基本設置
    https://blog.csdn.net/chentuo2000/article/details/103559553
  2. 微信小程序MQTT模擬器 阿里雲物聯網平臺測試
    https://blog.csdn.net/chentuo2000/article/details/102216865
  3. 自己寫微信小程序MQTT模擬器
    https://blog.csdn.net/chentuo2000/article/details/102507560
  4. 樹莓派 Zero W+溫度傳感器DS18B20
    https://blog.csdn.net/chentuo2000/article/details/81051701
  5. 樹莓派GPIO控制
    https://blog.csdn.net/chentuo2000/article/details/81051645
  6. 樹莓派連接阿里雲物聯網平臺-屬性(nodejs)
    https://blog.csdn.net/chentuo2000/article/details/103705694
  7. 樹莓派連接阿里雲物聯網平臺-服務(nodejs)
    https://blog.csdn.net/chentuo2000/article/details/103754860
  8. 樹莓派連接阿里雲物聯網平臺-訂閱(nodejs)
    https://blog.csdn.net/chentuo2000/article/details/103769449
  9. alibabacloud IoT Device SDK for Javascript
    https://github.com/aliyun/alibabacloud-iot-device-sdk

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章