Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AndroidThingsとFirebaseで始めるホームセキュリティ / Android Things Home Security

7bd7dca71f258dc589b002cda12daf16?s=47 Katsuya Kato
February 08, 2018

AndroidThingsとFirebaseで始めるホームセキュリティ / Android Things Home Security

Droidkaigi2018発表資料

7bd7dca71f258dc589b002cda12daf16?s=128

Katsuya Kato

February 08, 2018
Tweet

Transcript

  1.       Droidkaigi2018 Katsuya Kato

  2. ,1* ¢ %(!0Kato Katsuya ¢ Android / iOS ¢ 

    3"$ . ¢ +& 2 # ¢  '/- ) 2
  3. #%/' ¢ Raspberry Pi -*   Android Things&, )

      "$!+.  ( 3
  4. "#%'  0>< ¢ E,67 ¢ :A.3   B;*=7

    ¢ )1/8  D ¢ C@(HF, /29 5 ¢ C@(4?-+ ¢  IG ! $& 4
  5. Android Things ¢ Google IoT ¢ ¢ : Raspberry Pi

    3 5 // . / . /
  6. Android Things  ¢ Android,-1   ¢ #'$'( ¢

    GPIO5/20 ¢ #'& Rainbow HAT1  ¢ LED4x14"%).4.3* ! &* etc ¢ GPIO1+  http://crossbridge- lab.hatenablog.com/entry/googlehome-androidthings- led
  7.  ¢ ADK(Accessory Development Kit)   ¢ Android 

      ¢ https://developer.android.com/adk/index.html ¢ 2011/2012 Google I/O 7
  8. "   ¢ Android Things with Raspberry Pi ¢

    Nature Remo ¢  ¢ Linking  ¢ Bluetooth!   ¢ Firebase ¢ Firebase Realtime Database ¢ Cloud Functions for Firebase ¢ Firebase Cloud Messaging ¢ Geofencing  8
  9. 9 

  10.  35  ¢ 6'2 /9"+&). *$!,1:@ B04> 1. '2A#.

    (Linking%(")= Android Things'2 7:  2. 7: Firebase Realtime Database?<8 3. <8&-Cloud Functions for Firebase "+&).*$!,1:(FCM); 10
  11. Linking*/#%)- ¢ NTT&.E37G>?5<C 9 4 *1% Project Linking ¢ 6A

    $' Linking$' D ¢ ;H!2 ¢ F:I:!2 ¢ ,"2LED etc ¢ 1,00082,5008B: ¢ Android/iOS6A  +02  (2 @= 11 https://linkingiot.com/
  12. 1 12 1 2. E B Firebase Realtime Database Cloud

    Functions for Firebase 3.E B. 3. (FCM)
  13. Linking(!# )* ¢ SDK$%  ¢ https://linkingiot.com/developer/api.html ¢ + 

      Jar,'&"   13
  14. Linking$&!A/1 Android Things(,4K ¢ !*-3C 14 // BeaconScannerSDK?H +! val

    scanner = BeaconScanner(this) val filter = IntentFilter() // >;9 698$#FGD5 // =B98$#9 670 filter.addAction(Define.filterBeaconScanResult) // '-=B9 6BroadcastReceiver70  registerReceiver(receiver, filter) // '!ID!*-)%70 !*-3C  // 63N"- M:<0E@0.L2)%3IJ scanner.startScan(intArrayOf(6), 0)
  15. Linking   Android Things  ¢   15

    var receiver: BeaconReceiverBase = object : BeaconReceiverBase() { internal var receivedData: BeaconData? = null override fun onReceiveScanResult(beaconData: BeaconData?) receivedData = beaconData handler.postDelayed(updateTask, 0) } //   
  16. Linking/$& Android Things! (7 ¢ +*) 16 internal var updateTask:

    Runnable = Runnable { //rawData 838 06 val dataOpenCloseSensor = receivedData?.getOpenCloseSensor() if (dataOpenCloseSensor != null) { // 05 raw  (12 '912"4 #-  val binary = String.format("%12s", Integer.toBinaryString(dataOpenCloseSensor!!)) .replace(" ".toRegex(), "0") val binaryState = binary.substring(0, 1) // '912 val binaryCount = binary.substring(1) // '9%, // .  
  17. Linking  Android Things  ¢  17 // Firebase

    Realtime Database val database = FirebaseDatabase.getInstance().reference.child("state") database.child("door1_state") .setValue(Integer.parseInt(binaryState)) database.child("door1_count") .setValue(Integer.parseInt(binaryCount,2)) } }
  18. Cloud Functions for Firebase ¢ Firebase   HTTPS 

         ¢ Realtime Database  ¢ Firebase Authentication  ¢ Crashlytics   ¢ Cloud Storage   ¢ Realtime Database     18
  19. Realtime Database   Node.js 19 const functions = require('firebase-functions');

    const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); exports.push = functions.database.ref("/state/door1_state/") .onWrite(event => { const item = event.data; const payload = { data: { title: "", message: "1  " + (item.val() === 0 ? "   " : "  "), } }; // 
  20. 4 20 // . /

  21.  ¢       21

  22. Geofencing ¢ 5;70: ='ED& /" ?) # ¢ Google Play

    Service+9: $B A5;70,6 3@ 14( ¢ Google Play Service API> &TargetSDK26.!-/ !70C  ¢ *< %82 ¢ https://github.com/googlesamples/android-play-location 22
  23. ('Geofencing4. ¢ Geofencing4 Android!*+ $ 6#&:7/0- Database3/ ¢ Cloud Functions5

    8,  $61 " )9% 2  23
  24. 24   

  25.  "( ¢ 745 !.,'$ ) ¢ Raspberry Pi2%/+1 2%/LED3*

    #6-&→ )808  25
  26. 7 ¢ LinuxLIRC(Linux Infrared Remote Control) 164,-  Android. '

    $'(* ¢ Android Things035/ 8 +2"%#(&!)1    http://www.lirc.org/ 26
  27. #&%)(!* Nature Remo ¢ #&%)(!* ¢ ;+ ;IRKit/KIRKit,L7 ¢ @:'

    !*J)(!*60  NH?A  ¢ GC 4D2I)(!*.F<O  4DM=  B> ¢ -"$USBE9 ¢ API31  85 27  http://nature.global/
  28. <: ¢ Nature Remo-6!$%( ) .* =3  84 ¢

    Geofencing 502 " !#&ON0; OFF   ¢ ()Geofencing 1'   ¢ 07*()/ /9  ,+   28
  29.  9? 1. '.*,$3"-/ @K6JHK6J! Firebase Database>7 2. Android ThingsFirebase

    DatabaseIG: AI!<B>7 6JNature RemoAPI!L ¢ Nature RemoAPI1%0+)*2& #3( +)*;FCloud Functions!C   →=8API!L 54DE 29
  30. Nature Remo)!API" ¢ API&% https://developer.nature.global/ ¢    

    ¢ '# $  ¢ '# $)! ¢  ¢ ()! etc 30
  31. Nature Remo  API 1.    2. API

     ID  3.    API  31
  32. Nature Remo API 32 $ curl -H ‘Authorization: Bearer {TOKEN}’

    -H ‘accept: application/json’ -H ‘Content-Type: application/x-www-form-urlencoded’ -X POST ‘https://api.nature.global/1/signals/{   ID}/send’ ¢ https://api.nature.global/1/signals/{   ID}/send
  33. 33  

  34.  "$  ¢ Android Things  (% or #!

    *'&)   34
  35.  - 2 ¢ Android ThingsUSB*&Web' !# ¢ )%(" Linux

     '  ¢ Android Things+$,  35
  36.    2 36

  37. .-), ¢ Android Things("*  ¢ USB$ /!+%'& Web#( 

    37
  38. 38 

  39. "'=92. ¢ ;1 ,*6  ¢ Linking#%?7  ¢ (*A+),>#%(

    *5 0<7 ¢ &!$(* ¢ ,5 1834(-/34) @:  39
  40. 10#$&+FN@  Android Things,.%(',.%( ¢ ,.%( ¢ Android5=I -"*-.!> 

      ¢ )%&. LBUSBJ<E/D6    )%&.Q4P!:A7  ¢ ',.%( ¢ K9C-"*-.Linux38!?5    ¢ Raspberry Pi 3&LinuxHGOM2;      40
  41.  ¢ <M.*790(@JVO ¢ ;DEB&L#!.*790(>4:,8:F T.+5&UC  PIA  ¢

    Z$Q 'AndroidKR&N=W13)- &\IoT@   #S  ¢ Y[Linux 169/2#  ¢ G? "]H# 'Android Things&X% ¢ Linking13)- 41
  42. 42