#!/bin/bash echo $$ > /var/log/pid/Smartping-.pid # Set Parameters Name='' domoticzserverip='127.0.0.1:8080' IDX='' IP='' bluetoothmac='' while [ 1 ] do # First network ping attempt fping -c5 -b 32 -t1000 $IP > /dev/null 2>&1 if [ "$?" = 0 ] ; then device="On" technology="Online, Wifi 1" success="yes" else success="no" fi # First bluetooth ping attempt if [[ $success != 'yes' ]]; then bt1=$(l2ping -c5 -s32 -t1000 "$bluetoothmac" > /dev/null 2>&1 && echo "On" || echo "Off") if [[ $bt1 == 'On' ]]; then device="On" technology="Online, Bluetooth 1" success="yes" fi fi # Second network ping attempt if [[ $success != 'yes' ]]; then fping -c5 -b 32 -t1000 $IP > /dev/null 2>&1 if [ "$?" = 0 ] ; then device="On" technology="Online, Wifi 2" success="yes" fi fi # Second bluetooth ping attempt if [[ $success != 'yes' ]]; then bt2=$(l2ping -c5 -s32 -t1000 "$bluetoothmac" > /dev/null 2>&1 && echo "On" || echo "Off") if [[ $bt2 == 'On' ]]; then device="On" technology="Online, Bluetooth 2" success="yes" fi fi # If the device is still offline, declare it for processing if [[ $success != 'yes' ]]; then technology="Offline" device="Off" fi # Check Online / Offline state of Domoticz device domoticzstatus=$(curl -s "http://"$domoticzserverip"/json.htm?type=devices&rid="$IDX"" | grep '"Data" :' | awk '{ print $3 }' | sed 's/[!@#\$%",^&*()]//g') CurTime=$(date '+%d/%m/%Y %H:%M'); # Compare ping result to Domoticz device status if [ "$device" = "$domoticzstatus" ] ; then echo "$CurTime | Device: $Name | Status: $technology" else echo "Status desynchronized, resynchronizing..." if [ "$device" = On ] ; then echo "$CurTime | Device: $Name | Sync: Online" curl -s "http://"$domoticzserverip"/json.htm?type=command¶m=switchlight&idx="$IDX"&switchcmd=On" 2>/dev/null 1>/dev/null else echo "$CurTime | Device: $Name | Sync: Offline" curl -s "http://"$domoticzserverip"/json.htm?type=command¶m=switchlight&idx="$IDX"&switchcmd=Off" 2>/dev/null 1>/dev/null fi fi #Waiting if Device is online if [ "$device" = On ] ; then echo "$CurTime | Device: $Name | Status: Online, Waiting" sleep 60 fi done