自宅の温度湿度を RaspberryPi2 でログ取り始めた

はじめに

自分のコンテキストを書いておく。
電子工作経験はほぼなし。
10年前、パトランプのXFD体験イベントに参加した先輩からデバイス完成品を譲ってもらったレベル。
たぶんそのイベントはこのへん
電子工作のウデマエは1といって差し支えないだろう。

準備

買ったものは以下のとおり

f:id:khei-fuji:20151225205944j:plain

結果

ログはこんな感じで確認できる。

f:id:khei-fuji:20160104145918p:plain

それぞれ温度と湿度。

サーバー代を惜しんで RaspberryPi2 内にログを残している。
そのためログは自宅内でしか確認できない。


RaspberryPi はリビングの一角に設置している。

f:id:khei-fuji:20160103094625j:plain

手前に向かって生えているのがDHT22センサー。

手順

ざっくり以下のように行った。
詳細は後述。

  • 初期設定
  • センサー(DHT22/AM2302)取り付け
  • 温度湿度データ取得テスト
  • ログ保存
  • ログ取得

初期設定

ローカライズ

locale やタイムゾーンなどを日本に変更。
このあたりを参考に。
Raspberry Pi 2の文字コードを変更する(日本語の設定) - wide_snow’s blog

ネットワーク

巷では無線LANの事例が多いが、ケチって RaspberryPi2 は有線LANで利用する。

スターターキットでは etc/network/interfacesdhcp ではなく manual に設定されていたため、自分で一度 dhcp に変更した。
その際は問題が起きたが以下の記事によって解決した。
linux - DHCP failure when rebooting RPI 2 - Super User

その後static に変更して終わり。
Raspberry Pi 2 IPアドレスを固定(有線LAN)にする - カタカタブログ

センサー(DHT22/AM2302)取り付け

ケーブルなどを細かく買うのが煩わしかったので、買ったのはモジュール化済みの DHT22。

f:id:khei-fuji:20160102142450j:plain

DHT22や互換性があるDHT11の情報はググれば多い。
が、モジュール化されたものの情報は見つからず、どう接続したらいいかわからなかった。
そこで基本をおさえることに。
下記サイトが大変わかりやすかった。

Raspberry Piで電子工作!Lチカ…の前にLピカ! | Device Plus - デバプラ


RaspberryPi のような機器では大きく分けて3つの接続先が用意されている。
電源、アース、入出力だ。
モジュールの + は電源、- はアース、out は出力、ということでそれぞれ 1, 9, 7 に接続した。

温度湿度データ取得テスト

GitHub に公開されているスクリプトを使ってテストする。

adafruit/Adafruit_Python_DHT · GitHub

サンプルのスクリプト example/AdafruitDHT.py を実行すると以下の結果が得られた。

Temp=20.3*  Humidity=37.3%

このスクリプトは以下サイトから知った。
Raspberry pi + pubnub で温度と湿度のリアルタイムグラフ表示 | ネットワークエンジニアを目指して - ブログ

このスクリプトを後で流用する。

ログ保存

GrowthForecast を使ってログの蓄積・可視化を行っている。

導入はこのへんを参考にすれば大体解決。


GrowthForecast の起動スクリプトは雑だが下のような形に落ち着いた。

世の中の記事を見ると GrowthForecast が小数対応する前の情報が多いが、今なら --enable-float-number オプションで小数が使える。


このスクリプトSupervisor に呼び出してもらう。

Supervisor の導入についてはこちらを参考。

GrowthForecast を CentOS 6.3 にインストールして Supervisor で管理する - 彼女からは、おいちゃんと呼ばれています

ログ取得

データ蓄積は、前述の example/AdafruitDHT.py を真似たスクリプトを cron で実行し、結果を GrowthForecast に投げることで解決する。


Adatemp.py 22 4 の 22 は DHT22、4 は RaspberryPi の7番が GPIO 4 なのでそれを指定している。
ここで実行している Adatemp.pyAdahumit.py は、AdafruitDHT.pycp してつくったスクリプト
それぞれファイルの最後から2番目の print を以下のように書き換える。

print '{0:0.1f}'.format(temperature)
print '{0:0.1f}'.format(humidity)

あとは作成したスクリプトを cron で実行すればいい。

最後に

ここまでの作業はすべて1日以内で完了した。
連休でちょっと試してみるにはほどよい作業量だと思う。
これが1万円でできるなんてすごい世の中になったものだと実感。

今後やってみたいこと。

  • どうせなら屋外にも設置する
  • 定期的に自分にプッシュ通知する


興味を持った方は下から購入してもらえると嬉しい。


Raspberry Piスターターパック (Pi2 用Standard)

Raspberry Piスターターパック (Pi2 用Standard)

Electron で Slack 風UIの HipChat クライアントを作っている話

この記事は Electron Advent Calendar 2015 - Qiita の1日目の記事です。

ここ最近作っているアプリについてまとめる。


アプリについて

HipChat をギョームで使っているが、巷では Slack が流行しており、乗り換えたい願望が高まっている。
しかし乗り換えにはコストの面でハードルがある。


そこでSlack風味なHipChatクライアントがあれば面白いかもと、作っている。
ただ作るだけでは面白くないので、未経験だった技術(Electron, AngularJS, gulp)を使っている。



まだまだいろんな機能が足りてないが、ちょっとメッセージを送る程度には使える。
HipChat 公式クライアントは最後に開いたRoom(SlackでいうところのChannel)がデバイス間をまたいで微妙に同期する仕様。
別PCで少しRoomを開き、元のPCで見ると開いていた大量のRoomが勝手に閉じられたりする。
こういう問題を回避するのに有効。


余談だが HipChat Webクライアントのコンソールのログで採用募集しててウケた。

f:id:khei-fuji:20151129170804p:plain

Electron と AngularJS との相性

元々よくなさそうという話は見かけていた。

既に語られてる部分は省略し、実感したよくないところを書く。

設計のコンフリクト

AngularJS を使うメリットの一つに、どういう機能はどこで実装すればいいかが迷わなくて済むというものがある。
一方、Electron ではレンダリングプロセスとバックグラウンドプロセスが存在しており、レンダリング以外の仕事はバックグラウンドに持っていくことが推奨されている。もちろん AngularJS はレンダリングプロセスに存在する。

つまり AngularJS と Electron が設計面でコンフリクトしており、お互いの良さを打ち消し合ってしまうことになる。
(HipSlack v0.0.1 ではよくわかっておらず、平気でレンダリングプロセスを使いまくっている)

データバインディングのあやしい挙動

リモートオブジェクトをバインディングに使うと、同じ controller にバインディングしている textarea の日本語IMEの挙動がおかしくなる。


f:id:khei-fuji:20151129172305g:plain

IMEの変換中の文字列がバインディングに取り込まれてしまっている模様。

最低限のコードをまとめたサンプル

自動化

最初はわけもわからず generator-angular から grunt を使ってた。
いざ自分でいじろうと思ったら意味がわからず、gulp でイチから書き直した。

とはいっても gulp のプラグインを組み合わせただけ。

  • gulp lint で構文チェック
  • gulp serve でビルド、Electron 起動
  • gulp package で製品のパッケージ作成

これくらいできれば十分。(テストは!?)
これから始めるなら grunt より gulp がいいと思う。

今後

ES6 or TypeScript

素の JavaScript を書くとツライのでどうにかしたほうがいい。

HipSlack の開発では VisualStudioCode を使っている。
Microsoft/vscode · GitHub をVisualStudioCode で開いてみたところ、TypeScript の関数定義の移動がかなり使いやすかった。
まさに VisualStudio の名を受け継いでいる感じ。
ということで TypeScript に傾きつつある。

Push通知

チャットアプリなのにリアルタイムに更新されないとかありえない。
HipChat には Webhooks が用意されているので、それを使って push 通知したい。

ChromeでW3C Push APIを使ってみた - Qiita を参考に実装していた。
が、現在の Chromium のバージョンが低くてムリっぽい。

Registration failed - push service not available

AngularJS を捨てる

Electron と AngularJS の相性がよくないと実感できた。
React あたりに置き換えるのがよさそう。
もともと AngularJS を触りたくてやってただけなので全くこだわりはない。

自動アップデート

手軽にできそうなので気になっている。
このへんとか。
jenslind/electron-gh-releases · GitHub

参考資料

お世話になった記事。

最後に

Electron は MS が採用してきたりと、いわゆるWeb系ではない人(僕みたいなエンタープライズ系)でも関わりやすい、面白い技術だと思う。
なのでいろんな人が手を動かしてみるといいんじゃないかな。


明日は Quramy さんです。


AngularJS 使い始めて踏み抜いた箇所

AngularJS 使い始めて、何やるにしてもググってばかりなので、Google の戦略なのかもしれない。

スコープ

イベント


AngularJSライブラリ 活用レシピ 厳選 108

AngularJSライブラリ 活用レシピ 厳選 108

2015年に Amazon で買ってよかったもの

今週のお題「今年買って良かったモノ」

毎年書くのが恒例になりつつある。


生活用品

この値段で満足度の高い椅子が買えるとは思わなかった。
見た目もいいし、リビングに置けばそこが指定席になる。


こだわりはなかったけど、これを使い始めてから家や職場といたるところに置いて、他のペンを排除したくらいに快適になった。


ショルダーバッグを使って MacBookPro を持ち歩いていて肩が痛い気がしてきたのでリュックを購入。
そこそこの収納力もあり、見た目もよく、安いと三拍子揃っている。
と思ったらこれを書いてる時点で在庫切れしてる。


カルビー フルグラ 800g×6袋

カルビー フルグラ 800g×6袋

フルグラは最高の保存食。
長持ちするし、箱を常備しておくことで災害時の非常食にもなると期待している。
数ヶ月に1度買うペース。


家電

録画生活に革命が起きた。
録画アプリの使い勝手が最高によい。
くれぐれも再生環境を把握してから買うべき。


小型の掃除機の中ではコストパフォーマンスに優れている。
無難にまとめるなら。


トレーニング

外をランニングする気を失わせる有酸素運動マシーン。
ジム通いが続かなかったので、季節に関係なく気が向いたときに映画やアニメでも観ながら運動できるのはなかなかよい。


XYSTUS(ジスタス) スリムトレーナーTR H-7218

XYSTUS(ジスタス) スリムトレーナーTR H-7218

腹筋を割るという夢を叶えるために続けている。
正しいやり方でないと効かないし体を痛めるので Youtubeで調べる のがよい。


おまけ

Splatoon(スプラトゥーン)

Splatoon(スプラトゥーン)

書くまでもないかもしれないが、一応。
買ってから5ヶ月近く経ってるのに未だにたまに遊んでるのはなかなかすごいことな気がする。


最近オブジェクト指向についての話を見かけない

表題のとおり。
最近オブジェクト指向って言葉を聞かないし話さなくなった気がする。
そこで理由を少し考えてみた。

理由

  • デザインパターンやらなんやら、もう語り尽くされた
  • クラウドなどプログラミング技術以外の技術の重要性が高まったので相対的に重要性が下がった
  • 高齢化が進み、ある程度習得した人(と習得する気がない人)が相対的に増えたので語りながら学ぶ人が減った
  • 経験者が相対的に増えたので未経験者はOJT中心で学び、未経験者同士で考えるムダが減った


コードレビューしてて「オブジェクト指向」という言葉を使ったときの久しぶり感がすごかった。


オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

ニコ動のランキングをフィルタする Chrome Extensions、Niconico-Ranking-Filter をつくった

ここしばらく話題に上がっている「マリオメーカー問題」

これを回避するための Chrome Extensions をつくった。


github.com


あくまでも個人用途です。



UPQ Phone A01 ホワイトの封緘(ふうかん)の儀

kheiakiyama.hateblo.jp

先日この記事を書いたばかりだが、以下の問題があった。

UPQが出荷済スマホを全て回収、技適マークの記載ミス - ケータイ Watch


回収ということになったので開封の逆、封緘した。
(対義語がわからなくてググッてしまった)


自宅に届いた封書。


f:id:khei-fuji:20151004100644p:plain



中身は今回の件の説明、スマホの返送用セット


f:id:khei-fuji:20151004100723p:plain

返送の手順書。
データのバックアップ取っておいてね、と注意深く書いてある。


細かい話だけど「パッケージ貼付用ラベル」ってのが微妙にわかりづらかった。
単純に箱って書いてくれればいいのに。


f:id:khei-fuji:20151004100746p:plain

パッケージに貼った。

f:id:khei-fuji:20151004100807p:plain

この後携帯を佐川急便で送った。


さていつ返ってくるやら。


どうでもいいけど UPQ Phone グッズAmazon にそれなりにあって驚く。