[fli4l] Bestimmten Zus?==?utf-8?Q?tand auf fli4l an Netzwerk-G?==?utf-8?Q?erät pushen?

K. Dreier usenetforum at gmx.net
Fr Feb 3 10:36:15 CET 2017


Hallo,

ich habe mir nun mal den ersten Teil eines Skripts gebastelt, um
basierend auf dem Online/offline-Zustand eines Netzwerkgerätes
bestimmte Aktionen auszuführen. Da ich mir das skripting in den letzten
zwei Tagen erst angeeignet habe, wäre ich sehr froh, wenn das mal
jemand anschauen könnte. Insbesondere fehlt mir eine
Error-exit-Funktion, um zu verhindern, daß dieses dauerhaft laufende
Skript Amok läuft bzw. es unbemerkt bleibt, wenn es ein Problem gibt
und das Skript nicht läuft. Aber das ist ein zweiter Schritt. Erstmal
muß das so überhaupt Sinn machen/funktionieren (Indentierungen sind
verlorgen gegangen):

------
#!/bin/sh
while true
do

# define smartplug name here
SMARTPLUG="smartplugname"

# define boss-device names here to allow for use of variables in the
rest of the script
DEVICE1=name1
DEVICE2=name2
#DEVICE3=
#DEVICE4

# this will read the _current_ edimax status which is, via the other
script, output into a txt file
# account for setup with more than 1 plug by using specific
status-scripts
sh /data/edimax/$SMARTPLUG/get_edimax_${SMARTPLUG}_status.sh

# we want to look for "ON" in the txt file which was created by the
get-script above
EDIMAX_STATUSLOOKUP="ON"

# -q means no output; look for "ON" in given file
if [ grep -q $EDIMAX_STATUSLOOKUP
/data/edimax/$SMARTPLUG/edimax_${SMARTPLUG}_status.txt ]
then
	echo "Initial status check: Edimax '$SMARTPLUG' plug is 'on'" # used
for testing onnly
	EDIMAX_STATUS="on"
else
	echo "Initial status check: Edimax '$SMARTPLUG' plug is 'off'" # used
for testing only
	EDIMAX_STATUS="off"
fi

# for testing only
sleep 5 # delete later

#  check for boss devices and set variable if online
DEVICE1_ONLINE=
if [ -f /var/run/arping.stat/$DEVICE1.online ]
then
	DEVICE1_ONLINE="true"
fi

DEVICE2_ONLINE=
if [ -f /var/run/arping.stat/$DEVICE2.online ]
then
	DEVICE2_ONLINE="true"
fi

# now act depending on the status of boss devices and status of plug
# check if at least one of the boss devices is online
# add or remove boss devices here as required
if [ $DEVICE1_ONLINE = "true" ] || [ $DEVICE2_ONLINE = "true" ]
then
	echo "at least 1 boss device is connected" # comment out later
	# check if plug is "off"; prevents constant firing of the on-script
	# if not on, turn on and set status to "on"
	if [ $EDIMAX_STATUS != "on" ]
	then
		# command to execute when at least 1 boss device is connected; turn on
plug
		sh /data/edimax/$SMARTPLUG/turn_on_edimax_$SMARTPLUG.sh
		EDIMAX_STATUS="on"
	# if plug is already turned on do nothing  --  ## this
"else-$SMARTPLUG-part" can be deleted later
	else # delete later
		echo "edimax '$SMARTPLUG' is already on" # delete later
	fi

# check resultet in: none of the boss devices is online; turn off plug
and set status to "off"
else
	echo "no boss device is connected" # comment out later
	# check if plug is "on"; prevents constant firing of the off-script
	# if not off, turn off and set status to "off"
	if [ $EDIMAX_STATUS != "off" ]
	then
		# command to execute when no boss device is connected
		sh /data/edimax/$SMARTPLUG/turn_off_edimax_$SMARTPLUG.sh
		EDIMAX_STATUS="off"
	# if plug is already turned off do nothing  --  ## this
"else-$SMARTPLUG-part" can be deleted later
	else # delete later
		echo "edimax '$SMARTPLUG' is already off" # delete later
	fi
fi

# longer sleep value to avoid shut off of plug when boss device(s)
involuntarily disconnect
# sleep 120
sleep 8 # for testing only
done
----------

Ich versuche das Skript durch Variablen "generisch" zu halten, so daß
es einfach für weitere, andere Smartplugs verwendet werden kann. Seht
ihr irgendwelche offensichtlichen Fehler? Ich kann das leider aktuell
nicht testen, das geht erst später.

Hat jemand eine Idee für eine clevere Error-Lösung? Ich würde diese
dann so ausbauen, daß irgendwo an einem Netzwerkgerät eine Meldung
einginge, falls das Skript hängt.

Gruß
Klaus


Mehr Informationen über die Mailingliste Fli4L