人気ブログランキング |

<   2011年 03月 ( 2 )   > この月の画像一覧

玄箱の計画停電対策(1)

東北関東大震災の影響で、最近計画停電がありますが、停電で常時ONにしている玄箱がバシッと落ちてしまうとそれだけでもショックなのに、停電が終わっても玄箱は電気が落ちたまま、自動的に復旧しません。まわりに誰か居ればスイッチをワンプッシュするだけで良いのですが、わざわざ頼むのも面倒。
ということで、電源が復旧したら自動的に電源ボタンをONするための工作をしました。




  1. やりたいこと
    停電から復旧したら、一呼吸おいて電源ボタンを押す動作(電源ボタンの回路を閉)をするだけです。本当はUPSのように、電源が落ちた瞬間からshutdown完了するまでバッテリ駆動するようなのも考えて見たいのですが、今はとりあえず落ちたら立ち上がるところまでです。

    非常に単純な動作ですが、機械的にボタンをプチッと押すのは精度的に不安だし、玄箱自体を開け閉めする際の邪魔にならないように綺麗に作るのが難しそう(面倒くさい)なので、電気的にタイマーを組み合わせて作ることにしました。

    機能としては、こんな波形を作りたいわけです。
    d0222779_20121894.jpg


    • 電源復帰とともにタイマー1が起動、1秒後に玄箱の電源スイッチの回路を閉する
    • 玄箱電源スイッチを閉でタイマー2起動、0.5秒で電源スイッチの回路を開にする

    たったこれだけです。
    でも、コストを抑えたいのでスイッチの開閉は安いメカニカルの小型リレー、タイマー1、タイマー2は単純なCR遅延回路で作ることにしました。



  2. 仕様検討
    一応作る前に5分くらい(!)は考えたんですが、遅れてONになるだけなら何も考えることは無いのですが、一応その後OFFにするという、2アクションあるので、状態遷移を考えると、CR遅延回路だけで作ろうと思うと結構面倒です。(やり始めて気が付いた‥‥)

    状態遷移としては、
    電源ボタンON待機状態->電源ボタンON中->電源ボタンOFF(定常状態)
    とループは無いので複雑なところは有りません。ただ上記の3つの状態を2つの独立したタイマーで作る上で、それぞれのタイマーをパラレルに置くか、シリーズに置くかが考えどころでした。


    パラレル
    d0222779_20114095.jpg




    シリーズ
    d0222779_20132086.jpg




    パラレルの方がタイマー自体は簡単ですが、タイマー1とタイマー2の出力をJKフリップフロップ(双安定マルチバイブレータ)が要るなぁと考え、面倒ということだけで(^^;、シリーズにしようと決めました。



  3. 製作!
    昔電子工作やっていたこともあって、たまたま手元にいくつかパーツがあったので、それらを使ってユニバーサルボードにC、R、Trを差し込んで回路を作って行きます。(超行き当たりばったりデス)

    タイマー1の出力からタイマー2をシリーズにつなげるところで苦戦。アナログ回路は面倒だなぁ、と久々に実感(しばらくデジタルばっかりだったもんで‥‥)
    タイマー2をタイマー1につなげると、タイマー1が動かなくなったり(トランジスタ回路はインピーダンス低いし)、電圧がなだらかな曲線なもんだから、入力電圧が変動すると時間がまちまちになる様子。

    結局タイマー1の出力からタイマー2のCR遅延回路を駆動するのを早々と断念し、タイマー2は面倒だけど単安定マルチバイブレータ回路にすることにした。最初からフリップフロップにしておけば良かったんだけどな。これだと出力もH/Lはっきりしているし、電圧による変動も少ない。

    単安定マルチバイブレータを使った回路(不採用だけど)

    d0222779_20254986.jpg



    一応思ったとおりの動作はするんだけど、致命的な問題が有りました。てっきり忘れてましたが、単安定でもマルチバイブレータ回路は初期値が確定しないんでしたよね。
    このため、何度か動かしていると、タイマー1で1秒後にONする前に既にタイマー2の初期値がONとなっていたり、ある時はなっていなかったり。これじゃぁ使えないよな。
    d0222779_20323382.jpg


    折角マルチバイブレータのところまでトランジスタで作ったし、パラレルにタイマーを配置しようかとも考えたけど、たまたま部品入れにNE555が1個だけあったので、これを使って足掻いてみる。これだとトランジスタで作った単安定マルチバイブレータのように、初期値がまちまちということも無いし、トリガーのインピーダンスも高いし、うまくいきそう。

    早速実験してみた。

    d0222779_20385471.jpg

    d0222779_20391257.jpg

    結果、期待通りの動作でした。

    結局タイマー1はトランジスタとCRの典型的な遅延回路、タイマー2は邪道にも(?)タイマーICを使ってしまって、何となくパッチワーク的な回路でイマイチ美しく無いのですが、まぁそんなこだわるモノでもないし、早く作っておきたいので、これで良いかと。

    まだ回路図に起こしていないので、続きは次回。


by tkn384 | 2011-03-30 20:09 | 電子工作

ネットdeダビングとftpの両立

ウチの玄箱は、元々外向きのftpサーバを作りたいから導入した経緯もあり、未だに我が家ではftpサーバとして玄箱は重要な役割を担っています。またtoshiba製HDDレコーダーも使っており、そのHDDが一杯になってきたら待避場所としてネットdeダビングで玄箱にデータをダビングしたい欲求も出てきて、そのために常時動いているこのftpサーバをのサーバとしても使えないかと考えるのはごく自然な流れでしょう。

玄箱にtoshiba製HDDレコーダーからダビングするためのクライアントとしては、先人達のブログでも多く紹介されているRDserviceを使って試してみました。ネットdeダビングはftpを使っていることは解っていたので、RDserviceを使うためにはftp(私はproftpd)を停止させなければなりません。しかしftpは止められない(止めたくない)ので、HDDレコーダーのデータをダビングする時は、一度windowsパソコンでVRD(windowsアプリでネットdeダビングと接続できるソフト)に転送したあと、windowsからsamba経由でサーバにファイルを送るという面倒くさいやり方を何年も続けていました。

ところが同じようなことを考えている人も居て、その方のブログを拝見して目からウロコでした。

http://flowernet.gr.jp/masm/RDService.html


仕掛けとしては、同じIPアドレスで同じポートは共有できないため、一つの物理インタフェースに仮想に二つのアドレスを割り振り、サービスをそれぞれ別個にぶら下げるという方法でした。
「なんで早く気が付かなかったんだろう!」と思いましたよ。私はどっちかというと「ftpの別ポートを使ってなんとかできないものか」と思っていたので、まさに目からウロコでした。

そこで、まず先人の方法に沿って、設定を実施。

  • 1.仮想アドレスの追加eth0:0

    我が家のIPアドレスに沿って以下のように設定

    玄箱1(外向けftpサーバ現在のIPアドレス)
    →eth0 192.168.0.132
    玄箱2(新しく作る仮想アドレス)
    →eth0:0 192.168.0.232
     


    起動時にeth0:0を作るため、/etc/network/interfacesに追加

    iface eth0 inet static
    address 192.168.0.132
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

    iface lo inet loopback

    iface eth0:0 inet static
    address 192.168.0.232
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

    auto eth0 lo eth0:0



    rebootしてifconfig -aでeth0:0ができることを確認。


  • 2.RDServiceの再コンパイル

    ここは私の力ではどうしようもないところ。RDServiceの動作が解らないので、先人の知恵の通りに実施。

    cd /usr/local/bin/RDService
    patch -p1 < patch
    make

    しかし同じRDService 1.0b5でありながら、うまくpatchが通らない‥‥。
    うまくパッチが当てられなかったファイルは.rejができるので、そのファイルと
    diffを見比べる。
    結局、なぜか微妙にsrcファイルが違うみたいでpatchがうまくできないみたい。

    仕方がないので、diffファイルを見て、手動でpatchする。
    私のところでうまくpatchができなかったのは、FTPService.javaとMain.javaでした。

    やったことはdiffファイルを見ながら、-のラインを+のラインにそれぞれのファイルの中の該当のラインを機械的に置き換えるだけなので、注意深くviでsrcを書き換えした。
    たしか10カ所くらいだっただろうか。


    終わったらmake clean ;makeでコンパイル。無事終了。

    起動のために、usr/local/bin/RDService/RDServiceを修正

    #!/bin/bash
    sudo /opt/java/jre/bin/java -jar /usr/local/bin/RDService/RDService.jar -s -p 55
    00:5509 -d /mnt/share/video/tmp/RD -n miz-box -a 192.168.0.232

    ここで、-aオプションを仮に外して実行してみると、RDServiceが0.0.0.0で立ち上がりエラーになるため、-aオプションが有効になるように変更できたことがわかる。

    念のため、/etc/rc.2/S99rdservice restart (ウチではS99にしてます)
    を実施すると、

    miz-box:/usr/local/bin/RDService# /etc/rc2.d/S99rdservice restart
    Shutting down RDService:
    Starting RDService:
    miz-box:/usr/local/bin/RDService# RDService 1.0 beta 5
    Copyright 2004,2005 raktajino. (http://homepage.mac.com/raktajino/)
    local IP address : /192.168.0.232
    FTP control : port 21
    FTP data : port 5500 - 5509
    FTP buffer size : 1048576
    NETBIOS NS : port 137
    NETBIOS service name : miz-box
    Destination directory : /mnt/share/video/tmp/RD
    Ready.

    192.168.0.232のポート21でRDServiceが開始されたことが解る。


  • 3.inetdの設定
    元のproftpdが192.168.0.132だけを使うように設定します。
    /etc/inetd.confを修正

    192.168.0.132,127.0.0.1:ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/prof
    tpd


    行の最初のIPアドレスで、listen時に使うアドレスを指定できるとは、知らなかった‥‥。

    そして忘れずに確認することがあります。
    ウチのproftpdは、もともとstandaloneで動いていたのを忘れていて(inetd.confを設定しているのに!)、起動しても最初に起動するproftpdがすべてのIPアドレスのポート21をおさえてしまったため、RDServiceが192.168.0.232で起動しようとしても、「もう使ってるよ」ってなエラーを吐いて終わってしまいました。

    うまく動かない場合は次の確認をしておくと良いと思います。

    netstat -nap

    正常に起動すれば、それぞれのIPアドレスに対して一つずつlistenに割り当てられます。
    tcp 0 0 192.168.0.232:21 0.0.0.0:* LISTEN
    16351/java
    tcp 0 0 192.168.0.132:21 0.0.0.0:* LISTEN
    1256/inetd

    ※javaはRDService、inetdはinetdから呼ばれるproftpdがlistenしているということ

    standaloneからinet経由で立ち上がるようにするためには、以下を修正。
    /etc/proftpd/proftpd.conf
    :
    ServerType inetd
    :


    これで一応テスト。
    windowsなどから、ftp 192.168.0.132とftp 192.168.0.232を実施して正常を確認。RDServiceの方はIDを要求されれば正常に動いていると思います。


    実機でも確認します。

    d0222779_1362393.jpg

    この裏でftpでファイル転送もできるか確認します。

    ネットdeダビングですが、inetdでもRDServiceでも特に排他制御はしていないので、何個でもプロセスが走りますので、たとえばRD-XS57とRD-H1と同時に同じ玄箱にダビングはできますが、やはりちょっとでも不安定になるとすぐ「ネットワークで障害があり中止しました」に成ってしまう確率が上がるので、無印玄箱なら一つが安心でしょう。
    by tkn384 | 2011-03-27 01:43 | 玄箱

  • 今の好きなことは、暇な時いじる玄箱とか家電とか


    by tkn384

    プロフィールを見る
    画像一覧
    更新通知を受け取る

    カテゴリ

    全体
    家電
    玄箱
    電子工作
    Raspberry Pi
    未分類

    以前の記事

    2014年 09月
    2014年 08月
    2014年 07月
    2014年 06月
    2014年 03月
    2013年 08月
    2012年 05月
    2011年 05月
    2011年 04月
    2011年 03月
    2011年 02月

    フォロー中のブログ

    メモ帳

    最新のトラックバック

    ライフログ

    検索

    タグ

    その他のジャンル

    ブログパーツ

    最新の記事

    玄箱サーバ死亡
    at 2014-09-23 16:39
    初代玄箱USB増設
    at 2014-08-31 14:05
    RaspberryPiのバッ..
    at 2014-07-21 23:31
    Windows7とWindo..
    at 2014-07-20 12:16
    Windows7のPCを買い..
    at 2014-07-06 01:48

    外部リンク

    ファン

    記事ランキング

    ブログジャンル

    ネット・IT技術

    画像一覧