我が家では、BluetoothドングルでSwitchBotから情報を取得し、ZabbixでグラフやLINE通知を行っています。
SwitchBot温湿度計の値をLinuxで取得しLINEへ通知 | KUSONEKOの見る世界
LinuxサーバでBluetoothを使用し、SwitchBot温湿度計プラスの情報を取得しました。その情報からZabbixでグラフやアラートをLINEに通知できるようにしました。
SwitchBot プラグミニの消費電力を取得しZabbixでグラフ化 | KUSONEKOの見る世界
LinuxサーバでBluetoothを使用し、SwitchBotプラグミニに繋いだエアコンの消費電力を取得しました。その情報からZabbixでグラフを作ってみました。
しかし、Bluetoothドングルが不調になり、エラーが出て情報が取得できなくなることが多々あります。
復旧させるには、サーバを再起動するか、Bluetoothドングルの抜き差しをする必要があります。
これを毎回やるのは面倒です。
調べてみると、LinuxであればUSBの抜き差しはコマンドで実施できることが分かりました。(物理的に抜き差しするわけではないですが)
サーバ環境:
CentOS Stream release 9
Zabbix 6.0.25
対象のUSBのBUS IDを調べる
まずは、BluetoothドングルのBUS IDを調べます。
# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub # dmesg | grep 0a12 [ 3.289984] usb 1-5.2: New USB device found, idVendor=0a12, idProduct=0001, bcdDevice=88.91
これでBUS IDが1-5.2ということが分かりました。
抜き差しコマンド
以下のコマンドで疑似的に抜き差しが実現できます。(スクリプトで実行するため、フルパスで書いています)
# /bin/echo 1-5.2 | /bin/tee /sys/bus/usb/drivers/usb/unbind # /bin/echo 1-5.2 | /bin/tee /sys/bus/usb/drivers/usb/bind
Zabbix設定
スクリプト作成
[管理]→[スクリプト]
[スクリプト作成]を押下。
名前:Bluetooth unplug plug
範囲:アクション処理
タイプ:スクリプト
次で実行:Zabbixエージェント
コマンド:/bin/echo 1-5.2 | /bin/tee /sys/bus/usb/drivers/usb/unbind
/bin/echo 1-5.2 | /bin/tee /sys/bus/usb/drivers/usb/bind
ホストグループ:すべて
[追加]を押下。
Zabbix Agentでコマンドの許可
Zabbix Agentの設定変更。
# vi /etc/zabbix/zabbix_agentd.conf (最後に追記) AllowKey=system.run[*]
コマンドをそのまま書くと、『Unsupported item key.』となってしまうため『*』を使用しました。
原因は今のところ不明です。
# vi /usr/lib/systemd/system/zabbix-agent.service (ユーザ、グループを変更) User=root Group=root
# systemctl daemon-reload # systemctl restart zabbix-agent
トリガー作成
SwitchBotの情報を取得するスクリプトを実行時、Tracebackという文字列が返ってきた場合をトリガーにします。
[設定]→[ホスト]→[Zabbix server]→[トリガー]
[トリガーの作成]を押下。
名前:Bluetoothドングル エラー
深刻度:軽度の障害
条件式:left(last(/Zabbix server/system.run[python3 /root/myscript/switchbot-meter_zabbix.py]),9)="Traceback"
[追加]を押下。
トリガーアクション作成
[設定]→[アクション]→[トリガーアクション]
[アクション作成]を押下。
名前:Bluetooth抜き差し
実行条件:[追加]を押下
タイプ:トリガー
オペレータ:等しい
トリガー:Bluetoothドングル エラー
実行内容 1
実行内容:[追加]を押下
処理内容:Bluetooth unplug plug
ターゲットリスト:現在ホストにチェック
[Add]を押下
[追加]を押下。
実行結果
以下の通り、エラー発生時にドングルの抜き差しが実行されるようになりました。
上記のアクション部分をクリックすると、以下のような実行内容が表示されます。