ʍoɹɐɥsのブ口グ

ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็

DS18B20買った

秋葉原へ行ったのでDS18B20を秋月電子で買いました。温度センサーで、A/D変換器いらず、デジタルのみで温度を取得できるのでRaspberryPiにピッタリです。

みんなやろうとするのは定期的に温度を取得してWebサーバ立ててグラフ化してみれるようにする、というもので、この欲望は私も例外ではないようです…。

RaspberryPiといっても本当に初代のメモリ256MBモデルで動かしているのでDBがけっこう悩めます。DB自身だけでなく、例えばSQL系を使おうとするとPythonだとsqlalchemyを使いたいのですが、初代RaspberryPiではsqlalchemyをimportするだけで8秒かかります(!)。import時だけなのでその後はそんな恐ろしいことはないでしょうが、それでも前途が多難な気がします。DB自身には省メモリということでsqliteを選びたいところですが、これはたしかファイル単位のロックが入るので温度センサーのデーモンとCGIで排他されちゃわないかなぁと心配です。たぶん、大丈夫だと思だとは思うのですけども…。

で、悩んだ結果、ふつーに日付ごとのファイルでいーじゃねーかというローテクな結論になりました。自分だけしか使わないし、Pythonならオブジェクトをpickelで簡単且つ高速にシリアライズできます。ブロックデバイスがSDカードなのでファイルが多くなると遅くなること必至ですが、今日以前の温度データは更新されないので気軽にredisにキャッシュできます。redisは基本オンメモリですが、10分単位で取得したデータを1年間貯めてもそんなに容量は食わないとみてます。expireも設定できますしね。

気になるのはDS18B20のデータへのパスが再起動すると変わってしまうところ・・。DS18B20は内部にユニークなIDを保持していると説明に書いてあるのですが、/sys/bus/w1/devices/w1_bus_master1/以下のパス名にあるのはそのユニークなIDとは関係ないようです。再起動すると変わってしまうので、デーモン側でなんとかする必要があります。/sys/bus/w1/devices/w1_bus_master1/{デバイスIDみたいなの}/idがユニークIDだと思うので、これとデータをペアで保存するのがよさそう。DS18B20はアレイ状につなげることができるので、その場合このIDでどのセンサーか識別しないとどれがどれか分からなくなってしまうからです。

いまはやる気出た時にしょぼしょぼ実装していて、systemdでデーモン化したところ。これからnginx入れてブラウザから見れるようにしたい。jadeを使いたいのだけど、256MBのRaspberryPiでnpm経由で入れられるかが心配・・・(npm結構メモリ食うんですよね)。