私が理解している制限では:
クライアントは、MQTTライブラリーが実行されている限り、マイクロコントローラーからサーバーまで、任意のデバイスにすることができますが、すべてのネットワークを介してMQTTブローカーに接続する必要があります。
ブローカーはすべてのメッセージを受信し、これらのメッセージをサブスクライブされたクライアントに送信することを担当します。
したがって、現在MQTTストリームから特定のデータをフィルタリングするbashスクリプトがあります。フィルタ処理された情報はcsvファイルに保存され、後でMySQLテーブルを更新するために呼び出されます。
尋ねる:MySQLテーブルを更新するbashスクリプトをMQTTブローカーにクライアントに購読して、新しいデータが送信されるたびにそれをMySQLテーブルにプッシュ/転送できるようにするにはどうすればよいですか。
答え1
個人的には、ビッシュボッシュは私の好みに比べて複雑すぎると思います。私はSQLに精通していませんが、mqtt部分を試してみましょう。コマンドを読み取って実行するには、mosquitto_subを実行するリスナーが必要で、端末から出力ストリームを購読する必要があります。最後に、コマンドを送信するにはハンドラが必要です。リスナーの場合は、次のように試すことができます。
#!/bin/bash
##########################
# MQTT Shell Listen & Exec
host=$2
clean="output input cmds";p="backpipe";pid=$(cat pidfile)
ctrl_c() {
echo "Cleaning up..."
rm -f $p;rm "$clean";kill $pid 2>/dev/null
if [[ "$?" -eq "0" ]];
then
echo "Exit success";exit 0
else
exit 1
fi
}
listen(){
([ ! -p "$p" ]) && mkfifo $p
(mosquitto_sub -h $host -t input >$p 2>/dev/null) &
echo "$!" > pidfile
while read line <$p
do
echo $line > cmds
if grep -q "quit" cmds; then
(rm -f $p;rm $clean;kill $pid) 2>/dev/null
break
else
(bash cmds | tee out) && mosquitto_pub -h $host -t output -f out;>out
fi
done
}
usage(){
echo " Mqtt-Exec Listener Via Bash"
echo " Usage: $0 <mqtt server>"
echo " Subscripe to topic \"output\", publish to topic \"input\""
}
case "$1" in
-h|--host)
trap ctrl_c INT
listen
;;
*)
usage
exit 1
;;
esac
コンテンツをストリーミングしようとしない限り、これはうまく機能します。この場合、コンテンツを何らかの方法でエンコードするか、新しい行をエクスポートする必要があります。ただし、これはmqttを介してコマンドを送信するのに機能します。
その後、出力ストリームを購読してシェル出力を表示できます。
mosquitto_sub -h $host -t input
最後に、ハンドラの場合は次のようになります。
#!/bin/sh
cmds="$@"
echo $cmd | mosquitto_pub -h $host -t input -l
exit
ハンドラを使用してtmuxセッションで実行でき、インタラクティブシェルがあります。ウィンドウ1:
./handle echo "This is an interactive mqtt shell!"
ウィンドウ2:
This is an interactive mqtt shell!
答え2
xargs
業務用として使用します。例えば
mosquitto_sub -h <yourhost> -t <yourtopic> | xargs -I %output% ./handleMessage.sh %output%
あるいは、コードの複雑さに応じて、MySQL-DBに値を書き込むコマンドを直接実行できます。
$1
それ以外の場合は、handler.shスクリプトを介してMQTT出力にアクセスできます。
スクリプト例:
#!/bin/bash
echo "$1" >> MQTT-Values.csv
# Enter your command to write to MySQL here
私はこのコードを好みます。なぜなら、mosquitto_sub
このコードは非常に軽く、理解しやすく、メンテナンスが簡単だからです。
答え3
ビッシュボッシュに会ったことがありますか?それは仕事をしなければなりません。
bash、dash、BusyBox ashなどに適したMQTTシェルスクリプトクライアントです。
答え4
私にとって、ビッシュボッシュはとても複雑です。私のデスクトップのUbuntuシステムで動作させることはできませんし、おそらくビジボックスを実行しているルーターに接続しないでしょう。私はChev_603sスクリプトを使用してmqttロガーを作成しました。私はそれをgithubに投稿しました:https://github.com/pkoevesdi/MQTT-Logger。誰でも自由に使用して改善できます。