Ping script / Alive check

Moderator: leecollings

Post Reply
timmpo
Posts: 14
Joined: Sunday 24 February 2019 10:26
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Ping script / Alive check

Post by timmpo »

I have trouble with system alive checker so i wrote a little shell script...

A script for alive system check that post json to Domoticz dummy switch. No need for edit crontab

Make some dummy switch in Domoticz
Edit the settings in the script
Save script file in /home/pi/domoticz/scripts
Give the script ritghs to execute (sudo chmod 777 filename) or (sudo chmod -R 777 dir name ) or (sudo chmod u+x filename)
Test the script in terminal
Make the script to run at startup: https://www.dexterindustries.com/howto/ ... t-startup/


Code: Select all

#!/bin/bash
#-------------SETINGS----------------
#------------------------------------
# Devices:
#
# To add devices just copy/paste and edit the new lines

NAME[1]="1. Samsung A8"	#Name of device
HOST[1]="192.168.1.124"	#Ip
IDX[1]="56"  	#Domoticz IDX (dummy switch)
STATE[1]="0" 	#Allways 0 (dont edit!)
RETRY[1]=2	#Cycles to fail before sending json off to domoticz

NAME[2]="2. ESP8266 / Sunheat"
HOST[2]="192.168.1.202"
IDX[2]="57"
STATE[2]="0" #Allways 0
RETRY[2]=2

NAME[3]="3. Chromecast / TV"
HOST[3]="192.168.1.125"
IDX[3]="58"
STATE[3]="0" #Allways 0
RETRY[3]=2

NAME[4]="4. 433 Mhz Gateway"
HOST[4]="192.168.1.200"
IDX[4]="59"
STATE[4]="0" #Allways 0
RETRY[4]=2

NAME[5]="5. Current Meter"
HOST[5]="192.168.1.201"
IDX[5]="60"
STATE[5]="0" #Allways 0
RETRY[5]=2

NAME[6]="6. Floor Heating"
HOST[6]="192.168.1.203"
IDX[6]="61"
STATE[6]="0" #Allways 0
RETRY[6]=2

# Script settings:
# Domotics Host IP/Port
DOMOTICZ="192.168.1.131"
PORT="8080"
# No of devices to check:
DEVICES="6"
#Packets to send
COUNT=1
#Cycle time between runs in sec
TIMER=60
#Loging to file on/off (1 = on)
LOGING=0
# 
# 
#-------------------------------------
#-------------------------------------
#Setting up the devices, retrys, settings and showing host info. (dont edit below)

RETRYz=0
i="1"
echo ""
printf '\e[1m'

if [ "${LOGING}" = "1" ]; then
echo "Loging to file = on"
fi

echo ""
echo ""
echo "Devices to ping:"

while [ "$i" -le "$DEVICES" ]; do
let "RETRYz[$i] = RETRY[$i]" #setting up devices retrys
#echo ${RETRYz[i]} #$RETRY[$i]	#debugging...
echo ""
#echo "$i".""
echo ${NAME[$i]}
echo ${HOST[i]}
i=$(( $i + 1 ))
done

echo ""
echo "Press ctrl+c to exit"
printf '\e[0m'
x="0"  # run once / # when script run once it increment to 1 
while true; do
i="1"
#-le
echo ""

printf '\e[32m'
echo "Pinging Devices..."
echo ""
printf '\e[0m'

    while [ "$i" -le "$DEVICES" ]; do
    sleep 0.5
    
	#if [ $x = "0" ]; then
	#RETRY[$i]=RETRYz
    #fi
        for myHost in ${HOST[i]}
        do
        count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
        if [ $count -eq 0 ]; then
        # 100% failed
		
		#echo "$i".""
		printf '\e[1m'
		echo ${NAME[$i]}
		printf '\e[0m'
		printf '\e[31m'
		if [ "${LOGING}" = "1" ]; then
        echo "Host : $myHost is down (ping failed) at $(date)" >> panglog.log
		echo "Host : $myHost is down (ping failed) at $(date)"
		else
		echo "Host : $myHost is down (ping failed) at $(date)"
		fi
		
		printf '\e[0m'
        if [ "${STATE[i]}" = "1" ] || [ $x = "0" ]  # if [ "${STATE[i]}" = "1" ] || [ $x = "0" ]
        then
		if [ $x = "1" ]; then #shuld be 1
		#echo ${RETRYz[i]}
		(( RETRYz[i]-- ))
		#echo ${RETRYz[i]}
		fi
		if [ "${RETRYz[$i]}" = "0" ] || [ $x = "0" ]
		then
		printf '\e[32m'
		echo "Sending JSON Off"
		printf '\e[0m'
		curl http://$DOMOTICZ:$PORT/json.htm?"type=command&param=switchlight&idx=${IDX[i]}&switchcmd=Off"
		STATE[$i]=0
		
		fi
		echo "--------------------------------------------------------------"
        echo ""

        fi
        else
		
        #echo "$i".""
		printf '\e[1m'
		echo ${NAME[$i]}
		printf '\e[0m'
		if [ "${LOGING}" = "1" ]; then
		echo "Host : $myHost Sucess! at $(date)" >> panglog.log
		echo "Host : $myHost Sucess! at $(date)"
		else
		echo "Host : $myHost Sucess! at $(date)"
		fi
        if [ "${STATE[i]}" = "0" ]  || [ $x = "0" ]  
        then
		printf '\e[32m'
		echo "Sending JSON On"
		printf '\e[0m'
        curl http://$DOMOTICZ:$PORT/json.htm?"type=command&param=switchlight&idx=${IDX[i]}&switchcmd=On"
        STATE[$i]=1
		#RETRY[$i]=RETRYz
		let "RETRYz[$i] = RETRY[$i]"
		echo "--------------------------------------------------------------"
		echo ""
               
        fi
  fi
    i=$(( $i + 1 ))
#    echo "$i"
      
	done
	
done
x="1"  # first cycle done
#-------------------------------------------------------- Remove this if you want to use cronetab to run the script!
printf '\e[31m'
#printf '\e[1m'
echo ""
echo "                    Sleep for $TIMER""s"
echo ""
#echo "|                                                           |"
printf '|'
(( $TIMER - 2 ))		
		#Sript indicator.. 
		y=0
		#intf '\e[41m'
		while [ "$y" -le "$TIMER" ] ; do
		printf ' '
		y=$(( $y + 1 ))
		done
printf '|'
		
(( $TIMER + 2 ))
echo ""			
printf ' '
		#Sript indicator.. 
		y=0
		#intf '\e[41m'
		while [ "$y" -le "$TIMER" ] ; do
		printf '#'
		y=$(( $y + 1 ))
		sleep 1
		done
		printf '\e[0m'
#----------------------------------------------------------------------------- End remove!

done # Save this! 
HvdW
Posts: 612
Joined: Sunday 01 November 2015 22:45
Target OS: Raspberry Pi / ODroid
Domoticz version: 2023.2
Location: Twente
Contact:

Re: Ping script / Alive check

Post by HvdW »

Simple and effective!
Bugs bug me.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest