4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPiでセンサーデータをkintoneに送って可視化してみよう

Last updated at Posted at 2016-05-17

概要

本コンテンツは、kintone Café 大阪主催のハンズオン向けに作成したものです。
下図の通り、IoTデバイス(RaspberryPi)でセンシングしたデータを可視化することが目標です。
通信にはWi-Fiまたは3Gを利用します。
可視化にはkintone標準のグラフ機能、およびサイボウズスタートアップスのkViewerを使います。

Qiita.png

前提条件

本コンテンツは、Raspberry Pi でSORACOM 接続+MQTTをしてみよう 後編が完了している方を対象としており、下記の前提条件については説明いたしません。

  • IoTデバイスには、最新のRaspbianがインストールされているRaspberryPi 2 Model Bを使用
  • RaspberryPiがインターネットに接続できること(Wi-Fi/3G)
  • RaspberryPiにPCからSSHで接続できること
  • RaspberryPiに照度センサーが接続済みで、センサーログをJSON形式でテキストファイルに保存できること

kintoneのアカウント(スタンダードコース)が必要です。

今回利用するサービス

kintone

※以下はkintoneのユーザーヘルプから抜粋した内容を一部修正したものです

kintoneとはデータベース型のビジネスアプリを作成するツールです。プロジェクトにおける情報共有はもちろん、企業間コラボレーションにも対応。モバイルからも安心してアクセスできる仕組みです。APIを使う事でシステム連携・開発プラットフォームとしても利用でき、今回のようなIoTの用途でも活用できます。

kintoneには、アプリ、スペース、ピープルの3つの機能があります。

アプリ

データや業務プロセスの管理に便利なWebデータベース型アプリを作る機能です。売上情報、顧客情報、問い合わせ対応履歴、ToDo、報告書、文書ファイルなど、さまざまなデータを管理できます。また、それらのデータにひも付く業務プロセスを、柔軟に構築できます。

アプリの作成はノンプログラミングで簡単です。
自分で1からアプリを作る以外にも、便利なアプリが豊富に用意された「kintone アプリストア」から選んでアプリを追加することもできます。

スペース

スペースは、チーム単位でのコミュニケーションに使う機能です。参加者を選んでスペースを作り、参加者同士で議論したり、情報を共有したりできます。

スペースには、そのスペースに関連付けたアプリを作成できます。スペース内でのチームのやりとりに必要な情報、文書やToDoなどを、アプリで管理できます。

ピープル

kintoneのユーザー同士の直接の連絡や、アイデアなどの共有に使う機能です。
ピープル機能では、次のことができます。

  • ほかのユーザーのプロフィールと連絡先を確認できます。
  • ほかのユーザーにメッセージを送れます。メッセージは送信者と受信者以外には非公開です。
  • 自分の投稿をフォローしているユーザーに対して、情報やアイデアなどを発信できます。
  • Skypeを利用して他のユーザーと通話やチャットができます。(Skypeをインストールしている必要があります。)

今回は照度センサーのデータを蓄積する場所として、アプリを使います。

アカウントの取得

kintoneのアカウントを所持していない場合、以下のいずれかの方法で取得します。

  1. cybozu.com developer network
    kintone を使った開発を行う方向けの情報サイトです。
    無料で1年間利用できる開発者ライセンスを提供しています。
    cybozu.com developer networkのアカウント登録後、「開発者ライセンスを申し込もう」から申請します。
    なお、ライセンスの発行までに数日を要しますので、ハンズオン当日にライセンスを取得する場合は、2の手順を使って下さい。

  2. お試し環境
    30日間の無料お試し環境を取得できます。
    即時発行されますので、ハンズオン当日に必要な場合はこちらの手順を使って下さい。
    なお、30日間を過ぎると環境は削除されます。

kViewer

サイボウズスタートアップスが提供するkViewer(ケイビューワー)は、サイボウズkintoneの連携サービスです。
ノンプログラミングでkintoneの情報をホームページ公開できる一覧表やグラフを作成することができます。表示したいレコードの絞り込みができ、表示するデザインも自由に作成することができます。

手順

1.RaspberryPiの準備

RaspberryPiをWi-Fiに接続し、PCからSSHで接続できるようにします。
RaspberryPiのIPアドレスが分からない場合は、Raspberry piをインストールして設定してみようを参考にUSBシリアル変換ケーブルを使ってログインし、ifconfigコマンドを実行しましょう。
下記の場合、192.168.0.209がRaspberryPiのIPアドレス(Wi-Fi)であることが分かります。

wlan0にIPアドレスが割り当てられていない場合は、Raspberry piをインストールして設定してみようを参考にWi-Fiアクセスポイントへの接続設定を行って下さい。

$ ifconfig
wlan0     Link encap:Ethernet  HWaddr cc:e1:d5:4d:59:5e
          inet addr:192.168.0.209  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: 2001:268:d006:d652::2/128 Scope:Global

wget コマンドで適当なURLを打ってみればインターネットに接続できているか確認ができます。

$ wget https://google.co.jp
--2016-03-23 17:53:19--  https://google.co.jp/
Resolving google.co.jp (google.co.jp)... 2404:6800:4003:809::2003, 106.162.198.104, 106.162.198.123, ...
Connecting to google.co.jp (google.co.jp)|2404:6800:4003:809::2003|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.google.co.jp/ [following]
--2016-03-23 17:53:30--  https://www.google.co.jp/
Resolving www.google.co.jp (www.google.co.jp)... 2404:6800:4007:805::2003, 106.162.192.173, 106.162.192.167, ...
Connecting to www.google.co.jp (www.google.co.jp)|2404:6800:4007:805::2003|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html              [ <=>                  ]  18.90K  --.-KB/s   in 0.1s

2016-03-23 17:53:32 (130 KB/s) - ‘index.html’ saved [19358]

アップデートとvimのインストールを行います。

$ sudo apt-get update
$ sudo apt-get install -y vim

2.照度センサー回路の動作を確認する

Raspberry Pi でSORACOM 接続+MQTTをしてみよう 後編で組み立てた回路をRaspberryPiに接続し、下記リンク先のPythonコードを実行して、照度センサーの値が取得できることを確認します。
正常に動作すれば、JSONが標準出力に表示されます。
※ piユーザーでログインしている前提です

$ cd ~
$ vim light_check.py
$ python light_check.py
ch1 =   21, 0.07[V]
ch1 =   21, 0.07[V]
ch1 =   21, 0.07[V]
ch1 =  242, 0.78[V]
ch1 =  438, 1.41[V]
ch1 =  408, 1.32[V]
ch1 =   20, 0.06[V]
ch1 =    4, 0.01[V]
ch1 =    3, 0.01[V]
ch1 =    4, 0.01[V]
ch1 =   21, 0.07[V]

※ [ctrl + C]で停止できます

3.kintoneアプリの作成

照度センサーのデータを蓄積するためのアプリを作成します。

[kintone Café 大阪ハンズオン向け]kintoneアプリを作ろう を参照しながら、kintoneアプリを作成します。

4.スクリプトの編集

照度センサー回路の動作確認で利用したPythonスクリプトを改良し、センサーデータをkintoneに送信できるようにします。

修正箇所(1)

HTTPリクエストを行うためのライブラリを読み込みます。
以下を from datetime import datetime の後に追記します。
import requests

修正箇所(2)

取得したセンサーデータを使ってkintoneアプリのフィールドに合わせたJSONデータを作成し、kintoneへ送信する処理を追記します。
print 'ch1 = {:4d}, {:2.2f}[V]'.format(ch1_val, ch1_voltage) で照度センサーのデータを出力している箇所を以下の内容に書き換えます。
APIトークン、アプリID、サブドメインは自分の環境に合わせて修正してください。

headers = {'X-Cybozu-API-Token': 'APIトークン', 'Content-Type': 'application/json'}
data = {"time_sensor": {'value': datetime.now().strftime('%Y-%m-%dT%H:%M:%S+09:00')}, "ID": {'value': "id000"}, "brightness": {'value': ch1_val}}
payload = {'app': アプリID, 'record': data }
r = requests.post('https://サブドメイン.cybozu.com/k/v1/record.json', data=json.dumps(payload), headers=headers)

参考)完成版

5.スクリプトの実行

下記のコマンドを実行します。
処理が成功すれば3秒間隔でセンサーデータがkintoneに送信されます。
kintoneアプリを表示しているブラウザの画面をリロードして確認してください。

$ python light_to_kintone.py
{'record': {'brightness': {'value': 20}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:04:54+09:00'}}, 'app': 113}
{"id":"26","revision":"1"}
{'record': {'brightness': {'value': 20}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:04:57+09:00'}}, 'app': 113}
{"id":"27","revision":"1"}
{'record': {'brightness': {'value': 784}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:05:01+09:00'}}, 'app': 113}
{"id":"28","revision":"1"}
{'record': {'brightness': {'value': 950}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:05:05+09:00'}}, 'app': 113}
{"id":"29","revision":"1"}
{'record': {'brightness': {'value': 15}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:05:08+09:00'}}, 'app': 113}
{"id":"30","revision":"1"}
{'record': {'brightness': {'value': 3}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:05:12+09:00'}}, 'app': 113}
{"id":"31","revision":"1"}
{'record': {'brightness': {'value': 20}, 'ID': {'value': 'id000'}, 'time_sensor': {'value': '2016-05-09T19:05:16+09:00'}}, 'app': 113}
{"id":"32","revision":"1"}

kintoneアプリ.png

6.グラフの設定

kintoneにデータが送信できたら、蓄積されたデータをグラフ化します。
[kintone Café 大阪ハンズオン向け]kintoneに蓄積されたデータをグラフ化しよう を参照しながら、kintoneアプリにグラフを設定します。

7.条件書式プラグインの設定

kintoneアプリの一覧画面を、照度の値によって色を変えて見やすくしてみましょう。
今回は「条件書式プラグイン 2.0」を使います。

kintoneはJavaScript/CSSを読み込んで、画面をカスタマイズする事ができます。
また、プラグインを使うと、JavaScript/CSSでカスタマイズしたソースをパッケージングし、アプリへのインストールやバージョンアップの対応を容易にする事ができます。

kintoneプラグイン

条件書式プラグインは、レコード一覧、レコード詳細画面の表示時にフィールドの条件によって文字色、背景色、文字の大きさを変更することができるカスタマイズをパッケージングしたものです。
[kintone Café 大阪ハンズオン向け]kintoneに条件書式プラグインを組み込もう を参照しながら、kintoneアプリに条件書式プラグインを設定します。

8.kViewerで公開してみよう

ここまででセンサーデータをkintoneに蓄積する事ができるようになりましたが、データを参照できるのはkintoneにログインできる人に限られます。
kViewerを使うと、簡単にkintoneのデータを公開でき、kintoneにログインできない人に対してもデータを公開する事ができます。

kViewerのはじめ方(手順4〜)を参考にしながら、kintoneアプリのデータをkViewerで公開してみましょう。
今回は一覧ビュー(表示項目は任意)の設定を行ってください。
kViewerのログインはこちらから可能です。

9.レコードの条件通知の設定

IoTではセンサーの値によって通知を行いたい場合があります(異常値の検知など)が、kintoneは標準で通知を行う機能があります。
[kintone Café 大阪ハンズオン向け]kintoneで通知設定をやってみよう を参照しながら、kintoneアプリにレコードの条件通知を設定します。

10.おまけコンテンツ

ここまで完了した方はkintoneのAPIについて調べながら、以下を実現するプログラムを作成してみましょう。(通知が頻繁に送信されてしまうため、9の設定は削除して構いません)

「照度が任意の値以下になったら、アプリに蓄積されているレコードを全て削除する」

kintoneのAPIに関する情報は以下を参考にしてください。

参考)完成版
https://gist.github.com/asaga/c9273fcf69c4a6077c8c1e83b838f2fa
※照度が10未満になったらレコードを一括削除しています

以上で本コンテンツは終了です。
お疲れ様でした!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?