Introduction
Introduction Statistics Contact Development Disclaimer Help
mqtt-wrapper - brcon2024-hackathons - Bitreichcon 2024 Hackathons
git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fz…
Log
Files
Refs
Tags
Submodules
---
mqtt-wrapper (1664B)
---
1 #!/bin/sh
2 set -x
3 #
4 # $input_topic | $runtime $runtime_args | $output_topic
5 # 2>$error_topic
6 #
7 # application to run
8 runtime="${RUNTIME:-cat}"
9 # arguments to $runtime
10 runtime_args="${ARGS}"
11 # stdin for $runtime; where others send to
12 input_topics="${INPUT_TOPICS:-$$/in}"
13 # stdout of $runtime; where others need to subscribe
14 output_topic="${OUTPUT_TOPIC:-$$/out}"
15 # stderr of $runtime; where others can subscribe
16 error_topic="${ERROR_TOPIC:-$$/err}"
17
18 mqtt_broker="${MQTT_BROKER:-mx2.adamsgaard.dk}"
19 mqtt_port="${MQTT_BROKER:-65431}"
20 mqtt_user="${MQTT_USER:-bitreich}"
21 mqtt_password="${MQTT_PASSWORD:-bitreich}"
22 mosquitto_args="-h ${mqtt_broker} -p ${mqtt_port} -u ${mqtt_user} -P ${m…
23
24 cleanup() {
25 kill -TERM -- -$$
26 rm -f "$fin" "$fout" "$ferr"
27 rmdir "$fifodir"
28 exit 1
29 }
30
31 die() {
32 printf '%s: %s\n' "${0##*/}" "${1}" >&2
33 cleanup
34 exit "${2:-1}"
35 }
36
37 fifodir="$(mktemp -d)" || die 'mktemp'
38 fin="${fifodir}/in"
39 fout="${fifodir}/out"
40 ferr="${fifodir}/err"
41 mkfifo "$fin" "$fout" "$ferr" || die 'mkfifo'
42
43 # split multiple input topics separated by "," into separate args
44 subscribe_args="$(printf '%s' "$input_topics" | sed 's/,/ -t /g')"
45
46 # subscribe to input topic(s), add -v option if you want message topic a…
47 mosquitto_sub ${mosquitto_args} -t $subscribe_args >"${fin}" &
48
49 # create named pipes for output streams
50 mosquitto_pub ${mosquitto_args} -t "${output_topic}" -l <"${fout}" &
51 mosquitto_pub ${mosquitto_args} -t "${error_topic}" -l <"${ferr}" &
52 trap -- 'cleanup' ERR INT HUP EXIT CHLD
53
54 # run the program (lossy restart if it fails), connecting to named pipes
55 while :
56 do
57 $runtime $runtime_args <"${fin}" >"${fout}" 2>"${ferr}"
58 done
59
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.