kooshinlab / コーシンラボ

現役ネットワークエンジニアが、ネットワーク運用で必要になった技術の記事を書くブログです。

ネットワーク監視表示灯(パトライト)をシェルから操作してみた

@wakamotojpさんのncコマンドを利用する例をもとにして、ネットワーク監視表示灯(通称:パトライト)をシェルから操作してみました。

はじめに

ネットワーク監視表示灯は、SOCKET通信による操作をサポートしています。 TCPUDPで、専用のコマンドを送信することで、パトライトの表示灯を操作できます。

下記ではSNMPを利用してパトライトを操作しましたが、もっと簡単にSOCKET通信を利用して、パトライトの表示灯を操作できます。

kooshin.hateblo.jp

ソケット通信(SOCKET通信)

ヤフオクで入手したパトライトのNHシリーズ「NHP-3FB1」は、SOCKET通信をサポートしています。

SOCKET通信で専用コマンドをパトライトに送信することで、パトライトの表示灯を操作できます。 NH-FBシリーズでは、2種類のコマンドをサポートしています。

コマンド 詳細
PHNコマンド PHN-3FBシリーズの制御プロトコル。 対応する表示灯は緑・黄・赤のみ。点滅パターン2が利用できない
PNSコマンド NHシリーズの表示灯・ブザーを制御する専用コマンド。すべての表示灯と状態に対応

ソケット通信設定

SOCKET通信を利用するために、Webブラウザからパトライトの設定を下記のようにします。 デフォルト値のまま利用します。

  • セットアップ項目>ソケット通信設定

f:id:KOOSHIN:20200210215059p:plain
ソケット通信設定

PHNコマンド

PHNコマンドは、古いパトライトのPNH-3FBシリーズ用のコマンドです。 2バイトのバイナリデータをTCP/UDPで送信することで、表示灯を操作します。

下図の通り、1バイト目は固定値で、2バイト目のビットで表示灯の状態を指定します。

古い機種用のため、NHシリーズの点滅パターン2などに追従できていません。対応していない表示灯の状態は下記のとおりです。

  • 表示灯の赤・黄・緑の点滅パターン2
  • 表示灯の青・白の点灯・点滅パターン1・点滅パターン2
  • ブザーの鳴動パターン3、鳴動パターン4

f:id:KOOSHIN:20200210215631p:plain
PNHコマンド

表示灯の状態をビットで指定

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に対応しています。

f:id:KOOSHIN:20200210215257p:plain
PNSコマンド

表示灯の状態を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の失敗時に光らせてみたり、様々なことに活用できます。

皆さん、ぜひとも自宅でパトライトを活用してみてください。