Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -euo pipefail
- PATH=$PATH:/usr/bin:/bin/
- export PATH
- vendor=$1
- masterCode=$2
- slaveCode=$3
- stateCode=$4
- gatewayIp=$5
- gatewayPort=$6
- pid=""
- #######################################
- # Builds a TXP string from the given arguments
- # Globals:
- # None
- # Arguments:
- # $masterCode $slaveCode $stateCode
- # Returns:
- # $msgStr
- #######################################
- build_elro_txp() {
- local masterCode=$1
- local slaveCode=$2
- local stateCode=$3
- local sA=0
- local sG=0
- local sRepeat=15
- local sPause=5600
- local sTune=350
- local sBaud=25
- local sSpeed=16
- local headStr="TXP:$sA,$sG,$sRepeat,$sPause,$sTune,$sBaud,"
- local tailStr=",1,1,$sSpeed,;"
- local onStr="1,3,1,3,3"
- local offStr="3,1,1,3,1"
- local bitLow=1
- local bitHgh=3
- local seqLow="$bitHgh,$bitHgh,$bitLow,$bitLow,"
- local seqHgh="$bitHgh,$bitLow,$bitHgh,$bitLow,"
- local msg=""
- local bits=$masterCode$slaveCode
- for (( i=0; i<${#bits}; i++ ))
- do
- local bit=${bits:$i:1}
- if [ "$bit" == "0" ]; then
- local msg=$msg$seqLow
- else
- local msg=$msg$seqHgh
- fi
- done
- if [ "${stateCode,,}" == "on" ]; then
- local stateCode=$onStr
- fi
- if [ "${stateCode,,}" == "off" ]; then
- local stateCode=$offStr
- fi
- local msgStr=$headStr$bitLow","$msg$bitHgh","$stateCode$tailStr
- echo "$msgStr"
- }
- #######################################
- # Sends a string via netcat to the gateway
- # Globals:
- # None
- # Arguments:
- # $msgStr
- # Returns:
- # None
- #######################################
- send_string() {
- local msgStr=$1
- local sleepRate=0.8
- echo "$msgStr" | nc -u "$gatewayIp" "$gatewayPort" >/dev/null 2>/dev/null &
- pid=$!
- sleep $sleepRate
- kill $pid 2>/dev/null >/dev/null
- exit
- }
- err() {
- echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2
- }
- # main
- if [ "$1" == "" ]; then
- echo "usage: $0 vendor params ... on|off ip port"
- echo "vendors / params"
- echo " elro masterid|m1 slaveid|s1|s2|s3"
- exit
- fi
- if [ "$stateCode" == "" ]; then
- err "State (on|off) is missing."
- exit 1
- fi
- if [ "$slaveCode" == "" ]; then
- err "Slave code is missing."
- exit 1
- fi
- if [ "$masterCode" == "" ]; then
- err "Master code is missing."
- exit 1
- fi
- if [ "$gatewayIp" == "" ]; then
- err "Gateway IP is missing."
- exit 1
- fi
- if [ "$gatewayPort" == "" ]; then
- gatewayPort=49880
- fi
- case $vendor in
- elro)
- string=$(build_elro_txp "$masterCode" "$slaveCode" "$stateCode")
- send_string "$string"
- ;;
- *)
- err "Unknown vendor."
- exit 1
- ;;
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement