【送信pgm】
# nano /etc/asterisk/scripts/dmr_monitor5.sh
中身は次の通り
#!/bin/bash
TTS_DIR="/tmp/asl-tts-root"
LOG_FILE="/var/log/mmdvm/MMDVM_Bridge-$(date -u +%Y-%m-%d).log"
echo "Monitoring $LOG_FILE (Displaying CALLSIGN and DURATION)..."
# 起動後の新規ログのみを監視
tail -n 0 -F "$LOG_FILE" | while read -r line; do
# 1. Voice Header 検知
if echo "$line" | grep -q "received network voice header"; then
CALLSIGN=$(echo "$line" | sed -n 's/.*from \(.*\) to TG.*/\1/p')
TIMESTAMP=$(echo "$line" | awk '{print $3}')
echo -n "$CALLSIGN "
# JH1BLT 以外の場合のみ音声を作成
asl-tts -n 52984 -t "Welcome ${CALLSIGN}" > /dev/null 2>&1
LATEST_FILE=$(ls -t "${TTS_DIR}"/*.ul 2>/dev/null | head -n 1)
echo "$LATEST_FILE :"
# 移動先パスを変数に格納
DEST_FILE="/tmp/asl-tts-root/$CALLSIGN"
# 移動元と移動先が異なる場合のみ mv を実行
if [ "$LASTEST_FILE" != "$DEST_FILE" ]; then
mv -f "$LATEST_FILE" "$DEST_FILE"
LATEST_FILE="$DEST_FILE"
fi
echo "LATEST_FILE=$LATEST_FILE "
LAST_TTS_PATH=$LATEST_FILE
PLAY_NAME=`echo "$LATEST_FILE" | sed 's/\.ul$//'`
LAST_CALL=$CALLSIGN
LAST_TS=$TIMESTAMP
fi
# 2. End of transmission 検知
if echo "$line" | grep -q "received network end of voice transmission"; then
# 数字とドット以外を完全に除去して確実に数値化する
DURATION=$(echo "$line" | sed -n 's/.* transmission, \(.*\) seconds.*/\1/p' | tr -d '[:space:]\r')
# デバッグ表示(これで値を確認してください)
echo "Check Duration: [$DURATION]"
# 再生判定: bc の結果を確実に変数に格納してから比較
IS_SHORT=$(echo "$DURATION < 2.0" | bc)
echo "IS_SHORT = $IS_SHORT "
if [ "$IS_SHORT" -eq 1 ]; then
echo "Short key detected ($DURATION s). Playing..."
# PLAY_NAME がフルパスであることを確認
asterisk -rx "rpt playback 52984 $PLAY_NAME"
asterisk -rx "rpt playback 52984 /tmp/asl-tts-root/at-jj1yeg"
rm "${LAST_TTS_PATH}" 2>/dev/null
fi
fi
done
コマンドとして実行できるように
# chmod 755 /etc/asterisk/scripts/dmr_monitor5.sh
次のサービスとして登録し自動起動とする
# nano /etc/systemd/system/dmr-monitor.service
中身は
[Unit]
Description=DMR Monitor and ASL3 TTS Playback Service
After=asterisk.service
[Service]
ExecStart=/etc/asterisk/scripts/dmr_monitor5.sh
Restart=always
RestartSec=5
User=root
StandardOutput=append:/var/log/dmr_monitor.log
StandardError=inherit
[Install]
WantedBy=multi-user.target
これを起動させるが、その前に音声ファイル?を作成しておくこと。
/tmp/asl-tts-root/at-jj1yeg
以下まだ工事中