投稿

ラベル(コンピュータ)が付いた投稿を表示しています

RaspberryPi の Wi-Fi を安定させる

Raspberry Pi を USB の Wi-Fi で LAN 接続しているのだが、これが不安定で、突然アクセスできなくなることが頻繁に起きていた。わざわざディスプレイやキーボードを接続して状況確認するのも面倒なので、その度に電源を抜いて強制リブートさせていた。でも、あまりに頻繁に起きるので、本格的に対策してみることにした。 調べたところ、不安定になる原因は Wi-Fi のパワーマネジメントのようだ。それをオフにしてしまうのが対策となる。それには、 "/etc/modprobe.d/8192cu.conf" というファイルを作り、以下の内容を書き込んで保存する。 options 8192cu rtw_power_mgnt=0 これで、reboot 後、パワーマネジメントがオフになるので、Wi-Fi のトラブルは解決されるはずである。 また、SSH のセッションを切らないようにするため、"/etc/ssh/sshd_config" に、次の行を追加しておくと、良いらしい。 ClientAliveInterval 10 とりあえず、これらの設定で、今のところ快適に使えている。

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/

RasberryPi で温度ロガー作成計画(キックオフ)

今夜は、久々にラズパイ (RaspberryPi) で遊ぶ。と言っても、温度センサで温度を測ってみるというだけ。と言っても、簡単工作キットのアナログ温度センサとADC(アナログデジタルコンバータ)を使う。正直言って、ADCを意識的に使うの人生で初めてかもしれない。 ちなみに、ラズパイには ADC が無いので、ラズパイだけで温度センシングするには、デジタル出力の温度センサ(どうやら DS18B20 が有名らしい)接続するのが一般的のようだ。 でも、今回はキットに入っている温度センサ MCP9700E と、ADC MCP3002 を使う。(最初は MCP9700 もてっきりデジタル出力かと思っていたのだけど、データシート見ると違った。) 参考にするのは、キット提供元がやっているブログ「Raspberry Pi 電子工作」の記事 「Raspberry Piで温度センサー。部屋の気温を取得しよう」 。 まず、回路を組む。キットのブレッドボード上に配線する。一応データシート見て進めるのだが、結局、インストラクションに従う。最初、GNDの接続が間違えていて、ラズパイが起動しなくて焦ったが、接続を直したら大丈夫であった。 で、次に pi_piper が必要ということで、"sudo gem install pi_piper" を実行したのだが、「mkmf がない」とエラー終了したので、ネットで検索して "sudo apt-get install ruby-dev" を実行したらOKであった。 次にやることは、デフォルトで無効化されているSPIを有効化する。これは、 "/etc/modprobe.d/raspi-blacklist.conf" を編集して、 "#blacklist spi-bcm2708" とコメントアウトして再起動。 正しく認識されていれば、SPIは /dev/spidev* という形で見えているはずなのだが、見えていなかったので、別の方法 "raspi-config" から Enable にしてみた。今度はバッチリだった。 ここで、あまりに寒いので、床暖の入っている二階へ移動。ラフロイグのクォーターカスクを片手に作業を進める。ちなみに...

Windows10の操作性改善メモ

最近、家の Windows 10 の動作が目に見えて遅かったので、ネットで対処法を調べて実行してみたら、みごと改善した。 問題があったのは、 漢字かな変換が異常に遅くなること Chrome で「ホストを解決しています」と表示されて表示まで長く待たされること の二点。 1については、IMEの「予測入力」が重いことが原因だった。「Windows10のMS-IMEが重い、予測変換が邪魔、という場合の対処方法」 ( http://freesoft.tvbok.com/win10/operation/ms-ime-yosoku.html ) で紹介されている方法で対処した。 2については、DNS キャッシュに問題があるらしい。対処法は、『「Google Chrome」にて「ホストを解決しています」という画面が表示されてから、インターネットアクセスが不可及び著しく低下する症状に関するまとめ』 ( http://www.japan-secure.com/entry/blog-entry-472.html )を参照。詳しいメカニズムはわからないが、キャッシュをクリアして、自動設定だったDNSサーバーをグーグルのパブリックDNSサーバーに切り替える二段階戦法で対処した。パブリックDNSサーバーの指定が必要なのかどうかは検証していない。 実は、何かのきっかけでキーボードが英語配列になってしまうという、未解決問題がある。一度解決したと思ったのに、解決していなかった。原因特定をやるには、Windowsがキーボード配列を設定する仕組みについて知らなければならないのだろうか。

Windows10 の日本語キーボード認識トラブルについて

Windows10にアップグレードしたのですが、しばらくして、日本語キーボードが英語キーボードとして認識されていることに気が付きました。いろいろ調べたのですが、Windows10に関する情報はまだほとんど無い状態でした。結局、Windows7用の解決策がそのままつかえました。 以下のURLの情報です。いったんPS/2キーボードを選択し、再起動ののち、デバイスドライバを自動更新する方法です。なんとも面倒ですが、これが効きました。 http://answers.microsoft.com/ja-jp/windows/forum/windows_7-hardware/usb%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89/0f570389-4220-411b-986c-9820cbada77b?auth=1

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

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

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 一昔前はダイレクトにメールを送ることができたものだが。。。スパム対策などのため、仕方が無い。

rsync のオプション忘れ

RasPi の設定をバックアップするために cron.daily に追加したバックアップスクリプトなのだが、肝心の rsync オプションを追加し忘れて、初回以来バックアップされていなかったことにようやく気がついた。"-a" オプションを追加して、とりあえず動作するようになったみたい。 TV録画エンコードのほうは、FFmpeg のエンコーダオプションをいろいろいじってみたら、かなりエンコード速度が変わることがわかった。" FFmpeg x264EncodingGuide " を参考に、いろいろと試してみたところ、以下の設定に変更。 -c:v libx264 -preset superfast -profile:v baseline -level 3.0 Core i5 750という古いCPUのマシンで frame rate 100fps を超える。h.264 の威力をほとんど生かしきれない設定。Baseline Profile なので B frame も使わない。まあ、これぐらいしないと、非力なマシンには辛い。

週末の様子

イメージ
土曜朝は、ベランダで育てているチューリップがきれいに咲いた。昨年より間を詰めて植えた影響なのか、今年は背が高い。 我が家ベランダのチューリップ 午後は、ランニングで東工大方面の桜をみに行ってみた。洗足池はまだまだこれからの様子だったが、人出は多かった。東工大へ行ってみると、満開に近い木もあってかなり多くの人で賑わっていた。特に本館前は親子連れや学生などで大にぎわい。さらに、大岡山駅前でも桜祭りのイベントが開かれていて、かなりの賑わいぶりだった。 東工大スロープ 夜は、チキングリルのハニーマスタードソースあえ、前回ソースが多すぎたので、半分の量にしたらちょうど良かった。また、マーマレードを抜いてみたのだが、やはり柑橘類の香りがあったほうが良いと思った。 雨の日曜日は、TV録画システムの整備を進めた。録画が済んだら自動的にiPhone向けのトランスコードをかけるようにした。さらに、トランスコードが完了したら、メディアサーバーのあるNASに移動するようにした。 方法としては、 EpgTimer の録画後の BAT ファイルに FFMPEG を呼び出すように記述した。FFMPEG のオプションは昨日の投稿と同じ。以下が BAT ファイルの中味。 @echo off rem Media converter path set FFMPEG=C:\TV\ffmpeg\bin\ffmpeg.exe rem MP4 storage path set MP4PATH=Y:\Media\TV rem TS file / output file set INFILE=$FilePath$ set OUTFILE=$FolderPath$\$FileName$-$SDYYYY$$SDMM$$SDDD$-$STHH$$STMM$.mp4 rem Remove error and info file DEL "$FolderPath$\$FileName$.ts*.err" DEL "$FolderPath$\$FileName$.ts*.txt" rem convert into h.264 720p %FFMPEG% -i "%INFILE%" -c:v libx264 -b:v 1000k...

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を使うために指定する必要がある。

メールサーバーのセットアップ

昨夜は Raspberry Pi にメールサーバーをセットアップした。何が良いのかよくわからなかったが、実績もあり、機能が十分で比較的軽量に見えた Postfix + Dovecot を選択。 結局、インストールしただけで終了。設定とテストは週末にやろう。外部のSMTPサーバへの転送を実現するためには認証が必要。ここでつまづきそう。 あとは、USBの無線LANドングルを追加した。設定に少し手こずったが、動いている。有線とのダブル接続。 これでVPN接続を通して、同じマシンのサービスにアクセス可能になるはずだったが、どうもそうならないみたいだ。。。要調査 2TBのHDDを増設して、自動バックアップを開始した。ただし、タイムマシンのような機能は持たせていないので、過去の設定に戻ることはできない。。

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は起きなかった。ちゃんと認識しているようだ。

EpgTimerでTV録画

昨晩はEpgTimerで録画を試してみた。色々なサイトで紹介されているように設定していくと、難なく動作した。試しに録画予約をしてPCをサスペンドにしてみたところ、予約時間の5分前くらいに自動的に復帰して、きちんと録画してくれた。 正直、ここまで簡単だと、あまり「やった」感がない。 というわけで、Spinel + EDCB + EpgTimer + TvTestでうまく予約録画から視聴ができるようになった。 ちなみに、PT3には、地上 x2、BS x2 の、計 4 チューナーが搭載されていることを今頃知った。なので、同時に最大 4chの録画が可能なのであった。ただし、うちは BS 見れないので最大 2chである。 時間をみつけて、iPadやiPhoneから録画番組を見られるようにしようと思う。 一番簡単なのは単純にファイルの共有かな。それか、メディアサーバを動作させるか。外部から見られるようにするには、トランスコードも必要。それはまた後で検討。

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である。