#!/bin/bash USERNAME="myuser" PASSWORD="mysecret" MQTT_SERVER="mqtt.psuter.ch" if [ -z "$(ls -A /app)" ]; then echo "installing dss mqtt bridge (see https://github.com/cgHome/mqtt-dss-bridge)" cd /app npm install --save mqtt-dss-bridge echo "IMPORTANT: configure the bridge by editing /app/node_modules/mqtt-dss-bridge/config.js" echo "installation completed" fi echo "Starting DSS to MQTT bridge" # start the bridge in the background cd /app node /app/node_modules/mqtt-dss-bridge/index.js 2>&1 & PID=$! echo "DSS Bridge started with PID $PID" # start a loop to monitor the status every second errcntr=0 lastUpdate=999 while true; do lastUpdate=$(( \ $(date +%s)\ -\ $(date -d "$(\ mosquitto_sub -h $MQTT_SERVER -u $USERNAME -P $PASSWORD -t dss/state/lastDiscovered -C 1 | \ sed -E -e 's/"([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2}).*$/\1 \2Z/'\ )" +%s)\ )) if [ 10 -lt $lastUpdate ]; then if [ $errcntr -lt 10 ]; then let errcntr++ echo "DSS Bridge state is too old (last updated $lastUpdate seconds ago, max 10 allowed). This was failure $errcntr out of 10 accepted failures" else echo "DSS bridge state is still too old ($lastUpdate seconds) after 10 retries. killing mqtt-dss-bridge (pid $PID) and exit with error status 1" kill $PID exit 1 fi fi sleep 1 done