センサーのログをNextcloudのSensorloggerで記録してみる

この記事は 日本Androidの会秋葉原支部ロボット部 Advent Calendar 2020 の20日分の記事です．
日本Androidの会秋葉原支部ロボット部は現在月に一回勉強会を行い様々な話題で盛り上がっています．
次の勉強会はちょうど今日(20日)です．興味のある方は覗いてみてください．

日本Androidの会秋葉原支部ロボット部 第99回勉強会 – connpass

センサーのログなどをアップロードするのに色々なwebサービスを使ったり，Googleスプレッドシートに書いたりしています．
便利なんだけどロックインになるのは嫌だなって思ったりします．

Nextcloudというファイル共有サービス+αなOSSがあります．アプリケーションを追加して機能を増やすことが出来ます．例えばテレビ電話や，オンラインオフィスとか，マップサービスとか様々なアプリがあります．
これを個人的に立てて便利に使っています

Nextcloud

この中のアプリを眺めているとSensorloggerというセンサーのログを保存できそうなものを見つけたので試してみました．

Sensorlogger – アプリ – App Store – Nextcloud

まずNextcloudですが，とりあえず試すだけならsnapを利用するのがお手軽です．Raspberry Pi + Raspberry Pi OSなどでもOKです．

Debian sid amd64/Ubuntu 20.04 LTS/Raspberry Pi OS armhfでは以下の手順でOKでした．

$ sudo apt update && sudo apt upgrade (1)
$ sudo apt install snapd (2)
$ sudo snap install nextcloud (3)

システムのパッケージを最新にする

snapを使えるように snapd パッケージを導入

snapでnextcloudを導入

10分位待つと導入が終わります．ウェブブラウザにIPアドレスを入力するとセットアップ画面が表示されるので管理者ID/PASSWORDを設定します．

これでとりあえず使えるようになったと思います．

この後Sensorloggerを導入します．
管理者権限のアカウントでNextcloudの右上のメニューから「アプリ」を開きます．

次に上の検索バーに「Sensorlogger」とかの文字列で検索して「有効」ボタンを押して導入します．

Tip

Nextcloudのアプリケーションはコマンドラインから導入することも出来ます．
$ sudo -u www-data occ app:install sensorlogger #通常導入した場合
$ sudo /snap/bin/nextcloud.occ app:install sensorlogger #snapで導入した場合

ここからは一般ユーザでOKです．

Nextcloudの上部から「Sensorlogger」のアイコンをクリックするとSensorloggerの画面が表示されます．

はじめはデータがないのでまっさらです．「Device」辺りでデバイスの登録をするのかな?と思いましたが出来ません．
「Read SensorLogger Wiki Devices」と書かれているのでWikiを参照してみます．

https://github.com/alexstocker/sensorlogger/wiki/Users#devices

API · alexstocker/sensorlogger Wiki

データを送ると自動的にデバイスが出来るようです．Simple, Complexの2種類のデータタイプがあるようです．Simpleは温度，湿度のようでとりあえずこれを試してみます．

以下の辺りから post.php を持ってきて使います．このscriptはダミーのランダムな温度と湿度データを作ってSensourloggerにデータを投げます．

$NEXTCLOUDPATH/apps/sensorlogger/tests/curl/post.php 通常導入した場合

/snap/nextcloud/current/htdocs/apps/sensorlogger/tests/curl/post.php snapで導入した場合

sensorlogger/post.php at master · alexstocker/sensorlogger GitHub

何箇所か書き換えます．
* $url = ` を自分のNextcloudのURLに変更します．
* `$array = array("deviceId" ⇒ を uuidgen コマンドなどで生成したUUIDに変更します．
* $username = をNextcloudの自分のユーザーに変更します．
* $token = に「設定」「セキュリティ」ページの「デバイスとセッション」の一番下の「新しいアプリパスワードを作成」で作成したトークンに修正します．

そしてphpとphp-curlが必要なので導入します．

Debian sid amd64/Ubuntu 20.04 LTS/Raspberry Pi OS armhfでの例

$ sudo apt install php-cli php-curl

この状態で post.php を実行して成功すると以下のようなメッセージが帰ってきます．

$ php ./post.php
{"success":true,"message":"Sensor Log successfully stored","data":null}

Sensorloggerのページの List を見るとエータがアップロードされているのが解ります :)

手動で実行するのは大変なのでcrontabにこんな感じで登録してみます．5分に一回データを送信します．

$ crontab -e (1)
$ crontab -l | grep post.php (2)
*/5 * * * * php ~/tmp/post.php 2&>1 > ~/tmp/post.php.log

crontabの編集

crontabに登録されたか確認

同様にRaspberry Piの温度も送ってみます．温度の $temperature を以下のような感じで書き換えて，UUIDも書き換えるとOK．これもcrontabに登録します．

$temperature = system( '/opt/vc/bin/vcgencmd measure_temp | awk -F "[=\']" \'{print $2 }\' | tr -d \'\n\'' );

しばらく動かしてからダッシュボードを設定するとこんな感じのチャートが表示できました．

密集してよくわからない部分はマウスドラッグで矩形選択するとその部分がズームされます．

という感じでとりあえず動きました．ドキュメントが未だ充実していな買ったり使い勝手も悪いですが最低限の機能はあるかなという感じです．
興味があったら試してみてください．
若しくはおすすめのアプリやサービスを教えてください．