ネットワーク監視表示灯(パトライト)をシェルから操作してみた
@wakamotojpさんのncコマンドを利用する例をもとにして、ネットワーク監視表示灯(通称:パトライト)をシェルから操作してみました。
はじめに
ネットワーク監視表示灯は、SOCKET通信による操作をサポートしています。 TCPやUDPで、専用のコマンドを送信することで、パトライトの表示灯を操作できます。
下記ではSNMPを利用してパトライトを操作しましたが、もっと簡単にSOCKET通信を利用して、パトライトの表示灯を操作できます。
ソケット通信(SOCKET通信)
ヤフオクで入手したパトライトのNHシリーズ「NHP-3FB1」は、SOCKET通信をサポートしています。
SOCKET通信で専用コマンドをパトライトに送信することで、パトライトの表示灯を操作できます。 NH-FBシリーズでは、2種類のコマンドをサポートしています。
コマンド | 詳細 |
---|---|
PHNコマンド | PHN-3FBシリーズの制御プロトコル。 対応する表示灯は緑・黄・赤のみ。点滅パターン2が利用できない |
PNSコマンド | NHシリーズの表示灯・ブザーを制御する専用コマンド。すべての表示灯と状態に対応 |
ソケット通信設定
SOCKET通信を利用するために、Webブラウザからパトライトの設定を下記のようにします。 デフォルト値のまま利用します。
PHNコマンド
PHNコマンドは、古いパトライトのPNH-3FBシリーズ用のコマンドです。 2バイトのバイナリデータをTCP/UDPで送信することで、表示灯を操作します。
下図の通り、1バイト目は固定値で、2バイト目のビットで表示灯の状態を指定します。
古い機種用のため、NHシリーズの点滅パターン2などに追従できていません。対応していない表示灯の状態は下記のとおりです。
- 表示灯の赤・黄・緑の点滅パターン2
- 表示灯の青・白の点灯・点滅パターン1・点滅パターン2
- ブザーの鳴動パターン3、鳴動パターン4
表示灯の状態をビットで指定
nc(netcat)
コマンドで、表示灯の状態指定のバイナリデータをTCPで送信します。
ここでは、指定しやすいよう、2バイト目は2進数のビットで指定できるようにしています。
echo -ne '\x57\x'$(echo "obase=16;ibase=2;00000001" | bc) | nc -q1 192.168.11.101 10000
echoコマンドで、バイナリデータをncコマンドにパイプで渡しています。
\x57
は固定値です。
下記の部分で表示灯の状態を2進数のビットで指定しています。
$(echo "obase=16;ibase=2;00000001" | bc)
00000001
部分で、表示灯の状態を2進数のビットを指定しています。この例は、赤の表示灯を点灯する意味となります。
表示灯の制御コマンドを送信
nc
コマンドで、宛先IPアドレスと宛先TCPポート番号を指定しています。
nc -q1 192.168.11.101 10000
192.168.11.101が宛先IPアドレスで、10000が宛先TCPポート番号です。
実行例
下記の例は、表示灯の赤を制御しています。 点灯・消灯・点滅パターン1のみ指定できます。
# 赤点灯、それ以外は消灯 echo -ne '\x57\x'$(echo "obase=16;ibase=2;00000001" | bc) | nc -q1 192.168.11.101 10000 # 赤点滅(パターン1)、それ以外は消灯 echo -ne '\x57\x'$(echo "obase=16;ibase=2;00100000" | bc) | nc -q1 192.168.11.101 10000 # 緑・黄・赤 消灯 echo -ne '\x57\x'$(echo "obase=16;ibase=2;00000000" | bc) | nc -q1 192.168.11.101 10000
PNSコマンド
PNSコマンドは、NHシリーズの表示灯・ブザーを制御するコマンドです。 PNHコマンドと同じポート番号でバイナリデータを送信します。
下図の通り、合計12バイトのバイナリデータで、表示灯の状態指定は後半6バイトを利用します。 表示灯ごとに状態を1バイトで指定できるため、点滅パターン2に対応しています。
表示灯の状態を16進数で指定
echoコマンドで、16進数のバイナリデータをベタ打ちしています。
表示灯の状態指定の場合、前半6バイトx58\x58\x53\x00\x00\x06
は固定値です。
後半6バイトで表示灯ごとの状態を指定しています。
表示灯の状態をクリアするコマンドのみ、全体で6バイトの\x58\x58\x43\x00\x00\x00
となります。
# 赤点灯 echo -ne '\x58\x58\x53\x00\x00\x06\x01\x09\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 赤点滅パターン1 echo -ne '\x58\x58\x53\x00\x00\x06\x02\x09\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 赤点滅パターン2 echo -ne '\x58\x58\x53\x00\x00\x06\x03\x09\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 黄点灯 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x01\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 黄点滅パターン1 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x02\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 黄点滅パターン2 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x03\x09\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 緑点灯 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x09\x01\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 緑点滅パターン1 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x09\x02\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 緑点滅パターン2 echo -ne '\x58\x58\x53\x00\x00\x06\x09\x09\x03\x09\x09\x09' | nc -q1 192.168.11.101 10000 # 表示灯をクリア(リセット) echo -ne '\x58\x58\x43\x00\x00\x00' | nc -q1 192.168.11.101 10000
表示灯の操作結果
表示灯の操作で、下記の状態になるように指定した結果は下記のとおりです。
- 赤:点滅パターン1
- 黄:点滅パターン2
- 緑:点灯
- その他消灯
# 赤点滅パターン1、黄点滅パターン2、緑点灯、その他消灯 echo -ne '\x58\x58\x53\x00\x00\x06\x02\x03\x01\x00\x00\x00' | nc -q1 192.168.11.101 10000
おわりに
nc(netcat)
コマンドを利用することで、シェルから簡単にパトライトを操作することができます。
長時間かかるコマンドの実行が完了したら、
パトライトを光らせてみたり、
CI/CDの失敗時に光らせてみたり、様々なことに活用できます。
皆さん、ぜひとも自宅でパトライトを活用してみてください。