-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdiagnose.sh
More file actions
executable file
·273 lines (235 loc) · 11.9 KB
/
Copy pathdiagnose.sh
File metadata and controls
executable file
·273 lines (235 loc) · 11.9 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#!/bin/bash
#
# SeeLevel 709-BT Diagnostic Script
# Checks all services, switches, and logs to diagnose why tanks aren't appearing
#
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo "======================================================================"
echo " SeeLevel 709-BT Diagnostic Check"
echo "======================================================================"
echo ""
ERRORS=0
WARNINGS=0
# Helper functions
print_pass() {
echo -e "${GREEN}✓${NC} $1"
}
print_fail() {
echo -e "${RED}✗${NC} $1"
ERRORS=$((ERRORS + 1))
}
print_warn() {
echo -e "${YELLOW}⚠${NC} $1"
WARNINGS=$((WARNINGS + 1))
}
print_info() {
echo -e "${BLUE}ℹ${NC} $1"
}
# Test 1: Check if services are running
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 1: Service Status"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check BLE Router
BLE_STATUS=$(svstat /service/dbus-ble-advertisements 2>&1)
if echo "$BLE_STATUS" | grep -q ": up "; then
BLE_PID=$(echo "$BLE_STATUS" | sed -n 's/.*pid \([0-9]*\).*/\1/p')
BLE_UPTIME=$(echo "$BLE_STATUS" | sed -n 's/.*) \([0-9]*\) seconds.*/\1/p')
print_pass "BLE Router running (PID: $BLE_PID, uptime: ${BLE_UPTIME}s)"
else
print_fail "BLE Router NOT running"
echo " Fix: svc -u /service/dbus-ble-advertisements"
fi
# Check SeeLevel Service
SEELEVEL_STATUS=$(svstat /service/dbus-seelevel 2>&1)
if echo "$SEELEVEL_STATUS" | grep -q ": up "; then
SEELEVEL_PID=$(echo "$SEELEVEL_STATUS" | sed -n 's/.*pid \([0-9]*\).*/\1/p')
SEELEVEL_UPTIME=$(echo "$SEELEVEL_STATUS" | sed -n 's/.*) \([0-9]*\) seconds.*/\1/p')
print_pass "SeeLevel service running (PID: $SEELEVEL_PID, uptime: ${SEELEVEL_UPTIME}s)"
else
print_fail "SeeLevel service NOT running"
echo " Fix: svc -u /service/dbus-seelevel"
fi
echo ""
# Test 2: Check discovery switches
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 2: Discovery Switch Status"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check BLE Router discovery
BLE_DISCOVERY=$(dbus -y com.victronenergy.switch.ble_advertisements /SwitchableOutput/relay_discovery/State GetValue 2>/dev/null)
if [ "$BLE_DISCOVERY" = "1" ]; then
print_pass "BLE Router discovery: ENABLED"
elif [ "$BLE_DISCOVERY" = "0" ]; then
print_warn "BLE Router discovery: DISABLED"
echo " Note: Discovery can be disabled after devices are found"
echo " To enable: dbus -y com.victronenergy.switch.ble_advertisements /SwitchableOutput/relay_discovery/State SetValue %1"
else
print_fail "BLE Router discovery: CANNOT READ STATE"
fi
# Check SeeLevel discovery
SEELEVEL_DISCOVERY=$(dbus -y com.victronenergy.switch.seelevel /SwitchableOutput/relay_discovery/State GetValue 2>/dev/null)
if [ "$SEELEVEL_DISCOVERY" = "1" ]; then
print_pass "SeeLevel Tank discovery: ENABLED"
elif [ "$SEELEVEL_DISCOVERY" = "0" ]; then
print_fail "SeeLevel Tank discovery: DISABLED (must be enabled for sensors to work)"
echo " Fix: dbus -y com.victronenergy.switch.seelevel /SwitchableOutput/relay_discovery/State SetValue %1"
else
print_fail "SeeLevel Tank discovery: CANNOT READ STATE"
fi
echo ""
# Test 3: Check manufacturer ID registrations in logs
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 3: Manufacturer ID Registration"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ -f /var/log/dbus-seelevel/current ]; then
# Check for Cypress (305) registration
if tail -n 500 /var/log/dbus-seelevel/current | grep -q "Registered interest in manufacturer ID: 0x0131"; then
print_pass "Registered for Cypress (MFG ID 305 / 0x0131) - BTP3 devices"
else
print_fail "NOT registered for Cypress (MFG ID 305)"
fi
# Check for SeeLevel (3264) registration
if tail -n 500 /var/log/dbus-seelevel/current | grep -q "Registered interest in manufacturer ID: 0x0CC0"; then
print_pass "Registered for SeeLevel (MFG ID 3264 / 0x0CC0) - BTP7 devices"
else
print_fail "NOT registered for SeeLevel (MFG ID 3264)"
fi
# Check if scanner started
if tail -n 500 /var/log/dbus-seelevel/current | grep -q "BLE scanner started successfully"; then
print_pass "BLE scanner started and listening for advertisements"
else
print_warn "Cannot confirm BLE scanner started successfully"
fi
else
print_fail "SeeLevel log file not found: /var/log/dbus-seelevel/current"
fi
echo ""
# Test 4: Check for discovered sensors
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 4: Sensor Discovery Status"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check for discovered sensors via settings service
SENSOR_SETTINGS=$(dbus -y com.victronenergy.settings /Settings/Devices GetValue 2>/dev/null | grep -E "seelevel.*Sensor_" | head -n 20)
if [ -n "$SENSOR_SETTINGS" ]; then
SENSOR_COUNT=$(echo "$SENSOR_SETTINGS" | wc -l)
print_pass "Found $SENSOR_COUNT sensor setting(s) in Venus OS settings"
echo ""
print_info "Sensor settings:"
echo "$SENSOR_SETTINGS" | sed 's/^/ /'
else
print_warn "No sensor settings found (first run or no sensors discovered yet)"
fi
# Check recent logs for advertisements
echo ""
if [ -f /var/log/dbus-seelevel/current ]; then
AD_COUNT=$(tail -n 500 /var/log/dbus-seelevel/current 2>/dev/null | grep -c "Advertisement received" || echo "0")
AD_COUNT=$(echo "$AD_COUNT" | tr -d '\n\r ')
if [ "$AD_COUNT" -gt 0 ] 2>/dev/null; then
print_pass "Received $AD_COUNT BLE advertisements recently"
# Show recent advertisements
echo ""
print_info "Recent advertisements (last 5):"
tail -n 500 /var/log/dbus-seelevel/current | grep "Advertisement received" | tail -n 5 | sed 's/^/ /'
# Check for discovered sensors in logs
DISC_COUNT=$(tail -n 500 /var/log/dbus-seelevel/current 2>/dev/null | grep -c "Discovered sensor" || echo "0")
DISC_COUNT=$(echo "$DISC_COUNT" | tr -d '\n\r ')
if [ "$DISC_COUNT" -gt 0 ] 2>/dev/null; then
print_pass "Successfully discovered $DISC_COUNT sensor(s)"
echo ""
print_info "Discovered sensors (last 5):"
tail -n 500 /var/log/dbus-seelevel/current | grep "Discovered sensor" | tail -n 5 | sed 's/^/ /'
else
print_warn "Receiving advertisements but no sensors discovered"
echo " This may mean discovery switch is disabled"
fi
else
print_warn "No BLE advertisements received recently"
echo " This may mean:"
echo " - BLE Router discovery is disabled"
echo " - Your SeeLevel device is not broadcasting"
echo " - Your SeeLevel device MAC is disabled in BLE Router"
fi
fi
echo ""
# Test 5: Check D-Bus service registration
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 5: D-Bus Service Registration"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check if SeeLevel is on D-Bus
if dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames 2>/dev/null | grep -q "com.victronenergy.switch.seelevel"; then
print_pass "SeeLevel service registered on D-Bus"
else
print_fail "SeeLevel service NOT found on D-Bus"
fi
# Check if BLE Router is on D-Bus
BLE_ON_DBUS=$(dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames 2>/dev/null | grep -c "com.victronenergy.switch.ble_advertisements" || echo "0")
if [ "$BLE_ON_DBUS" -gt 0 ]; then
print_pass "BLE Router registered on D-Bus"
else
print_fail "BLE Router NOT found on D-Bus"
fi
echo ""
# Test 6: Check for active sensor processes
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "TEST 6: Active Sensor Processes"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
SENSOR_PROCS=$(ps | grep "dbus-seelevel-sensor.py" | grep -v grep | wc -l)
if [ "$SENSOR_PROCS" -gt 0 ]; then
print_pass "Found $SENSOR_PROCS active sensor process(es)"
echo ""
print_info "Sensor processes:"
ps | grep "dbus-seelevel-sensor.py" | grep -v grep | sed 's/^/ /'
else
print_warn "No active sensor processes found"
echo " Sensors only start when:"
echo " - Sensors are discovered"
echo " - Sensor switches are enabled"
fi
echo ""
# Summary
echo "======================================================================"
echo " SUMMARY"
echo "======================================================================"
echo ""
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
echo -e "${GREEN}✓ All checks passed!${NC}"
echo ""
echo "Your SeeLevel system appears to be configured correctly."
echo "If tanks still don't appear, wait 30-60 seconds for discovery."
elif [ $ERRORS -eq 0 ]; then
echo -e "${YELLOW}⚠ $WARNINGS warning(s) found${NC}"
echo ""
echo "System is mostly working but some items need attention."
echo "Check warnings above for details."
else
echo -e "${RED}✗ $ERRORS error(s) found${NC}"
if [ $WARNINGS -gt 0 ]; then
echo -e "${YELLOW}⚠ $WARNINGS warning(s) found${NC}"
fi
echo ""
echo "Critical issues detected. Please fix errors above."
fi
echo ""
echo "======================================================================"
echo " QUICK FIXES"
echo "======================================================================"
echo ""
echo "Enable BLE Router discovery:"
echo " dbus -y com.victronenergy.switch.ble_advertisements /SwitchableOutput/relay_discovery/State SetValue %1"
echo ""
echo "Enable SeeLevel Tank discovery:"
echo " dbus -y com.victronenergy.switch.seelevel /SwitchableOutput/relay_discovery/State SetValue %1"
echo ""
echo "Restart services:"
echo " svc -t /service/dbus-ble-advertisements"
echo " svc -t /service/dbus-seelevel"
echo ""
echo "Monitor for advertisements:"
echo " tail -f /var/log/dbus-seelevel/current"
echo ""
echo "======================================================================"
exit $ERRORS