*dPWR* - ウェブベースのデジタル電源コントローラ
概要
ウェブベースの電力コントローラーが必要でした。大量のデバイスを遠隔制御するため、主電源(230VAC)と低電圧 DC の両方に対応し、スイッチ設定や電源状態などのリモート値も読み取れるものです。市場を調べたところ、許容できる価格帯に適切なものが見当たりませんでした(B2B 機器は数千ポンドの価格帯でした)。専用の回路基板を設計・製作したくなかったので、部品箱を漁り、手元にあるものを使って dPWR コントローラーが誕生しました。
Hardkernel.org の Odroid U3(Raspberry Pi 型の開発ボード)と U3 シールド、リレーおよびサイリスタスイッチングボード、いくつかの IO エキスパンダーチップと ATMega デバイスがありました。これらのパーツを組み合わせ、必要に応じてコンポーネントを追加できる先見性を持って dPWR を構築することにしました。ソフトウェアについては、Odroid が十分に強力で低消費電力であり、開発をはるかに容易にするため、組み込みアプリケーションではなく Linux オペレーティングシステムをベースプラットフォームとして採用しました。
時間が限られていたため、C/C++ は開発に時間がかかりすぎるとして除外し、Java、Python、Perl が候補に残りました。ちょうどクライアントの仕事で Perl アプリケーションを完成させたばかりだったこともあり、スクリプト言語として主にレポーティング用に開発されたものの、そのエコシステムが非常に豊富だったため、Perl を自然な選択としました。
dPWR の機能要件は以下のとおりでした:
- GPIO、I2C、シリアルポート、イーサネットポートと直接通信し、手元の様々なボードを活用するために設定、設定、読み取りを行う。必要に応じてハードウェアとサポートソフトウェアを追加できるモジュラーシステムが必要でした。
- リモート設定、制御、監視を可能にするウェブサーバーを提供する。
- dPWR がデバイスを監視して必要な行動を取れるように(例:ping)、設定可能な自動化を提供する。
上記は開発・実装され、過去 4 年間で信頼性高く稼働してきました。最近、Corsair 電源が故障したため dPWR ハードウェアを取り外してメンテナンスを行い、下記の写真を撮影しました。
ソフトウェアをパブリックドメインに公開します。現状のままの形、またはその一部を使用してカスタムデジタル電力コントローラーを構築したり、そのウェブインターフェースを他のプロジェクトに活用できると考えているためです。
dPWR ハードウェアの回路図はすべて紙ベースだったため、再作成が必要です。
Docker での評価
dPWR を評価するには、Docker イメージを作成して実行するのが最も簡単な方法です。
-
リポジトリをクローンして Docker イメージをビルドします。
cd ~ git clone https://git.eaw.app/eaw/dPWR.git cd dPWR docker build -f Dockerfile.dpwr -t dpwr . -
使用したいポートに 8080 をマッピングしてイメージを実行します。
docker run --rm -p 8082:8080 --name dpwr dpwr -
ウェブブラウザを開き、http://localhost:8082 にアクセスします。
- 以下の認証情報でログインします。
ユーザー: root パスワード: 0000 -
アプリケーションを停止します。
docker stop dpwr
dPWR のインストール
以下のセクションでは Debian またはその派生ディストリビューションへのインストールを前提としています。Red Hat ベースの Linux バージョンは yum コマンドに置き換えてください。
- 開発ボードのフラッシュ、SD、または eMMC に Linux をインストールします。
-
リポジトリをローカルの一時ディレクトリにクローンし、/usr/local にインストールして所有権を設定します。
cd ~ git clone https://git.eaw.app/eaw/dPWR.git cd dPWR cp -r dPWR/* /usr/local/DPWR/ chown -R www-data:www-data /usr/local/DPWR -
すべてのアップデートを適用します。
apt-get update apt-get upgrade -
必要な Linux パッケージをインストールします(Perl はパッケージのコンパイルにビルド環境が必要です。ビルド環境のインストールを避けたい場合はパッケージを手動で配置することもできます)。
apt-get install procps build-essential perl socat cpanminus vim -
必要な Perl パッケージをインストールします。
cpanm forks Switch CGI CGI::Session Device::SerialPort -
開発ボードにシリアルポート(物理または USB)がない場合は、socat 仮想 tty をインストールして、ATMEGA328P デバイスの選択が dPWR アプリケーションの停止を引き起こさないようにします。
# dPWR ATMEGA がシリアルポートと通信することを期待するため、仮想ポートを作成します。 # 必要であれば、コンテナのポートフォワーディング経由でシリアルポートに接続できます。 for i in {0..4} do socat pty,link=/dev/vcom${i},raw tcp4-listen:1000${i} & done # 上記は開発ボードの再起動時に失われます。dPWR 実行時に仮想ポートを永続的に # 存在させたい場合は、/usr/local/DPWR/etc/startDPWR スクリプトを編集して、 # 上記のコードブロックと同一の行のコメントを解除してください。 -
設定ファイル /usr/local/DPWR/etc/DPWR.cfg を編集し、以下の「HTTP Server configuration」ブロックを見つけて「your」で始まる値を設定します:
# HTTP サーバー設定パラメーター。 # HTTP_SERVER_HOST = "<your IP Address>" HTTP_SERVER_PORT = <your Port Number> HTTP_DOC_PATH = "/usr/local/DPWR/htdocs" HTTP_LOGFILE = "/usr/local/DPWR/log/dpwr_http.log" HTTP_PASSWORD = "0000" HTTP_MAX_RETRIES = 3 HTTP_SESSION_TIMEOUT = 600開発ボードにシリアルポートがある場合は、以下を見つけてボードの実際のデバイス名に変更してください。そうでない場合はステップ 6 を実行してください。
DEVICE_1_UART = "/dev/<your serial 1 device>" DEVICE_2_UART = "/dev/<your serial 2 device>"注意: 設定ファイルには 2 つの CONFIG ブロックがあります。「PRODUCT v2dev」キーワードが使用するブロックを示します。このようなブロックはいくつでも作成できますが、アクティブにできるのは 1 つだけで、PRODUCT キーワードで示されます。
-
dPWR サーバーはユーザースペースプロセスとして実行されますが、システムレベルの設定プログラムへのアクセスが必要です。このために SUID root で実行し必要なシステムコマンドを呼び出すラッパースクリプトが作成されています。ix プログラムは以下のように SUID root を設定する必要があります:
cd /usr/local/DPWR/bin chown root:root ix ix-x86 ix-arm chmod 4755 ix ix-x86 ix-arm -
dPWR アプリケーションを起動します。
cd /usr/local/DPWR/bin ./startDPWRエラーメッセージが出力されている場合は修正してください。例:「Cannot open UART」は 7 で設定した UART に問題があることを意味します。確認して、必要であれば物理的なシリアルポートが動作するまでステップ 6 に戻ってください。
- ネットワーク上のウェブブラウザを開き、7 で設定した http://<IP>:<Port> に接続して動作を確認します。
dPWR ウェブインターフェース
設定ファイルとページを可能な限り活用した包括的なウェブインターフェースが Perl で開発されました。以下の画像はウェブインターフェースの基本画面を示しています。
ユーザー/パスワードでログインします。4 人のユーザーが事前定義されており、それぞれ異なる権限を持っています。
ホーム画面 — 空白ですが、ステータスや他の必要なデータ/説明を簡単に追加できます。
プライマリ出力制御画面。有効化されて出力用に設定された各ポートが説明とオン/オフスイッチとともに表示されます。制御デバイスの状態を簡単に変更できます。複数のユーザーがシステムを使用している場合、「自動更新」をチェックすると別のユーザーがスイッチを変更した際にこのビューが更新されます。
プライマリ入力状態画面。有効化されて入力用に設定された各ポートが現在値とともにオン/オフスイッチの形式で表示されます。「自動更新」をチェックすると定期的(設定可能)にデバイスが再読み込みされ状態が表示されます。
デバイス設定画面。ここでデバイスを追加して設定データを設定できます。有効化されたデバイスはそのポートをグローバルプールに割り当てます。
ポート設定画面。ここでポートを有効/無効にして設定を構成できます。
ポートタイマー画面。ここで出力ポートをスケジュールで実行するように設定できます。ポートごとに 8 つのタイマーがあります。
Ping アクティビティによるポート変更画面。ここでネットワーク ping の成否に応じてポートを変更するように設定できます。例:ポートがルーターを制御していて、設定時間後に ping が確立できない場合、自動的にルーターの電源をオフにして再起動します。
以下の画面でユーザーは dPWR ハードウェアの状態を確認できます。



DDNS 設定画面。自動 Dynamic DNS 更新を設定できます。dPWR が変化する動的 IP アドレスの背後にある場合、このオプションを使用して Dynamic DNS ホスト名を現在の IP で更新することで、常に dPWR に接続できます。
メール設定画面。状態変化が発生した際(例:pinger が失敗してデバイスを自動再起動する)のメールアラートを設定できます。
現在のユーザーパスワード変更画面。
時刻設定画面。タイマーを使用する場合に必要な現在の日付と時刻を、手動または NTP サービス経由で入力できます。
dPWR 設定パラメーター設定画面。特定の dPWR ランタイム値を変更します。
今後の予定
- このドキュメントをより使いやすいインストールガイドに仕上げる。