4 'require dawn.dawn-common as dawn';
13 dawn
.isDawnRPCAvailable().then(function(isAvailable
) {
14 return ( isAvailable
? dawn
.callDawnGetHearingMap() : null )
16 dawn
.isDawnRPCAvailable().then(function(isAvailable
) {
17 return ( isAvailable
? dawn
.callDawnGetNetwork() : null )
23 render: function(data
) {
25 const dawnHearingMapData
= data
[0];
26 const dawnNetworkData
= data
[1];
27 const hostHintsData
= data
[2];
29 let accessPointsHintsData
= {};
30 let connectedClients
= {};
31 for (let network
in dawnNetworkData
) {
32 connectedClients
[network
] = [];
33 let aps
= Object
.entries(dawnNetworkData
[network
]).map(function(ap
) {
34 accessPointsHintsData
[ap
[0]] = {name
: ap
[1].hostname
};
35 let clientData
= Object
.entries(ap
[1]);
36 for (let i
= 0; i
< clientData
.length
; i
++) {
37 if (typeof clientData
[i
][1] === 'object') {
38 connectedClients
[network
].push(clientData
[i
][0]);
44 if (!dawnHearingMapData
|| !dawnNetworkData
) {
45 return dawn
.getDawnServiceNotRunningErrorMessage();
49 E('h2', _('Hearing Map'))
52 for (let network
in dawnHearingMapData
) {
55 E('h3', 'SSID: ' + network
)
58 let hearing_map_table
= E('table', { 'class': 'table cbi-section-table' }, [
59 E('tr', { 'class': 'tr table-titles' }, [
60 E('th', { 'class': 'th' }, _('Client')),
61 E('th', { 'class': 'th' }, _('Access Point')),
62 E('th', { 'class': 'th' }, _('Frequency')),
63 E('th', { 'class': 'th' }, E('span', { 'data-tooltip': _('High Throughput') }, [ _('HT') ])),
64 E('th', { 'class': 'th' }, E('span', { 'data-tooltip': _('Very High Throughput') }, [ _('VHT') ])),
65 E('th', { 'class': 'th' }, _('Signal')),
66 E('th', { 'class': 'th' }, E('span', { 'data-tooltip': _('Received Channel Power Indication') }, [ _('RCPI') ])),
67 E('th', { 'class': 'th' }, E('span', { 'data-tooltip': _('Received Signal to Noise Indicator') }, [ _('RSNI') ])),
68 E('th', { 'class': 'th' }, _('Channel Utilization')),
69 E('th', { 'class': 'th' }, _('Connected to Network')),
70 E('th', { 'class': 'th' }, _('Score'))
74 let clients
= Object
.entries(dawnHearingMapData
[network
]).map(function(client
) {
76 return Object
.entries(client
[1]).map(function(ap
) {
78 if (ap
[1].freq
!= 0) {
80 dawn
.getHostnameFromMAC(hostHintsData
, client
[0]),
81 dawn
.getHostnameFromMAC(accessPointsHintsData
, ap
[0]),
82 dawn
.getFormattedNumber(ap
[1].freq
, 3, 1000) + ' GHz (' + _('Channel') + ': ' + dawn
.getChannelFromFrequency(ap
[1].freq
) + ')',
83 dawn
.getAvailableText(ap
[1].ht_capabilities
&& ap
[1].ht_support
),
84 dawn
.getAvailableText(ap
[1].vht_capabilities
&& ap
[1].vht_support
),
88 dawn
.getFormattedNumber(ap
[1].channel_utilization
, 2, 2.55) + '%',
89 dawn
.getYesText(connectedClients
[network
].includes(client
[0])),
97 clients
= clients
.filter(client
=> client
!== undefined);
99 cbi_update_table(hearing_map_table
, clients
, E('em', _('No clients connected.')));
101 body
.appendChild(hearing_map_table
);