Last active 1747055737

Simple script listens to a MQTT value change and shutdown the machine

mqtt_shutdown_listen.sh Raw
1#!/usr/bin/env zsh
2
3
4if [ -z "$RASPISTUFF_DIR" ];then
5 export RASPISTUFF_DIR="$(cd "$(dirname "$(readlink -f "${(%):-%x}")")" && pwd)"
6fi
7
8
9cd $RASPISTUFF_DIR
10
11
12if [ ! -f "$RASPISTUFF_DIR/secret/credentials_mqtt.sh" ]; then
13 echo "$RASPISTUFF_DIR/secret/credentials_mqtt.sh not found. Will NOT listen for MQTT."
14 exit 1
15fi
16
17source $RASPISTUFF_DIR/secret/credentials_mqtt.sh
18
19shutdown_if_needed() {
20
21 local payload=$1
22 echo "TOPIC $MQTT_TOPIC is now = $1"
23 if [ "$payload" = "1" ]; then
24 echo "Shutdown command received. Shutting down the system..."
25
26 MSG_TITLE="✋ Shutdown $(hostname)"
27 MSG_TEXT="MQTT Shutdown requested in $MQTT_TOPIC"
28
29 NOTIFY_SCRIPT="$RASPISTUFF_DIR/notify.sh"
30 #Requires MSG_TITLE and $MSG_TEXT to be defined!
31 source "$NOTIFY_SCRIPT"
32
33 echo "Will shutdown in 5 seconds..."
34 sleep 5
35 sudo shutdown -h now "MQTT requested shutdown in topic $MQTT_TOPIC"
36 fi
37}
38
39while true; do
40
41echo "listening to topic $MQTT_TOPIC "
42mosquitto_sub -h "$MQTT_BROKER" -p "$MQTT_PORT" -t "$MQTT_TOPIC" -u "$MQTT_USER" -P "$MQTT_PASSWORD" | while read -r payload
43do
44 shutdown_if_needed "$payload"
45done
46
47echo "mosquitto client EXITEDi will try again in 5 minute"
48
49sleep 300
50done
51