家での毎日のピアノ練習時間を可視化する(RaspberryPi + Pixela)
はじめに
最近、趣味で電子ピアノを弾くようになったのですが、家での毎日の練習時間を
自動で記録できれば良いなと思い、ピアノの練習時間をPixelaで可視化する仕組みを作ってみました。
システム概要
電子ピアノとRaspberryPiをUSBで接続し、USB抜き差し(=ピアノの電源ON/OFF)を
RaspberryPi側で検知します。
ピアノが電源ONとなっている間の時間を計測し、ピアノ練習時間としてPixelaへ記録します。
使用環境
- 電子ピアノ YAMAHA ARIUS YDP-S34
-
RaspberryPi Zero (別途、無線LANモジュールを用意)
- Python 3.7.3
- python3-pyudev 0.21.0-1
※電子ピアノはUSB接続端子が付いているものを使用します。
ピアノの電源ON/OFFを検知
Pythonのpyudevというモジュールで、USBの接続状態を確認します。
※以下の記事を参考にしました。
RaspberryPiでUSBメモリを挿したことをユーザプログラムから認識する
USB接続のaction=addを検知した時間から、action=removeを検知した時間までを計測し、
その日のピアノ練習時間とみなすようにします。
Pixelaに記録
上記で算出したピアノ練習時間を、WebAPI経由でPixelaへ送ります。
同じ日に何回も練習する場合もありえるので、Pixelaから対象日の練習時間を一度取得したあと、
今回分の時間を足してPixelaへ送るようにします。
まず、事前にPixelaのユーザ作成と、グラフの作成をコマンドラインで行います。
こちらもWebAPI経由で行います。
- ユーザを作成
<x-user-token>と<username>は適宜置き換えてください。
$ curl -X POST https://pixe.la/v1/users -d '{"token":"<x-user-token>", "username":"<username>", "agreeTermsOfService":"yes", "notMinor":"yes"}'
{"message":"Success.","isSuccess":true}
- グラフを作成
グラフidは仮で、"piano-time-graph"としておきます。
$ curl -X POST https://pixe.la/v1/users/<username>/graphs -H 'X-USER-TOKEN:<x-user-token>' -d '{"id":"piano-time-graph","name":"piano-time-graph","unit":"minutes","type":"float","color":"shibafu","timezone":"Asia/Tokyo","isSecret":true,"publishOptionalData":true}'
{"message":"Success.","isSuccess":true}
プログラムでは、一度、対象日の練習時間を取得(GET)してから、
今回分の時間を足して、Pixelaへ送信(PUT)するようにします。
単に今回分の時間をPixelaへ送信(PUT)するだけだと、
その日にPixelaへ記録されている時間を上書きしてしまいます。
また、Pixelaにその日の時間が記録されていない場合(その日初めて練習する場合)、
時間を取得(GET)しようとしても正しい値が取れません。
$ curl -X GET https://pixe.la/v1/users/<username>/graphs/piano-time-graph/20200227 -H 'X-USER-TOKEN:<x-user-token>'
{"message":"Specified pixel not found.","isSuccess":false}
ソースコード全文
以下を参照ください。
https://github.com/hillstop/PianoPracticeTime
動かしてみる
PixelaのURLをブラウザで叩きます。
何日分か記録してみました。
まだまだ全体的に白いですが、1年くらい続けると見栄えが良くなるかな?と思います。 (先は長い・・・)
Author And Source
この問題について(家での毎日のピアノ練習時間を可視化する(RaspberryPi + Pixela)), 我々は、より多くの情報をここで見つけました https://qiita.com/hillstop/items/5825e8c31252df0136f4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .