-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscan.sh
executable file
·107 lines (88 loc) · 2.91 KB
/
scan.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/bash
# Dieses Skript schickt über ebusctl Kommandos an einen EBUS-Teilnehmer und speichert das Antworttelegramm.
# Maximale Anzahl an Wiederholungen
MAXLOOPS=10
# Schrittweite (STEP <= 9)
STEP=9
# Startadresse
STARTADDRESS=0
# Endadresse (ENDADDRESS <= 65535)
# Nach 6768 (0x1A70) kam keine gültige Antwort mehr
ENDADDRESS=STARTADDRESS+15*STEP
#ENDADDRESS=2564
# Trennzeichen für die Ausgabe
SEPARATOR=";"
# Zieladresse EBUS-Teilnehmer
# in HEX
EBUS_ZZ=35
# EBUS-Kommando
EBUS_CMD=0902
# ANZAHL der folgenden Bytes - hier Adresse 0x0000 + Länge 0x00
# in HEX
EBUS_COUNT=03
# Umwandlung der Schrittweite in HEX-Wert
printf -v EBUS_LENGTH "%02X" "$((STEP*2))"
# Pfad zum Kommando
CMD=/usr/bin/ebusctl
now=$(date +"%Y-%m-%d_%I-%M")
# Pfad zur Ergebnis-Datei
RESULTFILE="scan.$now.csv"
# Hier wird das NULLRESULT berechnet
NULLRESULT="$EBUS_LENGTH"
for(( i=0; i<STEP; i++ ))
do
NULLRESULT+="0000"
done
# Datei neu anlegen/überschreiben
echo "" > $RESULTFILE
echo "Startadresse: $STARTADDRESS" >> $RESULTFILE
echo "Endadresse: $ENDADDRESS" >> $RESULTFILE
echo "Schrittweite: $STEP" >> $RESULTFILE
echo "MaxVersuche: $MAXLOOPS" >> $RESULTFILE
echo "keineAntwort: $NULLRESULT" >> $RESULTFILE
echo >> $RESULTFILE
for(( address=STARTADDRESS; address<=ENDADDRESS; address+=STEP ))
do
for(( loop=1; loop<=MAXLOOPS; loop++ ))
do
printf -v EBUS_ADDRESS_HIGH "%02X" "$((address/255))"
printf -v EBUS_ADDRESS_LOW "%02X" "$((address&255))"
COMMAND=( "$CMD hex $EBUS_ZZ$EBUS_CMD$EBUS_COUNT$EBUS_ADDRESS_LOW$EBUS_ADDRESS_HIGH$EBUS_LENGTH" )
# echo $COMMAND
RESULT=`$COMMAND`
# RESULT ist NULLRESULT
if [[ $RESULT == $NULLRESULT ]]
then
# MaxLoops erreicht?
if [ $loop == $MAXLOOPS ]
then
echo $(date +"%T"): $address: $COMMAND: $RESULT $loop "FAIL"
echo $(date +"%T")$SEPARATOR$COMMAND$SEPARATOR$address$SEPARATOR$RESULT$SEPARATOR$loop$SEPARATOR"FAIL" >> $RESULTFILE
fi
# RESULT beginnt mit ERR*
elif [[ $RESULT == ERR* ]]
then
# MaxLoops erreicht?
if [ $loop == $MAXLOOPS ]
then
echo $(date +"%T"): $address: $COMMAND: $RESULT $loop "FAIL"
echo $(date +"%T")$SEPARATOR$COMMAND$SEPARATOR$address$SEPARATOR$NULLRESULT$SEPARATOR$loop$SEPARATOR"FAIL"$SEPARATOR$RESULT >> $RESULTFILE
fi
# RESULT-Länge ungleich Soll-Länge
elif [[ ${#RESULT} != ${#NULLRESULT} ]]
then
# MaxLoops erreicht?
if [ $loop == $MAXLOOPS ]
then
echo $(date +"%T"): $address: $COMMAND: $RESULT $loop "FAIL"
echo $(date +"%T")$SEPARATOR$COMMAND$SEPARATOR$address$SEPARATOR$NULLRESULT$SEPARATOR$loop$SEPARATOR"FAIL"$SEPARATOR$RESULT >> $RESULTFILE
fi
# Gutfall
else
echo $(date +"%T"): $address: $COMMAND: $RESULT $loop "OK"
echo $(date +"%T")$SEPARATOR$COMMAND$SEPARATOR$address$SEPARATOR$RESULT$SEPARATOR$loop$SEPARATOR"OK" >> $RESULTFILE
break
fi
sleep 0.5
done
done