最新のIPプロトコルを理解しているように、rs-232リスナーを制御します。

最新のIPプロトコルを理解しているように、rs-232リスナーを制御します。

私は既存のRS-232で制御されたOnkyoレシーバーとローカルネットワーク間のブリッジとして機能するLinuxボックスにサービスを設定したいと思います。これまで議論できる1つの方法はsocatを使用することです。

sudo socat tcp-l:60128,reuseaddr,fork file:/dev/ttyUSB0,nonblock,raw,echo=0,crnl,waitlock=/ttyUSB0.lock &

これにより、ボリューム、ソースなどの設定を変更できましたが、変更を確認する応答には、最新のイーサネット搭載レシーバーの応答に含まれる単純な文字列がありませんでした。したがって、イーサネット対応デバイスの応答を期待する現在の電話アプリケーションを使用して受信機を制御するために使用することはできません。

socatに応答の一部として追加の文字列を含める方法はありますか?それとも、メッセージに追加の文字列を追加するタイミングと場所を決定するために、いくつかのコードの両側にsocatの2つのインスタンスを取得できますか?

以前のRS-232および最新のIP方式のOnkyoプロトコルは、このExcelシートに記載されています(役に立つ場合)。 http://blog.siewert.net/files/ISCP%20AV%20Receiver%20v124-1.xls

すべての最新のOnkyo制御アプリケーションは、「!1ECNTX-NR609/60128/DX」などの応答を期待しながら、自動検出要求「!xECNQSTN」を送信し、状態が変わるたびに要求が変更されます(例:音量を上げる、音量を下げる)小さく))などがあるので、2つのsocatインスタンスを実行し、その間にいくつかのロジックを実行するなどのタスクを実行する必要があるようです。

いつでも新しい最新の受信機を購入することができますが、それはもっと満足できると思います:o)

これを行う方法のアイデアは非常に歓迎されています!

ベストアンサー1

イーサネットプロトコルにはいくつかのバイナリがあるように見えるため、Pythonのようにもっと複雑なものが必要になるかもしれませんが、まず次のようなbashスクリプトを使用できます~/myonkyo

#!/bin/bash
exec 2>/dev/tty
set -x
tty=/dev/ttyUSB0
stty -F $tty raw clocal -echo
exec 3<>$tty
echo "connection" >&2
while IFS= read -r -d $'\x1a' cmd
do  echo "$cmd" >&3
    echo "!1ECNTX-NR609/60128/DX"
done

各接続のsocatからスクリプトを起動します。

$ socat tcp-l:60128,reuseaddr system:~/myonkyo

あなたはこの問題の原因にならないように努力する必要があります。必要ttyUSB0に応じて、一時的に権限を付与またはアクセスできる正しいグループ(ダイヤルアウト?)に自分自身を配置してください。

スクリプトはすべての接続で実行され、デバッグ目的で/dev/ttystderrとして実行される場所を使用します。シリアルポートをfd 3で開きます。 「EOF」文字0x1aで終わる入力ラインを読み取り、cmdそれをシリアルポートに書き込み、標準出力(イーサネットなど)に提供したサンプル文字列を書き込みます。

受信した入力コマンドを識別し、それを同等のRS232プロトコルに変換して応答する必要があります。

おすすめ記事