投稿

ラベル(IT)が付いた投稿を表示しています

Raspberry Pi で温度ロガーの続き(一応完結編)

イメージ
引き続き、Raspberry Pi で温度ロガーの続きなのだが、今回で一応完結。参考にしたサイトで紹介されていた方法が一通り動き、どうさないようもだいたい理解した。 出来上がったのが下のようなプロット。元々15分毎にログするところを、1分毎に改造した。右端でグラフが8度くらいから20度くらいまで急に上昇しているのは、エアコン暖房をつけたから。23.5度の設定で動かしたから、数分で目標温度まで温まっているのがわかる。 ちなみに、日時はUTCである。日本時刻で表示したかったのだが、ちょっと面倒だったので、また次回。 今回、ウェブでログを表示する段階で、「cron でスケジュールした温度計測がうまく動かず、温度が記録できない」という問題にぶち当たり、解決に少しばかり時間がかかった。その解決方法を記録しておく。 まず、cron の設定としては、 % sudo crontab -u www-data -e を実行して、 */1 * * * * /usr/lib/cgi-bin/monitor.py を追加する。これで、1分毎に温度が測定されてログされるはずなのに、全く記録されないのでデータがプロットされない。 monitor.py は実行権限があり、owner.group は www-data.www-data にしてある。念のためにこのスクリプトをシェルから実行すると、きちんとデータベースに書き込まれる。 何はともあれ、cron のログを取ってみる。これは、/etc/rsyslog.conf を開いて、コメントアウトされている cron.* の行のコメント解除し、sudo /etc/init.d/rsyslog restart を実行。 早速ログ (/var/log/cron.log) を見てみると、次のような記載が定期的に残っているので、スクリプトは起動されているみたい。 Jan 29 07:00:01 raspberrypi /USR/SBIN/CRON[21704]: (www-data) CMD (/usr/lib/cgi- bin/monitor.py) これだけではわからないので、crontab を少し書き換えて、エラーメッセージを別のファイルに記録するようにした。次のような感じ。 */1 * * ...

Raspberry Pi で温度ロガーの続き

前回は、Ruby のコードで SPI 経由で ADC (MCP3002) のサンプル値を読むことができた。そこで、これをデータベースに取り込み、Webから読めるようにしようと思い、ネットで調べてみたら、Pythonで書いているのが多かったので、それにならってみたのだが、どうも SPI の Python ドライバ(というかラッパーAPI?)py-spidev がうまく動かず、温度を読み取れない。 MCP3002 のデータシートも読みながら、xfer2 関数を呼び出してみるのだが、読み込まれるのは 0 とか、たまに、書き込んだ値がループバックのように返ってくるだけ。SPIかADCがおかしくなったのかと思いきや、Ruby のプログラムからは値が読めている。 調べていくと、 SPI のループバックテストをするコード spidev_test.c があったので、これを試したところ、SPIは問題なく動作している。 で、もういちどRPiを再起動したりして、いろいろやってみたところ、うまくいく方法が見つかった。 r = spi.xfer2([1, (2< とするとうまく行くようだ。もともと Ruby のコードや ADC のデータシートを参考にして、引数のリストを [0x68, 0x0] としていたけど、これだとうまくいかない。それどころか、SPIが中途半端な状態になってしまうのか、Ruby のプログラムで読んだ値までおかしくなってしまう。 実際にどんな波形が出ているのか気になるところだけど、とりあえず動いたのでよしとする。 今回参考にしているのは以下のサイト。 http://raspberrywebserver.com/cgiscripting/rpi-temperature-logger/

いまさらPHP

いまさらながら、PHPでコーディングをして遊んでいる。C言語的な感覚で、なおかつ、スクリプト言語の気軽さで記述できるところがなかなか良い。 HTMLと混ぜることもできるので、動的サイトが少ないコード量で実現可能でもある。ただし、プレゼンテーション(表示)とロジック(計算)が分離しにくいという問題もある。 完全に分離させようとするのであれば、プレゼンテーションのHTMLには、コンテンツ部分を特殊マークアップしておいて、PHPコードでそれを置き換える方法をとれば良いのだろう。 と、どうでもいいことを思っている。

TV録画閲覧サイトに検索機能を追加

イメージ
TV録画(録画じゃなくてもいいのだが。。)閲覧用のサイトに検索機能を追加してみた。タイトルのみで(疑似)フリーワード検索。データベースは使用せず、PHPの単純なパターンマッチングで引っ掛けてくる検索アルゴリズム。例えば、「ショーン」で検索すると、「ひつじのショーン」のみが表示される。 ところが、検索がキーワードのOR条件になっていたことが判明した。例えば、「女子のフィギュアスケート」を検索しようと、「女子 フィギュア」で検索すると、女子も男子も関係なく、フィギュアスケートに引っかかった録画が表示されてしまう。 アルゴリズムを改良せねば。。パターンマッチングを少し工夫して点数化してソートかな。

TV録画閲覧サイト試作

イメージ
というわけで、TV録画閲覧サイトを試作してみた。ほとんど初めて本格的に(?)PHPを触ったので、少々時間がかかってしまい、結局昨夜はほとんど徹夜だった。でも、一番時間がかかったのはスマホやタブレットに対応したサイトにするところと、スタイルシートの設定のところだったりするのだが。。。 当初はTiny Web Gallery をいじるつもりだったが、なかなか大掛かりなシステムになっていたので、結局少しずつ自分でスクラッチから作ることにした。まずはファイルリストを表示するところから初め、少しずつインクリメンタルに強化していった。 そして出来たのが、以下のページ。ひとまず、録画開始日時で降順にリスト表示するようにした。録画が、サムネイルとともに、リスト表示される。このリンクをクリックすると、HTML5のvideoタグで埋め込まれた動画が表示されるようになっている。動画表示ページもPHPになっていて、query stringsでファイルを渡すようになっている。(まあ、大したことないが。。)あれ、今見ると、タイトル表示が変(日付の情報が入っている。。)修正しないと。。。 今後は、曜日やフリーキーワードで検索できるようにしようと思う。あとは、外でもアクセスできるように、アクセスコントロールも追加したい。少しずつ改造していこう。

Raspberry Pi + dovecot (IMAP server)

Postfix で SMTP サーバーができたので、つづいて dovecot を使用して IMAP サーバーを設定してみた。 ネットの解説を頼りに設定したのだが、なかなか動かなかった。というより、IMAP へ接続できなかった。しばらく悩んだ末、 dovecot-imapd のインストールが必要であることが判明、これをインストールすると難なく動いた。 続いて、TV録画した動画を Web サイトから閲覧できるようにしようと思い、Tiny Web Gallery というフリーの PHP ベースの CMS を試してみている。これに少し手を入れれば、録画番組を楽に検索したりできそうな気がする。 このシステムのいいところは、データベースを必要としないところ。つまり、RasPi のような非力な環境で DB を動かす必要もなければ、別途 DB サーバーが必要となることもない。(最近の NAS は DB サーバーにもなったりするのだろうか。。。)ただし、データが多くなってくると、動作が重くなる可能性が高いと思われる。が、とりあえずは、これで十分。 Apache2 + PHP5 を User Dir で有効にするためには、 /etc/apache2/mods-enabled/php5.conf を修正する必要があった。デフォルトでは無効になっているので、これをコメントアウトする必要がある。 これでとりあえず、サンプルギャラリーが表示されるようにはなったが、途中で読み込み中のまま固まってしまっている。もう少し見てみないといけない。 ちなみに、最近 Apple TV 2 をほとんど使っていないので、 Jailbreak してこういう動画を自由に見られるように改造したほうがいいと考えている。というわけで、やってみたいこと(なおかつ、追加の経費がほとんどかからずできること)がまた増えた。

Postfixでリモートメール送信

RasPiで動作中の Postfix メールサーバ。これまではローカルの配信のみだったけれど、リモート配信を試してみたところ、なんとかうまく行く方法が見つかった。 参考にしたのは、 Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth) 。 /etc/postfix/main.cf に relayhost = [smtp.example.com] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = と記載を加える。次に /etc/postfix/sasl_passwd を作成する。内容は以下。 smtp.example.com    username:password これをハッシュにかける。 % sudo postmap hash:/etc/postfix/sasl_passwd 最後に、postfixの設定をリロードする。 % sudo service postfix reload これで、sendmail コマンドなどでメールが送れるようになるのだが、その際、 "envelope sender address" をきちんと設定しないと SMTP 認証ではじかれる。私が使用したプロバイダー (hi-ho) の場合、username (=自分のe-mailアドレス)を -r オプションで "envelope sender address" に指定する必要があった。例えば以下のように。 % sendmail -r username alice@wonderland.net < mailbody 一昔前はダイレクトにメールを送ることができたものだが。。。スパム対策などのため、仕方が無い。

TV録画の続き

EpgDataCap_Bonを使ってTV自動録画ができるようになったが、録画データ自体はTSで保存されるので、iPhoneなどで見るには適さない。そこで、フォーマットを変換することになる。 いろいろと試してみて、GUIならば Any Video Converter が使いやすい感じがした。でも、GUIだと自動的に変換するようなことがやりにくいと思ったので、FFmpeg というオープンソースツールを試してみた。これはなかなか使いやすそう。 次のコマンドラインで1280x720 の h264 に変換するのが良さそうな感触。 ffmpeg.exe -i "input.ts" -c:v libx264 -b:v 1000k -s 1280x720 -strict -2 -c:a aac -b:a 128k "output.mp4" "-strict -2" オプションは、試験的実装のAACを使うために指定する必要がある。

WoL実験

WoL (Wake on LAN) を試して見た。起こす相手はデスクトップPCである。 Raspbian では、etherwake というツールがある。root 権限で使う必要があるが、問題なくスリープ中のPCを復帰させることができた。 調べてみると、UDPデータグラムの送出だけで簡単に実装できそうだったので、コピペを元にCコードを書いて試してみたところ、うまく行った。 うちの環境でうまくいったのは、以下の条件。 255.255.255.255 :12345 へのわブロードキャスト データは ff ff ff ff ff ff の後に、相手のMACアドレスを16回繰り返したもの。 少なくとも、自分の環境では、これで機能している。root権限も必要無い。 試しにデータを1バイト書き換えてみると、PCは起きなかった。ちゃんと認識しているようだ。

VPNまた接続できず

週末接続に成功したVPNだが、今日はまたもとの状態に逆戻りしてしまった。 同じWiMAXで接続していても、アクセスポイントによって挙動が変わるらしい。フォーラムに現象を報告しておくべきか。 仕方ないので、SSHのポートフオーワディングでお茶を濁している。 ちなみに、SoftEther VPN は3/21にアップデートされたので、サーバのほうも更新しておいた。

Raspberry Pi で Web Cam

イメージ
Raspberry Pi で Web Cam を使ったストリーミングを実現するべく、作業開始。ちなみに、手元にあるカメラは "Logicool HD Pro Webcam C910" である。 ネットで検索すると、実に情報は沢山そろっている。どうやら video4linux2 というデバイスドライバを有効にし、mjpg-streamer などを使うみたいである。 参考にしたウェブサイトは以下 Howto : UVC対応Webカメラを使用してストリーミング配信をおこなう Raspberry Pi用赤外線カメラPi NoIRの映像をandroidで表示してみた How to install or upgrade UV4L on Raspbian (for the Raspberry Pi) まずは UV4L をインストールするところから開始し、問題無くインストールできたので、mjpg-streamer をダウンロードしてコンパイル。 ここでおもむろに C910 を Raspberry Pi の USB ポートに直接接続。サイトによっては「バスパワーだけでは足りない」と言っていたので、電源が落ちてしまうかと思ったが、接続だけでは問題なし。動作時でも、フレームサイズ 320x240、フレームレート 10 fps であれば、バスパワーで問題無く動作している。ただし、C910 の他には何もUSB接続はしていない。 カメラをUSB接続すると /dev/video0 が現れた。そして、コンパイルしたばかりの mjpg-streamer を起動すると、カメラの電源が入った。その状態で、RasPi のポート 8080 へウェブブラウザからアクセスしてみると、見事カメラからの映像が配信されていることが確認できた。 Mjpg-streamer の配信画面 あとは、これを自動的に起動するようにすれば、簡易 Web カメラの完成である。ポートを開ければ、外部からでも見ることができる(やりたくないけど)。VPN接続すれば、ポートを開けずとも見れる(それ用に USB WiFi子機を注文した)。 さらには、mjpg-streamer のソースを参考にすれば、自分で Web カメラの映像を自由に処理することも可能。例え...

VPN接続成功

VPNに外部から接続成功した。確認したのは、WiMAXのモバイルルータから。これまでは、docomoのモバイルルータとiPhone (softbank)の3Gもしくは4Gからの接続だった。おそらく、そこに違いがあるだろうと推測している。 ところで、VPNについて調べていたら、Linux上でVPN Serverを動かしている場合、VPN接続を通して、VPN ServerのIPアドレスにはアクセスできないらしい。ネットワークアダプタがVPN接続に使われているので、当然と言えば当然のような気もするが、そのため、同じマシンでWebサーバを動かしていても、そこに接続することはできない。 同じマシン上の別のサーバに接続したい場合は、ネットワークアダプタの追加が必要だ。そして、追加したアダプタを同じネットワークセグメントに接続し、別のIPアドレスを割り当てる。そのアドレス当てであれば通信可能だ。 この投稿は、VPN接続した状態で書いているので、自宅からのアクセスになっている。 VPN接続も出来たので、今度はカメラを動かしてみたい。 ちなみに、Raspberry Piでは実にいろんなことを試している人たちがいる。CNETには、自動給餌器からスパコン(スパコンと呼んでいいかは微妙だが。。クラスタ?)まで、様々なものが紹介されている--- 「Raspberry Pi」で作ってみた--写真で見る自動給餌器からスパコンまで 。 これらの中では、ロボットに興味がある。子供と一緒に遊べそう。

SoftEther VPN Server の状況

VPN Serverはまだ外部からだとうまく繋がらない。しかし多少進展はあった。ポート4500のやりとりまで進むようになった。しかし、なぜそうなったかは不明。違いと言えば、ルータを一旦出荷時設定に戻したこと。いろいろいじっているうちにルータがおかしくなってしまい、リセットボタンを押すことになったから。再び元の状態に戻したつもりだったが、どういうわけか、この環境下ではポート4500の通信まで進むようになった。 しかし、クライアント側からのUDP-encap: ESP(spi=0x..., seq=N)パケットがN=0x1..3と到着したところで、サーバからisakmp-nat-keep-aliveが送信され、その後も上のアクセスに対するレスポンスが送出されない。結局VPN接続は確立しないままタイムアウトで終了してしまう。 「ルータが何かのパケットをフィルタしているのかもしれない」と考え、とりあえずルータの設定で、全プロトコル、全ポートをサーバマシンにフォワードし、全てのファイアウォール機能を外し、全てパススルーを有効にしてみたが、結果は変わらなかった。 そろそろお手上げかなぁ。 どうやらSoftEther VPNにOpenVPNの機能があって、それでつなげばうまく行くらしいので、それで凌ぐしか無いか。。でも、セキュリティ的に脆弱とも聞くが。。

VPN続き

SoftEther VPN Serverが動いたので、早速試してみたところ、Windows用のSoftEther VPN Clientからならすんなり繋がった。 「それでは」と、iPhoneのWiFiをOFFにして接続を試みたところ、何度やってもうまく行かない。いろいろNATの設定をいじってみたが、それでもうまくいかない。モバイルルータを通して試してみてもうまくいかない。もっとも、モバイルルータの場合は、ルータ側の設定(ポートフォワーディング)にも問題があるみたいである。 Tcpdumpで通信を解析してみると、LAN内で成功しているときには、ポート500同士でisakmp, phase 1のidentが二往復したあと、ポート4500同士で、NONESP-encap: isakmp: phase 1 identが一往復、そして、phase 2に移行しているのに対し、外部からの接続では、ポート4500の通信に移行しないままタイムアウトになっている。 クライアント側でtcpdumpしてみると、ポート4500の通信は開始しているものの、サーバ側で受け取れていない。どこで欠落しているのか。サーバ側のルータはポート500と4500を開けてある。 もう少し原因究明頑張ってみることとする。 その続き: 単純なUDPのクライアントプログラムをCで書いてみて、サーバに届くかどうか確認してみたところ、ポート4500宛だと届かない。ルータで開けている(フォワーディングしている)のだが。これはルータのバグか?ファームの更新を確認してみないと。。ちなみに、ルータは、バッファローのWZR-HP-G450Hである。

Raspberry Pi 遊びの続き

当分 Raspberry Pi 遊びは続きそうだ。 昨夜はなんとか SoftEther VPN Server をコンパイル&インストールまで完了した。 RPiへのインストール報告は多くの方々がやっているので、ここでは省略。簡単なメモだけ記載しておくと。 使用したソース= softether-src-v4.05-9423-beta.tar.gz コンパイルのために追加でインストールしたパッケージ: libreadline-dev libssl-dev libncurses-dev インストールはしたが、使ってみるのはこれから。。。 一方で、 "Bitvise SSH Client" という、Windows用のSSHクライアントソフトを初めて使ってみたら、これだけで、かなり色々できて便利である。外からうちのRPiサーバーにログインして、操作ができるのは当然だが、ポートフォーワディングを利用した(と思われる)ファイル転送もできる。なので、これがあれば、VPN無しでも、たいていのことはことが足りそう。 ただ、LAN上のリソースに直接アクセスはできないので、家の中と同じようなネットワーク環境は作れない。それを実現するにはやはりVPNが必要。ほんとうに必要かどうかは別として。。。 そういえば、せっかく申し込んだ Tokyo 10K だが、子供の水泳教室と重なっていることが判明して棄権することが決定してしまった。残念。別の大会を探さねば。

Raspberry Pi

週末届いた Paspberry Pi 、Raspbian を入れて、久々にサーバーいじりをしてみている。最初から色々そろっているので、あまり四苦八苦はしないで済む。とりあえず、常時ONの省電力サーバーとして使ってみようと思う。 少しずつ、カメラや温度計なんかを接続して、外からでも部屋の様子をモニタできるようなものを作ってみる予定。(セキュリティには気をつけないとならないが。。)かなり漠然としている。その前に、SoftEther VPN Server を立ち上げてみる予定。 とりあえずやったこと Raspbian インストール DDNS のクライアント立ち上げ Apache2 立ち上げ Apache2 + SSL 立ち上げ(パスフレーズ自動入力設定でやや苦戦) Raspbian ではないが、ルータにトンネルを通してポートを開けた。 外部から Web server, SSH, SSL Web server の接続確認 やってみようと思っていること Soft Ether VPN Server の立ち上げ USB カメラ接続, LAN上にカメラ映像を配信 あとは、Raspberry Piとは関係無いけど、スキャンした大量のクッキングレシピを分類してDB化処理する試みを検討中。うまくいけば、ローカルのレシピサイトを作って活用できそうだ。

TV視聴サーバー

週末、EarthSoftのPT3が届いたので、月曜の晩からWindows7マシン上で試している。まず TVTest を使って PC 上で地デジ視聴および録画が出来るところまで確認した。そして Spinel で LAN 上で映像を配信することができ、今晩は EpgDataCap_Bon にてストリーミングし、VLC media player で表示することができた。 ネット上に設定方法からなにからなにまで全部手順が細かく紹介されているので、ほとんど労せずに手順を踏襲するだけでうまく行く。何がどうなっているのかはひとまず後で理解することにして、先に進む。 サーバーの起動まではうまくいったみたいなので、まずはローカルで接続してみたら、あっさり成功した。次は LAN上の別のPCから。 これがうまくつながらない。ファイアウォール設定をいろいろ試しても、つながらない。telnetでポートを指定してみても、localアドレスならばつながるが、リモートからではダメ。同じネットワークアドレスでもダメだった。 色々調べた結果(最終的には VC++ で socket プログラミングまでやってしまった。。。)、アンチウィルスソフトのファイアウォールがブロックしていたことが判明。これをうまく回避するようにしないとならないことが分かった。これも、ネットで調べるとあっさり方法が分かったので、すぐに解決した。 UDP ストリーミングでまたうまく受け取れずにつまづいたが、今度はなつかしの tcpdump も使って受信を確認すると、なんとか表示できた。Windows7 マシンから PT3 + Spinel で放送波からTSを抜いてネット配信。それをローカルで受け取った EDCB が、UDP でストリーミング、無線LANでつながっている Mac Book Air の VLC player 受け取って表示する。これで、フルHDの映像(もちろん音声も)が問題無く再生できた。 しかしながら、最終的には TV 視聴はあまり必要では無い。それよりも、TV 録画してとり貯めた映像をネットを通して iPad, iPhoneからでも見えるようにしたい。それに、録画予約もネット上から出来るようにしたい。つまりは、録画+メディアサーバー+HTPCという位置づけのものを構築したいと思っている。

WiFiルータの調子が悪いが。。

家のWiFiルータの調子が悪い。品番はバッファローのWZR-HP-G450H。外部につながらなくなることが最近頻繁に起きるようになった。さらには、LANにもつながらなくなるケースが多発している。 管理用ページからステータスを調べてみても特にログには問題が残っていないので、原因が良くわからず困っている。 まずはファームを更新してみたのだが、若干良くなった気がしたけれども、やはり問題は解決していないみたいだ。とりあえずルータの電源を抜き差しして強制的に再起動させてごまかしている。 LAN上のNASにも接続ができなくなったとき、LANポートを変えてみたところ、つながるようになった。どうやらDHCPがうまく働いておらず、NASがIPアドレス更新に失敗していたことが原因らしい。ポートを変えたことでアドレスが更新されて、つながるようになったみたいだ。 ルータはそんなに古いものではないのに故障してしまったのか。まあ、新居に引越したら、新しいものに買い替えるかもしれないので、それまではだましだまし使っていようかと思う。

読めなくなったExcelのデータを復元

Excelのファイルが読めなくなって困っていたところに救世主があらわれた.それはやっぱりGoogle先生. 家計簿用のファイルを裏で開いていた状態で,コピーしたか何かしたのが影響して,そのファイルが二度と開かなくなってしまった.開こうとすると,「読み込み中」と表示したまま,「応答なし」になってしまう.何度やってもダメだったので,あきらめかけていた. しかし,もう少しねばって,ちょっと調べてみると, 「破損したブックの情報を修復する方法」 なるページを発見.早速試してみたら,難なくデータを復元できた.ブックのテンプレートを取っていたことにも助けられた. ところで,このサイトは,「エクセルの学校」というくらいだから,ほかにもExcelの技がいっぱいありそうだ. 今回の教訓は, まずは「ググれ」だ.何はともあれ,ググるが早い. そして,重要なデータはバックアップを取れ. ということだ.

モバイルWiFiルータの比較検討結果

イメージ
ポータブル WiFi の比較検討を行ってみた.結果は,通信速度,トータルコスト,エリアカバレッジを総合的に判断して, ドコモのモバイルWiFiルータ に決定した. 比較に使用したのは,以下の表.B-mobileはコストは低いのだが,通信速度がネックとなりそうなので除外.WiMAXは,エリアが狭いので除外.残るは,ドコモとイーモバだったが,カバレッジエリアがやや狭いということで,ドコモを選んだ.それに,ドコモのFOMAインフラの品質は日本一である. 比較表(クリックで拡大) このモバイルルータは,光回線/WiFi/3Gのいずれかを使ってネットに繋がり,WiFiルータとなって,ノートPCやiPhone,iPadなどを接続することができる.ネットへの経路が3Gに限定されていないところも大きな強みだ.ただし,発売はまだ先のようなので,もう少し待たねばならない.