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