Skip to content

Commit 0bb9614

Browse files
committed
tools: localhost: filter based on network IDs
Add a filter for displayed devices based on the network ID the device is using. Signed-off-by: Jordan Yates <jordan@embeint.com>
1 parent 73e6344 commit 0bb9614

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

src/infuse_iot/tools/localhost.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __init__(self, args):
4646
self._data_lock = threading.Lock()
4747
self._columns: dict[str, dict] = {}
4848
self._apps: set[str] = set()
49+
self._networks: set[str] = set()
4950
self._data: dict[int, dict] = {}
5051
self._port: int = args.port
5152

@@ -133,6 +134,7 @@ async def websocket_handler(self, request: BaseRequest):
133134
"rows": [self._data[d] for d in devices],
134135
"tdfs": sorted(list(self._columns.keys())),
135136
"apps": sorted(list(self._apps)),
137+
"networks": sorted(list(self._networks)),
136138
}
137139
self._data_lock.release()
138140

@@ -213,7 +215,9 @@ def recv_thread(self) -> None:
213215
self._data[source.infuse_id]["bt_rssi"] = source.rssi
214216

215217
if source.auth == packet.Auth.NETWORK:
216-
self._data[source.infuse_id]["network_id"] = f"0x{source.key_identifier:06x}"
218+
key_id_str = f"0x{source.key_identifier:06x}"
219+
self._data[source.infuse_id]["network_id"] = key_id_str
220+
self._networks.add(key_id_str)
217221

218222
for tdf in self._decoder.decode(msg.epacket.payload):
219223
t = tdf.data[-1]

src/infuse_iot/tools/localhost/index.html

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
vertical-align: top;
3535
}
3636

37+
#network-show {
38+
vertical-align: top;
39+
}
40+
3741
#data-table {
3842
width: 100%;
3943
};
@@ -45,6 +49,7 @@ <h1>Infuse-IoT TDF Viewer</h1>
4549
<div id="filteringSidebar" class="sidebar">
4650
<span id="tdf-show"></span>
4751
<span id="app-show"></span>
52+
<span id="network-show"></span>
4853
</div>
4954
<div>
5055
<b>
@@ -114,20 +119,39 @@ <h1>Infuse-IoT TDF Viewer</h1>
114119
},
115120
]
116121
});
122+
const shownNetworkTable = new Tabulator("#network-show", {
123+
layout: "fitDataTable",
124+
columns: [
125+
{ title: "Network ID", field: "name", width: 200 },
126+
{
127+
title: "Show",
128+
field: "checked",
129+
hozAlign: "center",
130+
formatter: "tickCross",
131+
cellClick: function (ev, cell) {
132+
filtering_update = true;
133+
cell.setValue(!cell.getValue());
134+
},
135+
},
136+
]
137+
});
117138

118139
// Connect to the WebSocket server
119140
const ws = new WebSocket("ws://localhost:" + location.port + "/ws");
120141
let shownTDFs = {};
121142
let currentTDFs = [];
122143
let current_num_columns = 0;
123144
let currentApps = [];
145+
let currentNetworks = []
124146

125147
const arraysEqual = (a, b) =>
126148
a.length === b.length &&
127149
a.every((element, index) => element === b[index]);
128150

129151
ws.onmessage = function (event) {
130-
const { columns, rows, tdfs, apps } = JSON.parse(event.data);
152+
const { columns, rows, tdfs, apps, networks } = JSON.parse(event.data);
153+
154+
console.log(networks);
131155

132156
if (!arraysEqual(currentTDFs, tdfs)) {
133157
// Merge new data with the existing table data
@@ -164,6 +188,20 @@ <h1>Infuse-IoT TDF Viewer</h1>
164188
filtering_update = true;
165189
}
166190

191+
if (!arraysEqual(currentNetworks, networks)) {
192+
// Merge new data with the existing table data
193+
const currentRows = shownAppTable.getData();
194+
const updatedData = networks.map((str, index) => {
195+
const existingRow = currentRows.find(row => row.name === str);
196+
return existingRow
197+
? existingRow // Preserve the existing row if found
198+
: { id: `row-${index}`, name: str, checked: true };
199+
});
200+
shownNetworkTable.replaceData(updatedData);
201+
currentNetworks = networks
202+
filtering_update = true;
203+
}
204+
167205
// Update column definitions if new TDFs have appeared
168206
if (columns.length != current_num_columns) {
169207
dataTable.setColumns(columns);
@@ -190,14 +228,21 @@ <h1>Infuse-IoT TDF Viewer</h1>
190228
}
191229
});
192230

193-
// Filter applications as requested
231+
// Filter applications and networks as requested
194232
appShow = Object.fromEntries(
195233
shownAppTable.getData().map(row => [row.name, row.checked])
196234
);
235+
networkShow = Object.fromEntries(
236+
shownNetworkTable.getData().map(row => [row.name, row.checked])
237+
);
197238
enabledApps = currentApps.filter(a => appShow[a]);
239+
enabledNetworks = currentNetworks.filter(a => networkShow[a]);
240+
241+
console.log(enabledApps, enabledNetworks);
198242

199243
dataTable.clearFilter();
200244
dataTable.setFilter("application", "in", enabledApps);
245+
dataTable.setFilter("network_id", "in", enabledNetworks);
201246

202247
filtering_update = false;
203248
}

0 commit comments

Comments
 (0)