Advertisement
Guest User

Connair Elro TXP script

a guest
Feb 4th, 2016
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. #!/bin/bash
  2. set -euo pipefail
  3.  
  4. PATH=$PATH:/usr/bin:/bin/
  5. export PATH
  6.  
  7.  
  8. vendor=$1
  9. masterCode=$2
  10. slaveCode=$3
  11. stateCode=$4
  12. gatewayIp=$5
  13. gatewayPort=$6
  14. pid=""
  15.  
  16. #######################################
  17. # Builds a TXP string from the given arguments
  18. # Globals:
  19. # None
  20. # Arguments:
  21. # $masterCode $slaveCode $stateCode
  22. # Returns:
  23. # $msgStr
  24. #######################################
  25. build_elro_txp() {
  26. local masterCode=$1
  27. local slaveCode=$2
  28. local stateCode=$3
  29.  
  30. local sA=0
  31. local sG=0
  32. local sRepeat=15
  33. local sPause=5600
  34. local sTune=350
  35. local sBaud=25
  36. local sSpeed=16
  37.  
  38. local headStr="TXP:$sA,$sG,$sRepeat,$sPause,$sTune,$sBaud,"
  39. local tailStr=",1,1,$sSpeed,;"
  40. local onStr="1,3,1,3,3"
  41. local offStr="3,1,1,3,1"
  42.  
  43. local bitLow=1
  44. local bitHgh=3
  45.  
  46. local seqLow="$bitHgh,$bitHgh,$bitLow,$bitLow,"
  47. local seqHgh="$bitHgh,$bitLow,$bitHgh,$bitLow,"
  48.  
  49. local msg=""
  50. local bits=$masterCode$slaveCode
  51. for (( i=0; i<${#bits}; i++ ))
  52. do
  53. local bit=${bits:$i:1}
  54.  
  55. if [ "$bit" == "0" ]; then
  56. local msg=$msg$seqLow
  57. else
  58. local msg=$msg$seqHgh
  59. fi
  60. done
  61.  
  62.  
  63. if [ "${stateCode,,}" == "on" ]; then
  64. local stateCode=$onStr
  65. fi
  66. if [ "${stateCode,,}" == "off" ]; then
  67. local stateCode=$offStr
  68. fi
  69.  
  70. local msgStr=$headStr$bitLow","$msg$bitHgh","$stateCode$tailStr
  71. echo "$msgStr"
  72. }
  73.  
  74. #######################################
  75. # Sends a string via netcat to the gateway
  76. # Globals:
  77. # None
  78. # Arguments:
  79. # $msgStr
  80. # Returns:
  81. # None
  82. #######################################
  83. send_string() {
  84. local msgStr=$1
  85. local sleepRate=0.8
  86.  
  87. echo "$msgStr" | nc -u "$gatewayIp" "$gatewayPort" >/dev/null 2>/dev/null &
  88.  
  89. pid=$!
  90. sleep $sleepRate
  91. kill $pid 2>/dev/null >/dev/null
  92. exit
  93. }
  94.  
  95. err() {
  96. echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2
  97. }
  98.  
  99. # main
  100.  
  101. if [ "$1" == "" ]; then
  102. echo "usage: $0 vendor params ... on|off ip port"
  103. echo "vendors / params"
  104. echo " elro masterid|m1 slaveid|s1|s2|s3"
  105. exit
  106. fi
  107.  
  108. if [ "$stateCode" == "" ]; then
  109. err "State (on|off) is missing."
  110. exit 1
  111. fi
  112. if [ "$slaveCode" == "" ]; then
  113. err "Slave code is missing."
  114. exit 1
  115. fi
  116. if [ "$masterCode" == "" ]; then
  117. err "Master code is missing."
  118. exit 1
  119. fi
  120.  
  121. if [ "$gatewayIp" == "" ]; then
  122. err "Gateway IP is missing."
  123. exit 1
  124. fi
  125. if [ "$gatewayPort" == "" ]; then
  126. gatewayPort=49880
  127. fi
  128.  
  129. case $vendor in
  130. elro)
  131. string=$(build_elro_txp "$masterCode" "$slaveCode" "$stateCode")
  132. send_string "$string"
  133. ;;
  134. *)
  135. err "Unknown vendor."
  136. exit 1
  137. ;;
  138. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement