ルーティング時にチャリーン♪音を鳴らす
自分のノードを通っていくルーティングが可視化されるのは楽しい。LNDgで眺めたり、Telegrambotに通知させたり。
同じように、音でも通知させたら面白いんじゃないだろうか。
というわけで、ルーティングが発生すると、チャリーン♪となるようにしてみた。
1.前提としている環境
- Raspberry Pi に umbrel をインストールし、ライトニングネットワークのノードを建てていること。
2.用意するもの
- 鳴らす音。waveファイルを準備する。「マリオ コイン wav」で検索してダウンロードしてきた。好きな音でOK。
- スピーカー。ダイソーの300円スピーカーにした。USBケーブルで給電するアンプ内蔵スピーカー。まあ、ステレオミニプラグの付いているスピーカーなら何でもよい。
3.ハードの設定
Raspberry Pi のステレオ音声出力にスピーカーをつなぐ。
ダイソースピーカーの電源入力のUSBもラズパイにつないでしまう。(電源がシビアな場合は他から取った方が良いかも。)
4.ソフトの設定
ソフトの動きは割と単純で、LNDのログを監視して、ルーティングが発生したら、waveファイルを再生。シェルスクリプトで書くことにする。
- waveファイルをumbrelにコピー
自分のPCにダウンロードしておいて、scpコマンドでコピーしてくるのが手っ取り早いかな。
scp C:\Users\ユーザ名\Downloads\coin.wav umbrel@umbrel.local:/home/umbrel/
- LNDのログを監視する方法
以下のサイトのスクリプトを使用。
LNDのログファイルの場所は、/home/umbrel/umbrel/app-data/lightning/data/lnd/logs/bitcoin/mainnet/lnd.log
監視する文字列は「Forwarded」。以下のログがフォワーディング発生時のログ。
2022-07-19 10:26:37.879 [INF] HSWC: Forwarded HTLC(4ea4c7f28595b8e80a7f937f37c8862175c1dae14db73d87416bd8f4125738df) of 96993910 mSAT (fee: 1000 mSAT) from IncomingChanID(743993:1402:1) to OutgoingChanID(729115:700:0)
- 音を鳴らす方法
Raspberry Pi で手っ取り早く音を鳴らすのは、 aplayコマンド。waveファイルを鳴らせる。
/usr/bin/aplay /home/umbrel/coin.wav
出来たスクリプトはこんな感じ。ほぼ上記のQiitaの人のを流用。
※夜中にチャリーン♪なんて、と苦情が来たので時間帯の制限を追加しました。直近ルーティングが少なく、あまりデバッグ出来てないので、おかしな動きしたらごめんなさい。
#!/bin/sh
# 検出対象ログファイル
TARGET_LOG="/home/umbrel/umbrel/app-data/lightning/data/lnd/logs/bitcoin/mainnet/lnd.log"
start_time=0800
finish_time=2200
# 検出文字列
_error_conditions="Forwarded"
# ログファイルを監視する関数
hit_action() {
while read i
do
now=$(TZ=UTC-9 date '+%H%M')
echo $i | grep -q "${_error_conditions}"
if [ $? = "0" ] && [ $now -ge $start_time ] && [ $now -lt $finish_time ]; then
# アクション
# echo "チャリーン♪"
/usr/bin/aplay /home/umbrel/coin.wav
fi
done
}
# main
if [ ! -f ${TARGET_LOG} ]; then
touch ${TARGET_LOG}
fi
tail -n 0 --follow=name --retry $TARGET_LOG | hit_action
これを、logchecker.shで保存。
- プログラムを実行する
chmod a+x logchecker.sh で実行権限を与えてやる。
nohup ./logchecker.sh & で実行。ログアウトしても終了しないようにバックグラウンドで動かす。
完成。ますますルーティングの発生が楽しみになったよ!
蛇足
LNDのログを監視しているだけなので、Raspberry Pi の umbrel 以外の環境でもおそらく動く。
プログラムをシェルスクリプトで書いて、aplayで音を鳴らしているのは、umbrelの環境に何もインストールしなくてもよいから。よく分からないものを入れて、umbrelの動作が不安定になるのは避けたい。
ラズパイで動いているumbrelには、眠っている機能がいろいろある、今回の音声出力やGPIOのピンなど。使わないのはもったいないよね?
今回さらに進めてKeysendでの受け取り時にも音を鳴らそうとしたのだけど、ログの拾い方が分からず断念。詳しい方、教えてください。