Files
bacnet_stack/bin/bbmdepics.sh
T

46 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# Parallel bacepics connected with Foreign Device to BBMD
# Assume that we are using the default IP address:
BACNET_IP_ADDRESS=`ip route get 8.8.8.8 | fgrep src | cut -f7 -d" "`
BACNET_IP_PORT=47808
echo "Spawning BBMD server at UDP port ${BACNET_IP_PORT}"
# Launch the local BBMD
./bacserv $BACNET_IP_PORT BACServer-$BACNET_IP_PORT &
# Allow the local BBMD time to get running
sleep 1
#list of devices from command line assigned UDP port number as key
epics_port_start=47810
port_key=${epics_port_start}
declare -A device
# capture the devices from the command line
for d in "$@"
do
device[${port_key}]=${d}
epics_port_max=$((port_key++))
done
# spawn the epics clients
export BACNET_BBMD_ADDRESS=$BACNET_IP_ADDRESS
export BACNET_BBMD_PORT=$BACNET_IP_PORT
echo "Spawning clients to register as foreign device to BBMD" $BACNET_BBMD_ADDRESS:$BACNET_BBMD_PORT
# note: leaving port 47809 free for example bvlc.sh clients
for port in $(seq ${epics_port_start} ${epics_port_max})
do
# note: is there a limit to the number of Foreign Device Registrations?
export BACNET_IP_PORT=${port} ; \
./bacepics ${device[${port}]} > epics-${device[${port}]}-${port}.txt &
pids[${port}]=$!
echo "Spawned EPICS client using UDP port ${port} reading ${device[${port}]}"
done
echo "Waiting for the clients to finish..."
for pid in ${pids[*]}; do
wait $pid
done
killall bacserv