Raspberry Piの照度/温度センサーの値をkintoneへレコード登録してグラフで可視化する
温度/照度センサーを使ったIoTデモをするためのプロトタイプ作成です。
Raspberry PiからkinotneのREST APIを使ってkintoneへレコード登録しています。
可視化はkintoneのグラフを使いました。
しきい値を越えた際の通知もkintoneの標準通知機能を使ってます。
kintone Café vol.7で教えてもらった内容に少し足した感じです。
目次
Raspberry Pi側の配線
使ったセンサーなど
– ADコンバータ MCP3002
– フォトトランジスタ NJL7502L ??
– TMP36 ??
配線図はFritzingを使ってみました。
下手くそでわかりづらくて申し訳ございません。
写真はこんな感じ。
(余計にわかりにくい。。。。)
kintoneのアプリ
フォーム
フォームに以下のフィールドを用意します。
- 日時(日時):sensor_time
必須,重複禁止,レコード登録時の日時を初期値 - センサー名(文字列(1行)):sensor_name
- 照度(数値):brightness
- 温度文字列(1行):temprature
一覧
一覧は上記のフィールドで作っておきます。
ソートは日時の降順にします。
グラフ
下記の設定にします。
- 折れ線グラフ
- 大項目:日時
- 集計方法:合計:照度
- 集計方法:合計:温度
- 条件:すべてのレコード
- ソート:大項目:昇順
通知
レコードの条件通知を下図のように作成します。
- 照度 <= 10 「部屋が暗すぎます。明るくしましょう。」
- 温度 <= 25 「部屋が寒すぎます。25度以下になりました。」
- 温度 >= 35 「部屋が暑すぎます。35度以上になりました。」
APIトークン
生成したAPIトークンのアクセス権の「レコード追加」にチェックを入れて保存します。
設定と保存がそれぞれ完了したら必ず[設定完了]をクリックしましょう
(忘れがち)
Raspberry PiのPythonコード
Raspberry Piで下記のPythonファイルを作成します。
仮にkintone_sensor_update.pyとかにします。
※pythonやspidev,requestsなどのモジュールのインストールは必要です。
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 |
import spidev import time import json import requests from datetime import datetime spi = spidev.SpiDev() spi.open(0,0) spi.max_speed_hz = 1000000 spi.bits_per_word = 8 dummy = 0xff start = 0x47 sgi = 0x20 ch0 = 0x00 ch1 = 0x10 msbf = 0x08 def readTempData(ch,format_txt): adc = spi.xfer2([start + sgi + ch + msbf,(8+ch)<<4,0]) data = ((adc[0] & 0x03) << 8) + adc[1] print 'data: ' + format_txt.format(data) return data def readBlightData(ch,format_txt): adc = spi.xfer2([(start + sgi + ch + msbf),dummy]) data = ((adc[0] & 0x03) << 8) + adc[1] print 'data: ' + format_txt.format(data) return data def convertVolts(data,format_txt): volts = (data * 3.3) / float(1023) volts = round(volts,4) print 'volts:' + format_txt.format(volts) return volts def convertTemp(volts,format_txt): temp = (100 * volts) - 50.0 temp = round(temp,4) print 'temp: ' + format_txt.format(temp) return temp try: while 1: print '---ch0 temp---------' ch0_data = readTempData(ch0,'{:8}') ch0_volts = convertVolts(ch0_data,'{:8.2f}') ch0_temp = convertTemp(ch0_volts,'{:8.2f}') print '---ch1 blightness---' ch1_data = readBlightData(ch1,'{:8}') ch1_volts = convertVolts(ch1_data,'{:8.2f}') print '---kintone upload---' headers = {'X-Cybozu-API-Token':'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx','Content-Type':'application/json'} data = {'sensor_name':{'value':'raspberry-pi_01'},'sensor_time':{'value':datetime.now().strftime('%Y-%m-%dT%H:%M:%S+09:00')}, 'brightness': {'value': ch1_data},'temperature':{'value':ch0_temp}} payload = {'app':'999','record':data} r = requests.post('https://mydomain.cybozu.com/k/v1/record.json', data=json.dumps(payload), headers=headers) print r.text time.sleep(60) except KeyboardInterrupt: pass spi.close() |
上記のPythonファイルを実行します。
1 2 3 4 5 6 7 8 9 10 11 |
$ python kintone_sensor_update.py ---ch0 temp--------- data: 247 volts: 0.80 temp: 29.68 ---ch1 blightness--- data: 25 volts: 0.08 ---kintone upload--- {"id":"145","revision":"1"} |
無事にデータが取れてkinotneへデータが登録されると上記のような出力がコンソールに出力されます。
1分に1回動きます。
kintoneを見てみると、無事登録されたデータがグラフ表示されています。
通知条件を満たした時にはメール通知がされます。
※kinotneでの通知をメールにする設定は別途必要です。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
家族目線(HVC-C2W)SDKサンプルコードを実行してみました(iOS編)
オムロンさんの家族目線(HVC-C2W)SDKサンプルコードを実行してみました。 …
-
JAWS-UG 関西IoT専門支部「マクニカkibo + AWS IoTハンズオン」に行ってきました、というか運営メンバーとして参加してきました
2015/12/19(土)はJAWS-UG 関西IoT専門支部の記念すべき1回目 …
-
ORPHE TRACK を使いはじめてみました
特茶のCMでもお馴染みのORPHE TRACK を購入しました。 セットアップ …
-
Raspberry PIとLinux(Mint)でUSB Serial通信
USB to TTL Serial CableでLinuxとRaspberry …
-
「OK Google、おばけやしきにつれてって」もらいました
「OK Google、おばけやしきにつれてって」 2018/8/25~9/2まで …
-
Raspberry Pi 2 iPhoneのUSBテザリングを使ってPCからSSH接続
超簡単でしたので、ラズパイ買って持ち歩く人はとりあえずこれを試してみれば、と思い …
-
SORACOM plan-DU SIMをSpeed Wi-Fi NEXT W05で使ってみる
自宅からの配信のバックアップ回線を検討中です。 オンラインセミナー配信のバックア …
-
2,999円の体重・体組成計を買ってみたら意外に良かった
東京で部屋を借りて半年になります。 先日の台風12号襲来の日にサウナに行こうと思 …
-
シアトルにあったシェアサイクルLimeはすごく便利だと思う
この記事は、Cycling Advent Calendar 2018に参加した記 …
-
[事前準備] JAWS-UG 関西IoT専門支部「マクニカkibo + AWS IoTハンズオン」
来る12/19(土)の JAWS-UG 関西IoT専門支部第一回勉強会「マクニカ …