9. AWS IoT Device SDK解説

本ハンズオンで利用したゲートウェイ側のサンプルコードになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var noble = require('noble');
var awsIot = require('aws-iot-device-sdk');
var moment = require('moment');

var deviceName = 'devXX';
var topic = deviceName + '/ginga';
var myAddress = "****";

var device = awsIot.device({
   keyPath: './certs/private.pem',
  certPath: './certs/cert.pem',
    caPath: './certs/root.pem',
  clientId: deviceName,
    region: 'ap-northeast-1'
});

function publish_data(sensorType, value) {
     var record = {
        "device": deviceName,
        "sensor": sensorType,
        "timestamp": moment().toISOString(),
        "value": value
      };
      console.log("Publish: " + message);
      device.publish(topic, message);
}

function temp(data){
  var v1 = parseInt(data[0]);
  var v2 = parseInt(data[1]) / 100;
  publish_data('temp',v1 + v2);
}

function humid(data){
  var v1 = parseInt(data[2]);
  var v2 = parseInt(data[3]) / 100;
  publish_data('humid',v1 + v2);
}

noble.on('stateChange', function(state) {
  if (state === 'poweredOn') {
    noble.startScanning();
  } else {
    noble.stopScanning();
  }
});

noble.on('discover', function(peripheral) {
  noble.stopScanning();
  //console.log('Local Name: ' + peripheral.advertisement.localName);
  if(myAddress == peripheral.address){
      var serviceUUID = peripheral.advertisement.serviceUuids[0];
      console.log('Service UUID: ' + serviceUUID);
      peripheral.connect(function(error){
        if (error) console.log('connect error: ' + error);
        console.log('connected to ' + peripheral.uuid);
        peripheral.discoverServices([serviceUUID],
          function (error, services){
            if (error) console.log('discoverServices error: ' + error);
            console.log('services.length: ' + services.length);
            var service = services[0];
            service.discoverCharacteristics(null,function(error, characteristicss
){
              if (error) console.log('discoverCharacteristics error: ' + error);
              console.log('characteristics.length: ' + characteristics.length);
              characteristics[0].notify(true, function(error){
                if (error) console.log('notify error: ' + error);
                setInterval(function(){
                  characteristics[0].read(function(error, data){
                    if (data){
                      //console.log( data );
                      humid(data);
                      temp(data);
                     }
                   });
                }, 10000);
              });
            });
          }
        );
      });
  } else {
    console.log("not device");
  }
});

device
  .on('connect', function() {
    console.log('Connected to Message Broker.');
  });