2016年2月22日月曜日

スマホの温湿度センサーとTaskerの連携

● 構想


前回の記事で最後に少し書きましたが、
部屋の温度、湿度を家電のスマート化に活かせないかと考えて、
温湿度センサー付きの中古スマホを格安で購入しました。

REGZA Phone T-02D

2012年7月発売のデュアルコア、Android4.1.2と現役利用にはちときつい。
けど遊ぶには全然十分なスペックです。

REGZAブランドだが、熱暴走など多数の不具合で有名な富士通製。
だが、この製品に限っては悪くない評判でした。
またあえて富士通製品を選んだのは、温湿度センサー内蔵が多いのが特徴だからです。
他に搭載してるのはGalaxyくらい?

相場の半額以下で販売していたサイトでは「水漏れ、画面割れなどありの特価品」と記載あり、
届いてみたら「メニューボタン欠損」「PCへのUSB接続不可(充電は可)」な製品でした。
ボタンはプラ片で埋め。データ転送はAirDroidで。バッテリーもさほど劣化なく好調。悪くない。

で、謹製アプリで温度、湿度は測れるのだけど、これでは見るだけしかできない。

それにこの子はセンサーだけが目当てで、このデバイスでがっつり何かする気もなかったので、
以下のような作りにしようと考えました。

1. T-02D で Taskerを使って、テキストに温度・湿度を保存
2. FolderSync Liteで Dropboxの Publicにテキストをアップロード
3. Tasker で Dropboxから Nexus5に温度・湿度を読み込む
4. 煮るなり焼くなり(今回はMinimalistic Text: Widgetsで画面上に表示)


● 手順 1:Taskerを使って、テキストに温度・湿度を保存


あらかじめローカルに空のテキストファイルを作っておきます(thermo.txtとか)。
わたしはPCで作っておいて、SDカードのTaskerフォルダの下にコピりました。


そしたら Taskerで任意の名前で新規 Taskを作成し、
1. Variables > Variable Set → Name は適当(%ONDOとか)、To に "round(%TEMP)"、
  Do Maths にチェック。%TEMP はセンサーからの温度取得、round は四捨五入です。
2. もひとつ、Variables > Variable Set → Name は適当(%SHITSUDOとか)、
  To に "round(%HUMIDITY)"、%HUMIDITY は湿度取得です。
3. File > Write File → File で先ほどのテキストを選択、Textには
  %ONDO
  %SHITSUDO
  と入れておきます。改行して2行で記載です。Add Newline のチェックは外します。

あと定期的に更新するために、上記 Taskを Profiles で定期イベントにしておきます。
Profilesタブで新規作成(+)をタップし、Timeで Repeat に every "15" Minute(s) とします。
そして先ほどタスクを選択。


● 手順 2:FolderSync Liteで Dropboxの Publicにテキストをアップロード


DropboxのPublicにおいたファイルを共有することで、URLでアクセスができます。
手順 3でNexus5のTaskerから読み込むため、また定期更新するために、
FolderSync Liteというアプリを使って、Dropboxに同期します。

まず「アカウント」であらかじめ Dropboxのアカウント認証をすませておきます。
次に「同期フォルダ」で新規作成(+)をタップし、
 固有の名前 → 任意
 アカウント → 先ほどのDropboxアカウントを選択
 同期タイプ → リモートフォルダ(スマホのデータをクラウドへ)
 リモートフォルダ → Dropbox のPublic を指定
 ローカルフォルダ → テキストのあるフォルダを選択(わたしは /storage/sdcard0/Tasker)
 スケジュール → 15分ごと
 同期オプション → チェックをすべて外し、「競合した場合の動作」は"古いものを上書き"
 接続 → 室温用なので "Wifiを使用"のみにしました
最後に右下の「保存」を押して完了です。

● 手順 3:Tasker で 別デバイスに温度・湿度を読み込む


まずPCのブラウザでDropboxに接続し、Public の "thermo.txt"を共有しておきます。
以下のようなアドレスが付与されます。u のとこは s だったりするかも。
 https://www.dropbox.com/u/xxxxxxxxxxxxxxx/thermo.txt?dl=0


そしたら 別デバイス(わたしは Nexus5)のTaskerで任意の名前で新規 Taskを作成し、
1. Net > HTTP Get
  Server:Port → https://dl.sropboxusercontent.com/u/xxxxxxxxxxxxxxx/thermo.txt
  Mime Type → text/plain (選択しなくてもいけるかも?)
  Output File → Tasker/temp.txt(一時ファイルを作っておきます。こうしないとうまくいかない?)
2. Variables > Variable Set → Name に "%GYO"、To に "1"。行指定用の変数を宣言
3. File > Read Line → File に先ほどの一時ファイル、Line に "%GYO"、Var to に
  温度を一時受けする変数。%TMP としました。
4. Variables > Variable Set → Name に "%GYO"、To に "2"。次は2行目を読みたいので。
5. File > Read Line → File に先ほどの一時ファイル、Line に "%GYO"、Var to に
  湿度を一時受けする変数。%HUM としました。
6. Plugin > MinimalisticText → Configration を開いて
  Variable name に 温度を MinimalisticText に渡す変数を入力。 "%ONDOV"としました。
Variable content に先ほどの一時受け変数 "%TMP"
7. もひとつ Plugin > MinimalisticText → Configration を開いて
  Variable name に 湿度を MinimalisticText に渡す変数を入力。 "%HUMV"としました。
Variable content に先ほどの一時受け変数 "%HUM"

これも定期的に取得・更新したいので、作った Taskを Profiles から呼び出すのですが、
手順 1と違って、以下のようにしないと読みだせませんでした。なんで?
Profilesタブで新規作成(+)をタップし、Timeで
 From に "AM 0:00"
 Repeat に every "15" Minute(s)
 To に "PM 11:59"


最後に MinimalisticText でホームでのウィジェット表示です。
ホーム画面長押しなど(ホームアプリによる)でウィジェット追加を選び、
MinimalisticText の任意のサイズを選んだら、
LAYOUTタブで「Locale variable」を選んで、「Variable name」"%ONDOV"を入力。
同様にもひとつ作った「Locale variable」で"%HUMV"を選んで、
あと「Static text」で「℃」や「%」をつけるなり、他のタブでサイズや色を変えるなりして完成~。

別デバイスに送るのでなければもっとシンプルに、Tasker で %TEMP/%HUMIDITY を読むだけ。
また取得した値を条件に、前回の赤外線送信と絡めれば
 ・ 30℃を超えたら冷房、25℃を切ったらオフ
 ・ 25%を下回ったら加湿器オン、50%を超えたらオフ
なんてことができますね。
ただスマホの温湿度センサーだと精度が甘いかもなので注意です。

0 件のコメント:

コメントを投稿

Evernote

Clip to Evernote