IoT Hands-On Powered by OpenBlocks IoT SORACOM AWS / Documentation 1.0.0 Kohei MATSUSHITA 2016 05 20
Contents 1 3 1.1................................................. 3 1.2............................................ 4 1.3 BX1 Wi-Fi AP SORACOM Air(3G ).................. 6 1.4 BX1......................................... 14 1.5 Amazon Elasticsearch Service...................... 25 1.6 AWS IoT............................................. 31 1.7 BX1 AWS IoT........................................ 44 1.8............................................. 51 1.9.................................................. 51 1.10 : SORACOM Beam AWS IoT.................. 53 1.11 : AWS IoT Thing Shadow.................... 66 1.12................................................. 70 i
ii
Auhtor: Kohei MATSUSHITA Contents 1
Chapter 1 OpenBlocks IoT BX1 ( BX1) FWM8BLZ02 SORACOM Air AWS IoT Amazon Elasticsearch Service( Amazon ES) Kibana OpenBlocks IoT BX1 ( BX1) FWM8BLZ02 SORACOM Air AWS IoT Amazon Elasticsearch Service ( Amazon ES) Kibana SVG 1. BX1 Wi-Fi AP SORACOM Air(3G ) 3
2. BX1 3. Amazon Elasticsearch Service 4. AWS IoT 5. BX1 AWS IoT 6. 7. : SORACOM Beam AWS IoT 8. : AWS IoT Thing Shadow PDF (5.5MB P74) AWS Management Console (FTDI ) AWS IoT (AWS IoT ~ ~ ) AWS Amazon Web Services http://aws.amazon.com/jp/register-flow/ SORACOM Air SORACOM Air SORACOM SIM SIM https://dev.soracom.io/jp/start/console/ ( ) 4 Chapter 1.
( ) OK * SORACOM Air <minisim > x 1 ( ) * OpenBlocks IoT BX1 x 1 * BX1 USB x 1 * FWM8BLZ02 ( ) x 1 < > PC * Wi-Fi * USB (A 1 ) * FTDI * (e.g. TeraTerm, GNU screen) * curl wget HTTP * Chrome (Internet Explorer NG ) AWS (SORACOM Air ) ( ) : curl BX1 ( BX1 3G EC2 ) AWS SORACOM SORACOM Air SORACOM Air BX1 Wi-Fi AP SORACOM Air(3G ) 1.2. 5
BX1 Wi-Fi AP SORACOM Air(3G ) : ping WebUI 3G ; SVG BX1 ( ON/OFF SIM ) BX1 ON USB ( ) 4 : INIT OS SIM ON SIM 6 Chapter 1.
(OpenBlocks IoT Family WEB UI P7 ) (LED ) BX1 STATUS LED LED 1.3. BX1 Wi-Fi AP SORACOM Air(3G ) 7
(OpenBlocks IoT Family WEB UI P7 ) Web (WebUI) : BX1 PC BX1 Wi-Fi SORACOM Air SORACOM Air PC =[Wi-Fi]=> BX1 =[SORACOM Air]=> Dropbox OFF BX1 Wi-Fi BX1 BX1 Wi-Fi PC SSID SSID: iotfamily_bx1 Password: openblocks 802.11g, WPA-PSK 8 Chapter 1.
BX1 BX1 F2A00788 ( SSID iotfamily_f2a00788 ) WebUI BX1 Wi-Fi URL WebUI http://192.168.254.254:880 1.3. BX1 Wi-Fi AP SORACOM Air(3G ) 9
WebUI ( ) ID Password iot ( ) iot ( ) 10 Chapter 1.
Wi-Fi AP SORACOM Air(3G ) ( [ ] - [ ] ) Wi-Fi / Wi-Fi / SSID Wi-Fi / Wi-Fi / Wi-Fi / / APN / / : < > ( F2A00788) openblocks.local < > ( :F2A00788 8 ) (0 10 / A~E 11) iotfamily_< > ( : iotfamily_f2a00788) WPA-PSK AES openblocks soracom.io sora sora Wi-Fi 1.3. BX1 Wi-Fi AP SORACOM Air(3G ) 11
( ) : WPA2-PSK OS APN BX1 1. WebUI [ ] - [ ] 2. ( ) : 5 ping BX1 3G WebUI ping 1. WebUI [ ] - [ ] 12 Chapter 1.
2. : metadata.soracom.io BX1 1. SIM 2. WebUI 1.3. BX1 Wi-Fi AP SORACOM Air(3G ) 13
BX1 : FWM8BLZ02( ) BX1 WebUI ; 14 Chapter 1.
SVG BX1 ON ON 1.4. BX1 15
Bluetooth 1. WebUI [ ] - [ ] 2. Bluetooth [ ] 16 Chapter 1.
1. WebUI [ ] - [Bluetooth ] 2. Bluetooth LE [ ] 3. [ ] : Bluetooth Bluetooth LE 1.4. BX1 17
Device Name = FWM8BLZ02 Device Address (= MAC Address) 18 Chapter 1.
WebUI 1.4. BX1 19
BX1 BX1 BX1 1. WebUI [ ] - [ ] 2. PD Handler BLE [ ] : PD Handler < > 20 Chapter 1.
: BX1 1. WebUI [ ] - [ ] 2. (local) 1.4. BX1 21
dev_le_0000001 (ms) 1000 local [ ] 22 Chapter 1.
local WebUI [ ] - [ ] [ ] [ ] [ ] 1.4. BX1 23
Amazon Elasticsearch Service WebUI [ ] - [ ] pd-handler-stdout.log pd-emitter.log <-> BX1 BX1 <-> (local AWS IoT ) JSON 24 Chapter 1.
pd-handler-stdout.log timeout:... BLE 1. ( ) 2. ( ) Amazon Elasticsearch Service : Amazon Elasticsearch Service Kibana Amazon Elasticsearch Service Amazon ES ; 1.5. Amazon Elasticsearch Service 25
SVG Amazon ES Get started ( Create a new domain) Amazon ES ( OK ) Elasticsearch domain name awsiot-handson-es [Next] Instance type t2.micro.elasticsearch Storage type EBS [Next] Set the domain access policy to Allow open access to the domain [Next] [Confirm and create] : Allow open access to the domain (= ) : Amazon ES 10 (AWS IoT ) Elasticsearch Endpoint Kibana URL Amazon ES ES Endpoint Kibana URL 26 Chapter 1.
Amazon ES : curl (Windows ) date 2016-05-19T10:10:50+0900 ${YOUR_ES_ENDPOINT} Amazon ES Endpoint curl -X PUT ${YOUR_ES_ENDPOINT}/es-test/es0/1 -d "{\"deviceid\":\"es-test0\",\"field1\":1,\"@timestam Windows : curl -X PUT %YOUR_ES_ENDPOINT%/es-test/es0/1 -d "{""deviceid"":""es-test0"",""field1"":1,""@timestamp 1.5. Amazon Elasticsearch Service 27
{"_index":"es-test","_type":"es0","_id":"1","_version":1,"created":true} Kibana Index Amazon ES Kibana URL Index name or pattern es-test Time-field name @timestamp Create 28 Chapter 1.
Discover 1.5. Amazon Elasticsearch Service 29
AWS IoT ( ) $ curl -X DELETE ${YOUR_ES_ENDPOINT}/es-test ( ) Time Picker Time Filter Last 30 Days 30 Chapter 1.
AWS IoT : AWS IoT MQTT(AWS IoT ) ; 1.6. AWS IoT 31
SVG AWS IoT 1. IAM 2. AWS IoT 3. 4.,, 5. IAM AWS IoT AWS IoT Amazon Elasticsearch Service IAM [ ] awsiot_handson_put_to_es AWS => AWS IoT < > 32 Chapter 1.
1. IAM awsiot_handson_put_to_es 2. [ ] - [ ] 3. [ ] - [ ] 4. [ ] [ ] awsiot_handson_put_to_es_adhoc_policy AWS_ACCOUNT_ID AWS AccountID { } "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "es:eshttpput", "Resource": [ "arn:aws:es:ap-northeast-1:aws_account_id:domain:awsiot-handson-es/*" ] } _ AWS IoT AWS IoT : IAM 1. AWS IoT Create a resource Create a policy 2. Add statement Create Name awsiot_handson_policy Action iot:* Resource * Allow Add statement 1.6. AWS IoT 33
AWS IoT Thing shadow 1. AWS IoT Create a thing 2. Create Name awsiot_handson_thing0 Create 34 Chapter 1.
,, AWS IoT ( ) AWS IoT ( )/ ( ) AWS IoT AWS IoT : AWS IoT 80% 1. AWS IoT Create a certiicate 2. 1-CLick certificate create < INACTIVE > 1.6. AWS IoT 35
3. Download private key Download certificate.pem.key.pem.crt : private key 1. ( ) 2. [Actions] [Attach a policy] 3. Policy name awsiot_handson_policy Attach 1. ( ) 2. [Actions] [Attach a thing] 3. Thing name awsiot_handson_thing0 Attach 1. ( ) 2. [Actions] [Activate] < ACTIVE > Actions 36 Chapter 1.
AWS IoT MQTT REST 1. AWS IoT Create a rule 2. Add action Create 1.6. AWS IoT 37
Name awsiot_handson_rule0 Description awsiot_handson_rule0 SQL version 2016-03-23-beta Attribute * Topic filter awsiot_handson/sensor0 Condition < > Choosen an action Amazon Elasticsearch Service Domain name awsiot-handson-es ID ${newuuid()} Index awsiot_handson Type fwm8blz02 Role awsiot_handson_put_to_es Add action 38 Chapter 1.
: Amazon Elasticsearch Service Endpoint https://null Amazon ES 1.6. AWS IoT 39
AWS IoT MQTT AWS IoT MQTT 1. AWS IoT MQTT Client 2. Generate client ID <Client ID > 3. Connect 4. Publish to topic 5. Publish Publish awsiot_handson/sensor0 topic Payload {"state":{"reported":{"deviceid":"awsiot-test0","field1":3,"time":"2016-05-19t10: 40 Chapter 1.
Kibana payload : Amazon Elasticsearch Service es-test Index Index awsiot_handson Kibana Settings awsiot_handson Index 1.6. AWS IoT 41
BX1 AWS IoT AWS IoT CloudWatch 42 Chapter 1.
Certificate Private key AWS IoT AWS IoT 1. 2.Deactivate 1. 2. [Detail] dettach Deactivate 1. ( ) 2. [Actions] [Deactivate] < INACTIVE > 1.6. AWS IoT 43
Rule Elasticsearch Service AWS IoT Elasticsearch Service Kibana Index es-test BX1 AWS IoT : AWS IoT Amazon ES Kibana ; SVG AWS IoT (Certificate) <.pem.crt> (PrivateKey) <.pem.key> 44 Chapter 1.
XXXXXXX.iot.REGION.amazonaws.com AWS CLI aws iot describe-endpoint AWS IoT Things REST API endpoint : URL BX1 ( _ ) 1.7. BX1 AWS IoT 45
BX1 AWS IoT 3 BX1 1. WebUI [ ] - [ ] 2. 3 / AWS IoT 1. WebUI [ ] - [ ] 2. AWS IoT ( ) 3. root : 3 < URL> /var/webui/upload_dir/verisign-class_3-public-primary-certification-authority-g5 46 Chapter 1.
BX1 /var/webui/upload_dir/ / AWS IoT 1. dev_le_0000001 AWSIOT ( ) 2. (AWS IoT) (AWS IoT) awsiot_handson/sensor0 /var/webui/upload_dir/<.pem.crt > /var/webui/upload_dir/<.pem.key > 1.7. BX1 AWS IoT 47
AWS IoT Amazon ES Kibana 48 Chapter 1.
Kibana 1.7. BX1 AWS IoT 49
1 1. (pd-handler-stdout.log ) 2. 3G (ping ) 3. AWS IoT (CloudWatch ) AWS IoT ACTIVE 50 Chapter 1.
Amazon Elasticsearch Service PUT 4. Amazon Elasticsearch Service PUT (CloudWatch ) BX1 AWS IoT WebUI [ ] - [ ] pd-handler-stdout.log <-> BX1 pd-emitter.log BX1 <-> (local AWS IoT ) AWS AWS AWS IoT 1. 2. Deactivate IAM Amazon ES ( ) AWS IoT Amazon Elasticsearch Service : SORACOM Beam AWS IoT : SORACOM Beam AWS IoT : AWS IoT Thing Shadow : AWS IoT Thing Shadow 1.8. 51
BX1 JSON AWS IoT Rule Engine Lambda (jq ) FWM8BLZ02 { } "deviceid": "e73a40839d8a", "time": "2016-03-09T18:15:53.764+0900", "temperature": 27.22, "accelx": 0.092, "accely": -0.952, "accelz": -0.113 // BX1 ID (BX1 ) // (BX1 ) // // X G // Y G // Z G BX1 AWSIOT {state: {reported: DATA}} AWS IoT Device Shadow { } "state": { "reported": { "deviceid": "e73a40839d8a", "time": "2016-03-09T18:15:53.764+0900", "temperature": 27.22, "accelx": 0.092, "accely": -0.952, "accelz": -0.113 } } Texas Instruments / SensorTag CC2541DK { "deviceid": "5c313ec027e1", // BX1 ID (BX1 ) "humidity": 40.7, // % "temperature": 28.6, // ( ) "objecttemp": 23.8, // "ambienttemp": 28.4, // "gyrox": -1.4, // (X ) deg/s < > "gyroy": 4, // (Y ) deg/s "gyroz": 0.2, // (Z ) deg/s "pressure": 1015.6, // hpa "accelx": 0.1, // (X ) G "accely": 0.3, // (Y ) G "accelz": 3.8, // (Z ) G "magx": -53.9, // (X ) µt < > "magy": -5.2, // (Y ) µt "magz": 102.7, // (Z ) µt "time": "2015-11-19T10:29:20.529+0900" // (BX1 ) } 52 Chapter 1.
BX1 AWSIOT {state: {reported: DATA}} AWS IoT Device Shadow { } "state": { "reported": { "deviceid": "5c313ec027e1", "humidity": 40.7, "temperature": 28.6, "objecttemp": 23.8, "ambienttemp": 28.4, "gyrox": -1.4, "gyroy": 4, "gyroz": 0.2, "pressure": 1015.6, "accelx": 0.1, "accely": 0.3, "accelz": 3.8, "magx": -53.9, "magy": -5.2, "magz": 102.7, "time": "2015-11-19T10:29:20.529+0900" } } BX1 BX1 USB FTDI Windows / Mac OS X Linux ID Password root 0BSI0T ( ) e.g.) screen screen /dev/ttyusb0 115200 : SORACOM Beam AWS IoT : BX1 AWS IoT MQTT AWS IoT Amazon ES ; 1.10. : SORACOM Beam AWS IoT 53
SORACOM Beam IoT Beam (2016 5 ) ( ) SORACOM Beam BX1 AWS IoT AWS IoT ( 3 ) BX1 BX1 SORACOM SORACOM Beam AWS IoT Amazon Elasticsearch Service Kibana BX1 SORACOM Beam BX1 1. AWS IoT MQTT payload 54 Chapter 1.
2. MQTT < >/< ID(MQTT)> ID 1. BX1: AWS IoT 2. AWS: AWS IoT 3. SORACOM: X.509 4. SORACOM: SIM Beam 5. SORACOM: SIM 6. BX1: SORACOM Beam(MQTT) BX1: AWS IoT AWS IoT 1. WebUI [ ] - [ ] 2. AWS IoT 3. [ ] AWS IoT (BX1 ) Kibana : AWS IoT AWS: AWS IoT AWS IoT BX1 MQTT awsiot_handson/sensors/< ID(MQTT)> AWS IoT Name awsiot_handson_rule1 Description awsiot_handson_rule1 SQL version 2016-03-23-beta Attribute * Topic filter awsiot_handson/sensors/# Condition < > Choosen an action Amazon Elasticsearch Service Domain name awsiot-handson-es ID ${newuuid()} Index awsiot_handson_w_beam Type fwm8blz02 Role awsiot_handson_put_to_es 1.10. : SORACOM Beam AWS IoT 55
SORACOM: X.509 [ ] - [ ] - [ ] ID AWSIoT_cert_0 AWSIoT cert 0 X.509 (key) <CertID>-private.pem.key (cert) <CertID>-certificate.pem.crt CA VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem 56 Chapter 1.
[ ] 1.10. : SORACOM Beam AWS IoT 57
: SORACOM: SIM Beam SIM [ ] - [ ] mqtt2awsiot 58 Chapter 1.
[ ] SORACOM Beam [ ] - [mqtt2awsiot] - [SORACOM Beam ] [ ] [MQTT ] AWS IoT / MQTTS / <AWS IoT > / 8883 / < > / < > / ON / AWSIoT_cert_0 (AWSIoT cert 0) 1.10. : SORACOM Beam AWS IoT 59
[ ] 60 Chapter 1.
SORACOM: SIM [SIM ] mqtt2awsiot SIM [ ] - [ ] mqtt2awsiot [ ] 1.10. : SORACOM Beam AWS IoT 61
SIM beam.soracom.io MQTT AWS IoT X.509 MQTTS BX1: SORACOM Beam(MQTT) BX1 AWS IoT MQTTS beam.soracom.io MQTT / AWS IoT OFF MQTT BX1 WebUI [ ] - [ ] 1. MQTT [ ] 62 Chapter 1.
[sec] 2 beam.soracom.io 1883 QoS 1 ID bx1-mqtt-client0 awsiot_handson/sensors < > < > TCP 1.10. : SORACOM Beam AWS IoT 63
/ dev_le_0000001 MQTT 64 Chapter 1.
ID(MQTT) ID(AWS IoT) ( ) Kibana awsiot_handson_w_beam Index SORACOM Beam (BX1) AWS IoT SORACOM 1. SIM 2. SIM 3. AWS 1. Amazon Elasticsearch 2. AWS IoT 1.10. : SORACOM Beam AWS IoT 65
3. IAM SORACOM Beam (2016 5 ) 1. SORACOM: 2. AWS: AWS IoT AWS CloudWatch : AWS IoT Thing Shadow : Thing Shadow AWS IoT Thing Shadow https://s3-ap-northeast-1.amazonaws.com/ma2shita/patlite_control_w_awsiot.html 66 Chapter 1.
ON/OFF 1. ON/OFF 2. 1.11. : AWS IoT Thing Shadow 67
Web Browser Patlite <NHS-3FB1> BX1 SNMP 68 Chapter 1.
* / : SNMP BX1 AWS IOT MQTTS * : AWS IoT X.509 * : X.509 AWS IoT policy AWS IoT Web Browser Websocket * : (Cognito Unauth(=Anonymous) ) * : Cognito Web Browser IAM AWS IoT( data ) BX1 2 * reporter.rb Patlite AWS IoT reported * commander.rb /update/delta Patlite Web Browser Javascript * patlite_control_w_awsiot.html ( ) 1. /update/documents 2. Web Browser AWS IoT desired reporter.rb /update/documents Web Browser Web Browser /update/delta Patlite Thing Shadow AWS IoT MQTT Thing Shadow 1 Thing Shadow /update/delta / (=reported) (=desired) Thing Shadow (e.g. AWS IoT ) commander.rb reporter.rb 1.11. : AWS IoT Thing Shadow 69
Patlite reporter.rb commander.rb reporter.rb Flow: Fetch state from real-device commander.rb Flow: Execute command to real-device <NHS-3FB1> SNMP reporter.rb 1 RS-232C I/F I/F 2 1 2 TCP AWS IoT MQTT over WebSocket Cognito Unauth Developers.IO Paho - Open Source messaging for M2M dwyl/learn-aws-iot: Learn how to use Amazon Web Services Internet of Things (IoT) service to build connected applications. Class: AWS.Credentials AWS SDK for JavaScript Device Shadow MQTT Topics - AWS IoT - JS.next 1. [10m] 2. [20m] BX1 Wi-Fi AP SORACOM Air(3G ) 3. [20m] BX1 4. [10m] Amazon ES 5. [20m] AWS IoT 6. [20m] BX1 AWS IoT 7. [10m] 120 [20m] : SORACOM Beam AWS IoT [20m] : Thing Shadow 70 Chapter 1.