mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +00:00
95 lines
2.6 KiB
Bash
95 lines
2.6 KiB
Bash
|
#!/bin/sh
|
||
|
#
|
||
|
# script to generate a random number of on/off events to simulate presence eg.
|
||
|
# while on holidays. normally this script would be executed by an event like a
|
||
|
# dawn-sensor (you wouldn't want light during the day...:-)
|
||
|
#
|
||
|
# Copyright STefan Mayer <stefan@clumsy.ch>
|
||
|
|
||
|
################## configuration ###########################
|
||
|
#number of events (min - max)
|
||
|
event_min=5
|
||
|
event_max=20
|
||
|
|
||
|
#maximum delay in minutes
|
||
|
delay_max=240
|
||
|
|
||
|
#minimum and maximum ontime in minutes
|
||
|
ontime_min=5
|
||
|
ontime_max=60
|
||
|
|
||
|
#devices to consider
|
||
|
declare -a devices='("dg.gang" "dg.wand" "dg.dusche" "dg.bad" "dg.reduit")'
|
||
|
|
||
|
#output variant [oft|onoff]
|
||
|
#oft: use one at with on-for-timer of system
|
||
|
#onoff: use two at, one for on one for off
|
||
|
variant="onoff"
|
||
|
|
||
|
#command to execute
|
||
|
#command_start="/opt/fhem/fhem.pl 7072 \""
|
||
|
command_start="echo /opt/fhem/fhem.pl 7072 \""
|
||
|
command_end="\""
|
||
|
|
||
|
|
||
|
##################### Shouldnt need any changes below here #####################
|
||
|
|
||
|
# count number of devices
|
||
|
count=0
|
||
|
for i in ${devices[*]}
|
||
|
do
|
||
|
((count++))
|
||
|
done
|
||
|
# echo $count
|
||
|
|
||
|
# maximum random in bash: 32768
|
||
|
random_max=32768
|
||
|
|
||
|
#number of events
|
||
|
event=$(($RANDOM * (($event_max - $event_min)) / $random_max +$event_min))
|
||
|
|
||
|
#initialize command
|
||
|
command=$command_start
|
||
|
|
||
|
for ((i=0; i<$event; i++))
|
||
|
do
|
||
|
#calculate starttime
|
||
|
starttime=$(($RANDOM * $delay_max / $random_max))
|
||
|
hour=$(($starttime / 60))
|
||
|
minute=$(($starttime % 60))
|
||
|
second=$(($RANDOM * 60 / $random_max))
|
||
|
|
||
|
#calculate ontime
|
||
|
ontime=$(($RANDOM * (($ontime_max - $ontime_min)) / $random_max +$ontime_min))
|
||
|
|
||
|
#choose device
|
||
|
dev=$(($RANDOM * $count / $random_max))
|
||
|
|
||
|
case $variant in
|
||
|
oft)
|
||
|
printf "event %02d: at +%02d:%02d:%02d set %s on-for-timer %d\n" $i $hour $minute $second ${devices[$dev]} $ontime
|
||
|
command=`printf "$command at +%02d:%02d:%02d set %s on-for-timer %d;;" $hour $minute $second ${devices[$dev]} $ontime`
|
||
|
;;
|
||
|
onoff)
|
||
|
offtime=$(($starttime + $ontime))
|
||
|
hour_off=$(($offtime / 60))
|
||
|
minute_off=$(($offtime % 60))
|
||
|
second_off=$(($RANDOM * 60 / $random_max))
|
||
|
printf "event %02d/on : at +%02d:%02d:%02d set %s on\n" $i $hour $minute $second ${devices[$dev]}
|
||
|
printf "event %02d/off: at +%02d:%02d:%02d set %s off\n" $i $hour_off $minute_off $second_off ${devices[$dev]}
|
||
|
command=`printf "$command at +%02d:%02d:%02d set %s on;;" $hour $minute $second ${devices[$dev]}`
|
||
|
command=`printf "$command at +%02d:%02d:%02d set %s off;;" $hour_off $minute_off $second_off ${devices[$dev]}`
|
||
|
;;
|
||
|
*)
|
||
|
echo "no variant specifieno variant specified!!"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
done
|
||
|
command="$command $command_end"
|
||
|
|
||
|
#execute command
|
||
|
eval "$command"
|
||
|
|
||
|
|