ついにできた。
成果物
RaspberryPi.CpuTemp.FusionTables.Insert20170104112421531
RaspberryPi.CpuTemp.FusionTables.Insert20170104112421531
開発環境
- Raspberry Pi 3B
- Raspbian Jessie 2016-09-23
- Python 3.4.2
- Windows XP Pro SP3 32bit
- Google
- Account
- Developers Console
- Projectを作成する
- ClientId, ApiKeyを作成する
- Fusion Tables APIを有効にする
- Projectを作成する
- Drive
- Fusion Tables query API
- Google Identity Platform
実行
python3 CpuTempInserter.py
Raspberry Piのターミナルで実行する。指定したFusionTablesにCPU温度がInsertされる。
補足
コード | 説明 |
---|---|
CpuTempInserter.py | メイン。doc_idなどキー値を指定する。 |
FusionTablesRequester.py | FusionTablesAPIを実行する。 |
AccessTokenRequester.py | RefreshTokenからAccessTokenを取得する。 |
GoogleKeysGetter.py | SQLite3データベースから各キー値を取得する。 |
CpuTempInsert.pyからコードを追えばわかるが、必要なキーの取得はProjectIdから取ってきている。client_secretなどの重要なキーはハードコーディングせずDBから参照するようにしてある。
事前準備
Googleから必要なキーを取得する
- Account
- MailAddress
- Password
- Developers Console
- client_id
- client_secret
- api_key
- Drive
- Fusion Tables
- document_id
- Fusion Tables
- GoogleのRefreshTokenを取得するコード(python3版)
- refresh_token
- Account
SQLite3でGoogleアカウント管理DBを作成したときに必要なキー(MailAddress, Password, ProjectId, ApiKey, ClientId, ClientSecret, RefreshToken)を登録すること。
Google.Accounts.sqlite3
というファイル名でCpuTempInsert.py
と同じディレクトリに配置する。FusionTablesでテーブルを作成したときのdoc_idをCpuTempInsert.pyに設定する。カラム名をinsert文と一致させる。
課題
ダブルクリックで実行したい
run.shファイルにしてダブルクリックで実行したい。
python3 CpuTempInserter.py
しかし、以下のようなエラーが出た。
pi@raspberrypi: $ ./run.sh ': [Errno 2] No such file or directoryerter.py
cron実行したい
shバッチができたら、それをcronで定期実行したい。
- 起動時に1回実行
- 15|30分毎に1回実行
リクエスト上限に気をつける。たしかqueryは25000回/日、insertは5リクエスト分となり5000回/日。5000/24=208.3回/時。208/60=3.46回/分。
頻度 | 回/日 |
---|---|
10分毎 | (1h6)24=144回/日 |
15分毎 | (1h4)24=96回/日 |
30分毎 | (1h2)24=48回/日 |
他のデータも記録したい
SenseHATから収集できるデータを記録したい。
環境データ
- 気温
- 湿度
- 気圧
本体データ
- 方角
- 角度
SQLiteのO/Rマップライブラリを使用して実装したい
SQL実行部分が同じようなコードばかりになる。 O/Rマップライブラリを使えばもっとすっきり実装できるかもしれない。
これまでの軌跡
本記事をあわせて36件。
RefreshTokenで一部自動化
http://ytyaru.hatenablog.com/entry/2017/02/10/000000
http://ytyaru.hatenablog.com/entry/2017/02/09/000000
http://ytyaru.hatenablog.com/entry/2017/02/08/000000
http://ytyaru.hatenablog.com/entry/2017/02/07/000000
http://ytyaru.hatenablog.com/entry/2017/02/06/000000
Python基礎学習
http://ytyaru.hatenablog.com/entry/2017/01/25/000000
http://ytyaru.hatenablog.com/entry/2017/01/24/000000
http://ytyaru.hatenablog.com/entry/2017/01/23/000000
http://ytyaru.hatenablog.com/entry/2017/01/22/000000
http://ytyaru.hatenablog.com/entry/2017/01/21/000000
http://ytyaru.hatenablog.com/entry/2017/01/20/000000
http://ytyaru.hatenablog.com/entry/2017/01/19/000000
試行錯誤
http://ytyaru.hatenablog.com/entry/2017/01/18/000000
http://ytyaru.hatenablog.com/entry/2017/01/17/000000
http://ytyaru.hatenablog.com/entry/2017/01/16/000000
http://ytyaru.hatenablog.com/entry/2017/01/15/000000
http://ytyaru.hatenablog.com/entry/2017/01/14/000000
http://ytyaru.hatenablog.com/entry/2017/01/13/000000
http://ytyaru.hatenablog.com/entry/2017/01/12/000000
http://ytyaru.hatenablog.com/entry/2017/01/11/000000
http://ytyaru.hatenablog.com/entry/2017/01/10/000000
http://ytyaru.hatenablog.com/entry/2017/01/09/000000
http://ytyaru.hatenablog.com/entry/2017/01/08/000000
http://ytyaru.hatenablog.com/entry/2017/01/07/000000
Drive, GAS, Fusion Tables
http://ytyaru.hatenablog.com/entry/2017/01/06/000000
GASのdoGet関数でFusionTablesAPIを叩く - やってみる
GASを実行する(HTTP GET) - やってみる
GASでFusionTablesAPIを叩いてみた - やってみる
GoogleAppsScriptでHelloWorldしてみた - やってみる
Fusion Tables APIに触ってみた - やってみる
準備
Googleの認証キーを取得する - やってみる
FusionTablesでテーブルを作成する - やってみる
GoogleDriveにアプリケーションを追加する - やってみる
データの共有方法について考えてみた - やってみる
ラズパイのセンサー情報を定期的にアップロードしたい - やってみる
所感
ラズパイのセンサー情報を定期的にアップロードしたいという思い付きから発足したこの企画。まさかこれほど長期に渡るとは思っていなかった。Google APIを叩くまで、かなり、とても、すごく、やたらめったら、超ベリースーパースペシャルハイパー苦労した。何度やめようと思ったことか。
元凶はGoogleのOAuth2.0。もう関わりたくないが、WebAPIを使う限り無縁ではいられないだろう。GitHubAPIはもっと簡単だったのに(ただし二要素認証を除く)。サービスごとに認証やAPIの使い方がぜんぜん違う。その調査と実装が大変。しかも技術の更新が早いから、いずれコードも変更せねばならないだろう。すべてはWebであるせい。ローカルでやればこんな苦労やリスクとは無縁でいられる。はたして苦労に見合うだけの価値があるだろうか…。はたしてWebサービスを利用すべきだろうか…。
どうでもいいが、なんと今回、記念すべき100リポジトリ目だった。
おめでとう私。えらいぞ私。がんばったね私。