Skip to content

Commit e29c304

Browse files
committed
Add Denver Mesh node categorization analysis
- Comprehensive analysis of 128 active nodes - 8 node categories identified with classification methodology - Ready for use in Potato Mesh web platform map visualization
1 parent 49783d9 commit e29c304

File tree

1 file changed

+231
-0
lines changed

1 file changed

+231
-0
lines changed

denver-mesh-node-categorization.md

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
# Denver Mesh Network Node Categorization Analysis
2+
3+
**Date**: September 18, 2024
4+
**Data Source**: Meshtastic CLI `--nodes` command output
5+
**Total Nodes Analyzed**: 128 active nodes
6+
**Method**: Automated parsing and keyword-based categorization
7+
8+
## Executive Summary
9+
10+
This analysis categorizes 128 active nodes in the Denver Mesh network into 8 distinct categories based on node names, hardware types, roles, and operational characteristics. The findings will inform node classification algorithms for the Potato Mesh web platform's map visualization feature.
11+
12+
## Categorization Methodology
13+
14+
### Data Collection
15+
- **Source**: Meshtastic CLI output via `meshtastic --nodes > nodes_raw.txt`
16+
- **Fields Analyzed**: User name, AKA (short name), Hardware type, Role, Location data, Battery status, Last heard timestamp
17+
- **Parsing Method**: Python script parsing tabular CLI output with keyword matching
18+
19+
### Classification Criteria
20+
21+
Each node is categorized based on the following priority order:
22+
23+
1. **Hardware Type** (Primary)
24+
- `T_DECK` → T-Deck Nodes
25+
- `T_ECHO` → T-Echo Nodes
26+
27+
2. **Role-Based Classification** (Secondary)
28+
- `ROUTER`, `ROUTER_LATE` → BBS Servers
29+
30+
3. **Keyword Analysis** (Tertiary)
31+
- Node name and AKA analyzed for category-specific keywords
32+
- Case-insensitive matching against predefined keyword lists
33+
34+
## Node Categories & Classification Logic
35+
36+
### 1. BBS Servers (8 nodes - 6.2%)
37+
38+
**Classification Indicators:**
39+
- **Role**: `ROUTER`, `ROUTER_LATE`
40+
- **Keywords**: `bbs`, `station`, `repeater`, `rptr`, `postal`
41+
- **Hardware**: Primarily `STATION_G2`, `RAK4631`
42+
43+
**Examples:**
44+
- `LRA rptr. W0XYZ` (Role: ROUTER)
45+
- `POSTAL REPEATER` (Keyword: "postal")
46+
- `Roadie-Station` (Keyword: "station")
47+
48+
**Map Icon Recommendation**: 📡 (Antenna/Tower)
49+
50+
### 2. Weather Stations (1 node - 0.8%)
51+
52+
**Classification Indicators:**
53+
- **Keywords**: `weather`, `temp`, `sensor`, `environmental`
54+
- **Hardware**: `TRACKER_T1000_E` (environmental tracking device)
55+
56+
**Examples:**
57+
- `WnQ Temp` (Keyword: "temp")
58+
59+
**Map Icon Recommendation**: 🌡️ (Thermometer) or 🌤️ (Weather)
60+
61+
### 3. Mobile Nodes (7 nodes - 5.5%)
62+
63+
**Classification Indicators:**
64+
- **Keywords**: `mobile`, `car`, `vehicle`, `rover`
65+
- **Hardware**: Various (RAK4631, HELTEC_V3)
66+
67+
**Examples:**
68+
- `KF0KIT/Patzy - Mobile Node` (Keyword: "mobile")
69+
- `Wormhole Mobile 01` (Keyword: "mobile")
70+
71+
**Map Icon Recommendation**: 🚗 (Car) or 📱 (Mobile device)
72+
73+
### 4. Base Stations (17 nodes - 13.3%)
74+
75+
**Classification Indicators:**
76+
- **Keywords**: `base`, `home`, `qth`, `fixed`
77+
- **Hardware**: Various (RAK4631, HELTEC_V3, STATION_G2)
78+
79+
**Examples:**
80+
- `GZ Home Base` (Keywords: "home", "base")
81+
- `Justin Base 9bb6` (Keyword: "base")
82+
- `NV0N QTH` (Keyword: "qth")
83+
84+
**Map Icon Recommendation**: 🏠 (House) or 📍 (Fixed location)
85+
86+
### 5. Solar Nodes (12 nodes - 9.4%)
87+
88+
**Classification Indicators:**
89+
- **Keywords**: `solar`, `sun`, `` (solar emoji)
90+
- **Hardware**: Various with solar power capability
91+
92+
**Examples:**
93+
- `W3OO Solar Heltec V4` (Keyword: "solar")
94+
- `NV0N Solar Node` (Keyword: "solar")
95+
- `Noland (W0DRZ) ☀️` (Emoji: "☀️")
96+
97+
**Map Icon Recommendation**: ☀️ (Sun) or 🔋 (Solar panel)
98+
99+
### 6. T-Deck Nodes (3 nodes - 2.3%)
100+
101+
**Classification Indicators:**
102+
- **Hardware**: `T_DECK` (Primary indicator)
103+
- **Modern keyboard-equipped devices**
104+
105+
**Examples:**
106+
- `trose[denvermesh.org]` (Hardware: T_DECK)
107+
- `NOT-A-RUBICON 2` (Hardware: T_DECK)
108+
109+
**Map Icon Recommendation**: ⌨️ (Keyboard) or 🎮 (Gaming device)
110+
111+
### 7. T-Echo Nodes (6 nodes - 4.7%)
112+
113+
**Classification Indicators:**
114+
- **Hardware**: `T_ECHO` (Primary indicator)
115+
- **Compact handheld devices**
116+
117+
**Examples:**
118+
- `Elm2` (Hardware: T_ECHO)
119+
- `Spacestation-13` (Hardware: T_ECHO)
120+
121+
**Map Icon Recommendation**: 📱 (Phone) or 🔊 (Echo device)
122+
123+
### 8. Other Nodes (74 nodes - 57.8%)
124+
125+
**Classification Indicators:**
126+
- **Default category** for nodes not matching other criteria
127+
- **Mixed hardware types and purposes**
128+
129+
**Map Icon Recommendation**: 📡 (Generic radio) or ⚙️ (Generic device)
130+
131+
## Implementation Recommendations for Potato Mesh Web
132+
133+
### 1. Classification Algorithm
134+
135+
```python
136+
def classify_node(node_data):
137+
# Priority 1: Hardware-based classification
138+
if node_data['hardware'] == 'T_DECK':
139+
return 'tdeck'
140+
elif node_data['hardware'] == 'T_ECHO':
141+
return 'techo'
142+
143+
# Priority 2: Role-based classification
144+
if node_data['role'] in ['ROUTER', 'ROUTER_LATE']:
145+
return 'bbs_server'
146+
147+
# Priority 3: Keyword-based classification
148+
name_lower = (node_data['user'] + ' ' + node_data['aka']).lower()
149+
150+
if any(kw in name_lower for kw in ['solar', 'sun', '']):
151+
return 'solar'
152+
elif any(kw in name_lower for kw in ['mobile', 'car', 'vehicle']):
153+
return 'mobile'
154+
elif any(kw in name_lower for kw in ['base', 'home', 'qth', 'fixed']):
155+
return 'base_station'
156+
elif any(kw in name_lower for kw in ['weather', 'temp', 'sensor']):
157+
return 'weather'
158+
elif any(kw in name_lower for kw in ['bbs', 'station', 'repeater', 'rptr']):
159+
return 'bbs_server'
160+
161+
return 'other'
162+
```
163+
164+
### 2. Icon Mapping
165+
166+
```javascript
167+
const nodeIcons = {
168+
'bbs_server': '📡', // Antenna/Tower
169+
'weather': '🌡️', // Thermometer
170+
'mobile': '🚗', // Car
171+
'base_station': '🏠', // House
172+
'solar': '☀️', // Sun
173+
'tdeck': '⌨️', // Keyboard
174+
'techo': '📱', // Phone
175+
'other': '📡' // Generic radio
176+
};
177+
```
178+
179+
### 3. Database Schema Considerations
180+
181+
```sql
182+
-- Add node classification fields
183+
ALTER TABLE nodes ADD COLUMN category VARCHAR(20);
184+
ALTER TABLE nodes ADD COLUMN classification_confidence DECIMAL(3,2);
185+
ALTER TABLE nodes ADD COLUMN classification_method VARCHAR(20);
186+
```
187+
188+
### 4. Map Visualization Features
189+
190+
- **Color coding** by category
191+
- **Icon overlays** based on node type
192+
- **Filtering** by category
193+
- **Statistics** showing category distribution
194+
- **Legend** explaining category meanings
195+
196+
## Data Quality Notes
197+
198+
### Strengths
199+
- **High confidence** in hardware-based classifications (T-Deck, T-Echo)
200+
- **Clear role indicators** for BBS servers
201+
- **Consistent naming patterns** for solar and mobile nodes
202+
203+
### Limitations
204+
- **Keyword matching** may miss nodes with creative naming
205+
- **Role field** not always populated consistently
206+
- **Some nodes** may serve multiple purposes (e.g., solar base stations)
207+
208+
### Recommendations for Improvement
209+
1. **Manual review** of "Other" category nodes
210+
2. **User feedback** mechanism for category corrections
211+
3. **Machine learning** approach for better classification
212+
4. **Additional data sources** (telemetry, usage patterns)
213+
214+
## Network Health Insights
215+
216+
- **Strong infrastructure**: 8 BBS servers provide backbone connectivity
217+
- **Solar adoption**: 9.4% of nodes are solar-powered (good for resilience)
218+
- **Modern hardware**: 2.3% T-Deck, 4.7% T-Echo adoption
219+
- **Mobile coverage**: 5.5% mobile nodes for portable communication
220+
- **Weather monitoring**: Limited environmental sensing (0.8%)
221+
222+
## Conclusion
223+
224+
This categorization provides a solid foundation for the Potato Mesh web platform's node classification system. The methodology is transparent, reproducible, and can be easily implemented in the web application. The 8-category system provides sufficient granularity for meaningful map visualization while remaining manageable for users.
225+
226+
**Next Steps:**
227+
1. Implement classification algorithm in Potato Mesh web
228+
2. Create icon set and styling for each category
229+
3. Add filtering and statistics features
230+
4. Gather user feedback for classification accuracy
231+
5. Consider expanding categories based on usage patterns

0 commit comments

Comments
 (0)