@matter-server/dashboard 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -1
- package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js +4 -4
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +7 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +3 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +6 -2
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +3 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.js +3 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +3 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
- package/dist/esm/pages/components/footer.d.ts.map +1 -1
- package/dist/esm/pages/components/footer.js +1 -3
- package/dist/esm/pages/components/footer.js.map +1 -1
- package/dist/esm/pages/components/header.d.ts.map +1 -1
- package/dist/esm/pages/components/header.js.map +1 -1
- package/dist/esm/pages/components/node-details.d.ts.map +1 -1
- package/dist/esm/pages/components/node-details.js +6 -4
- package/dist/esm/pages/components/node-details.js.map +1 -1
- package/dist/esm/pages/components/server-details.d.ts.map +1 -1
- package/dist/esm/pages/components/server-details.js +3 -1
- package/dist/esm/pages/components/server-details.js.map +1 -1
- package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-cluster-view.js +1 -1
- package/dist/esm/pages/matter-cluster-view.js.map +1 -1
- package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-node-view.js.map +1 -1
- package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-server-view.js +3 -1
- package/dist/esm/pages/matter-server-view.js.map +1 -1
- package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
- package/dist/esm/pages/network/device-panel.js.map +1 -1
- package/dist/esm/pages/network/network-details.d.ts.map +1 -1
- package/dist/esm/pages/network/network-details.js +9 -3
- package/dist/esm/pages/network/network-details.js.map +1 -1
- package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/thread-graph.js +3 -1
- package/dist/esm/pages/network/thread-graph.js.map +1 -1
- package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
- package/dist/esm/pages/network/update-connections-dialog.js +6 -2
- package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
- package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/wifi-graph.js +3 -1
- package/dist/esm/pages/network/wifi-graph.js.map +1 -1
- package/dist/web/js/{commission-node-dialog-DOtOjWT7.js → commission-node-dialog-h9QTg0uL.js} +11 -5
- package/dist/web/js/{commission-node-existing-B0e6xZeB.js → commission-node-existing-TnFjP70Q.js} +5 -3
- package/dist/web/js/{commission-node-thread-CetoXqfb.js → commission-node-thread-DumLBlyw.js} +8 -4
- package/dist/web/js/{commission-node-wifi-B69SoNfD.js → commission-node-wifi-CbT2wQDc.js} +5 -3
- package/dist/web/js/{dialog-box-RdFIn1hd.js → dialog-box-DVtkVga3.js} +1 -1
- package/dist/web/js/{fire_event-DTKKR48v.js → fire_event-D_gZK7cY.js} +1 -1
- package/dist/web/js/{log-level-dialog-BheZgiD2.js → log-level-dialog-ChcYXgfz.js} +4 -2
- package/dist/web/js/main.js +1 -1
- package/dist/web/js/{matter-dashboard-app-Dq3JvQBw.js → matter-dashboard-app-Dpr9EPlS.js} +70 -50
- package/dist/web/js/{node-binding-dialog-CtmtVf1D.js → node-binding-dialog-BI9spkUK.js} +115 -115
- package/package.json +3 -3
- package/src/components/dialog-box/dialog-box.ts +15 -9
- package/src/components/dialogs/binding/node-binding-dialog.ts +6 -9
- package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +15 -7
- package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +7 -1
- package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +14 -2
- package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +12 -4
- package/src/components/dialogs/settings/log-level-dialog.ts +13 -7
- package/src/pages/cluster-commands/clusters/basic-information-commands.ts +7 -3
- package/src/pages/components/footer.ts +1 -3
- package/src/pages/components/header.ts +25 -15
- package/src/pages/components/node-details.ts +34 -21
- package/src/pages/components/server-details.ts +7 -1
- package/src/pages/matter-cluster-view.ts +10 -6
- package/src/pages/matter-node-view.ts +5 -3
- package/src/pages/matter-server-view.ts +7 -1
- package/src/pages/network/device-panel.ts +5 -3
- package/src/pages/network/network-details.ts +134 -82
- package/src/pages/network/thread-graph.ts +3 -1
- package/src/pages/network/update-connections-dialog.ts +31 -17
- package/src/pages/network/wifi-graph.ts +3 -1
|
@@ -40,16 +40,24 @@ export class CommissionNodeWifi extends LitElement {
|
|
|
40
40
|
<br />
|
|
41
41
|
<md-outlined-button @click=${handleAsync(() => this._setWifiCredentials())} .disabled="${this._loading}"
|
|
42
42
|
>Set WiFi Credentials</md-outlined-button
|
|
43
|
-
>${
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
>${
|
|
44
|
+
this._loading
|
|
45
|
+
? html`<md-circular-progress indeterminate .visible="${this._loading}"></md-circular-progress>`
|
|
46
|
+
: nothing
|
|
47
|
+
}`;
|
|
46
48
|
}
|
|
47
49
|
return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
|
|
48
50
|
<br />
|
|
49
51
|
<br />
|
|
50
52
|
<md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
|
|
51
53
|
>Commission</md-outlined-button
|
|
52
|
-
>${
|
|
54
|
+
>${
|
|
55
|
+
this._loading
|
|
56
|
+
? html`
|
|
57
|
+
<md-circular-progress indeterminate></md-circular-progress>
|
|
58
|
+
`
|
|
59
|
+
: nothing
|
|
60
|
+
}`;
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
private async _setWifiCredentials() {
|
|
@@ -92,9 +92,12 @@ export class LogLevelDialog extends LitElement {
|
|
|
92
92
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
93
93
|
<div slot="headline">Server Log Settings</div>
|
|
94
94
|
<div slot="content">
|
|
95
|
-
${
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
${
|
|
96
|
+
this._loading
|
|
97
|
+
? html`
|
|
98
|
+
<p class="loading">Loading...</p>
|
|
99
|
+
`
|
|
100
|
+
: html`
|
|
98
101
|
<p class="hint">Changes are temporary and will be reset on the next server restart.</p>
|
|
99
102
|
<div class="form-field">
|
|
100
103
|
<label>Console Log Level</label>
|
|
@@ -111,8 +114,9 @@ export class LogLevelDialog extends LitElement {
|
|
|
111
114
|
)}
|
|
112
115
|
</md-outlined-select>
|
|
113
116
|
</div>
|
|
114
|
-
${
|
|
115
|
-
|
|
117
|
+
${
|
|
118
|
+
this._fileLevel !== null
|
|
119
|
+
? html`
|
|
116
120
|
<div class="form-field">
|
|
117
121
|
<label>File Log Level</label>
|
|
118
122
|
<md-outlined-select name="file" .value=${this._fileLevel}>
|
|
@@ -129,8 +133,10 @@ export class LogLevelDialog extends LitElement {
|
|
|
129
133
|
</md-outlined-select>
|
|
130
134
|
</div>
|
|
131
135
|
`
|
|
132
|
-
|
|
133
|
-
|
|
136
|
+
: nothing
|
|
137
|
+
}
|
|
138
|
+
`
|
|
139
|
+
}
|
|
134
140
|
</div>
|
|
135
141
|
<div slot="actions">
|
|
136
142
|
<md-text-button @click=${this._close}>Cancel</md-text-button>
|
|
@@ -74,9 +74,13 @@ export class BasicInformationClusterCommands extends BaseClusterCommands {
|
|
|
74
74
|
<details class="command-panel">
|
|
75
75
|
<summary>Node Label</summary>
|
|
76
76
|
<div class="command-content">
|
|
77
|
-
${
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
${
|
|
78
|
+
!this._isNodeAvailable
|
|
79
|
+
? html`
|
|
80
|
+
<div class="offline-warning">Node is offline - cannot edit label</div>
|
|
81
|
+
`
|
|
82
|
+
: nothing
|
|
83
|
+
}
|
|
80
84
|
<div class="command-row">
|
|
81
85
|
<md-outlined-text-field
|
|
82
86
|
label="Node Label"
|
|
@@ -13,9 +13,7 @@ export class DashboardFooter extends LitElement {
|
|
|
13
13
|
return html`
|
|
14
14
|
<div class="footer">
|
|
15
15
|
The OHF Matter Server is a project by the Open Home Foundation.
|
|
16
|
-
<a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank"
|
|
17
|
-
>Support development</a
|
|
18
|
-
>
|
|
16
|
+
<a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank">Support development</a>
|
|
19
17
|
</div>
|
|
20
18
|
`;
|
|
21
19
|
}
|
|
@@ -107,22 +107,26 @@ export class DashboardHeader extends LitElement {
|
|
|
107
107
|
aria-current=${this.activeView === "nodes" ? "page" : nothing}
|
|
108
108
|
>Nodes</a
|
|
109
109
|
>
|
|
110
|
-
${
|
|
111
|
-
|
|
110
|
+
${
|
|
111
|
+
showThreadTab
|
|
112
|
+
? html`<a
|
|
112
113
|
href="#thread"
|
|
113
114
|
class="nav-tab ${this.activeView === "thread" ? "active" : ""}"
|
|
114
115
|
aria-current=${this.activeView === "thread" ? "page" : nothing}
|
|
115
116
|
>Thread</a
|
|
116
117
|
>`
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
: nothing
|
|
119
|
+
}
|
|
120
|
+
${
|
|
121
|
+
showWifiTab
|
|
122
|
+
? html`<a
|
|
120
123
|
href="#wifi"
|
|
121
124
|
class="nav-tab ${this.activeView === "wifi" ? "active" : ""}"
|
|
122
125
|
aria-current=${this.activeView === "wifi" ? "page" : nothing}
|
|
123
126
|
>WiFi</a
|
|
124
127
|
>`
|
|
125
|
-
|
|
128
|
+
: nothing
|
|
129
|
+
}
|
|
126
130
|
</nav>
|
|
127
131
|
`;
|
|
128
132
|
}
|
|
@@ -131,13 +135,15 @@ export class DashboardHeader extends LitElement {
|
|
|
131
135
|
return html`
|
|
132
136
|
<div class="header">
|
|
133
137
|
<!-- optional back button -->
|
|
134
|
-
${
|
|
135
|
-
|
|
138
|
+
${
|
|
139
|
+
this.backButton
|
|
140
|
+
? html` <a .href=${this.backButton}>
|
|
136
141
|
<md-icon-button>
|
|
137
142
|
<ha-svg-icon .path=${mdiArrowLeft}></ha-svg-icon>
|
|
138
143
|
</md-icon-button>
|
|
139
144
|
</a>`
|
|
140
|
-
|
|
145
|
+
: ""
|
|
146
|
+
}
|
|
141
147
|
|
|
142
148
|
<div class="title">${this.title ?? ""}</div>
|
|
143
149
|
${this._renderNavTabs()}
|
|
@@ -150,25 +156,29 @@ export class DashboardHeader extends LitElement {
|
|
|
150
156
|
`;
|
|
151
157
|
})}
|
|
152
158
|
<!-- settings button (only when connected) -->
|
|
153
|
-
${
|
|
154
|
-
|
|
159
|
+
${
|
|
160
|
+
this.client
|
|
161
|
+
? html`
|
|
155
162
|
<md-icon-button @click=${this._openSettings} title="Server Settings">
|
|
156
163
|
<ha-svg-icon .path=${mdiCog}></ha-svg-icon>
|
|
157
164
|
</md-icon-button>
|
|
158
165
|
`
|
|
159
|
-
|
|
166
|
+
: nothing
|
|
167
|
+
}
|
|
160
168
|
<!-- theme toggle button -->
|
|
161
169
|
<md-icon-button @click=${this._cycleTheme} .title=${this._getThemeTooltip()}>
|
|
162
170
|
<ha-svg-icon .path=${this._getThemeIcon()}></ha-svg-icon>
|
|
163
171
|
</md-icon-button>
|
|
164
172
|
<!-- optional logout button (only when client exists and not in production) -->
|
|
165
|
-
${
|
|
166
|
-
|
|
173
|
+
${
|
|
174
|
+
this.client && !this.client.isProduction
|
|
175
|
+
? html`
|
|
167
176
|
<md-icon-button @click=${this.client.disconnect}>
|
|
168
177
|
<ha-svg-icon .path=${mdiLogout}></ha-svg-icon>
|
|
169
178
|
</md-icon-button>
|
|
170
179
|
`
|
|
171
|
-
|
|
180
|
+
: nothing
|
|
181
|
+
}
|
|
172
182
|
</div>
|
|
173
183
|
</div>
|
|
174
184
|
`;
|
|
@@ -11,18 +11,17 @@ import "@material/web/divider/divider";
|
|
|
11
11
|
import "@material/web/iconbutton/icon-button";
|
|
12
12
|
import "@material/web/list/list";
|
|
13
13
|
import "@material/web/list/list-item";
|
|
14
|
-
import { mdiChatProcessing, mdiLink, mdiShareVariant, mdiTrashCan, mdiUpdate } from "@mdi/js";
|
|
15
|
-
import { getDeviceIcon } from "../../util/device-icons.js";
|
|
16
|
-
|
|
17
14
|
import { consume } from "@lit/context";
|
|
18
15
|
import { MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
16
|
+
import { mdiChatProcessing, mdiLink, mdiShareVariant, mdiTrashCan, mdiUpdate } from "@mdi/js";
|
|
19
17
|
import { LitElement, css, html, nothing } from "lit";
|
|
20
18
|
import { customElement, property, state } from "lit/decorators.js";
|
|
21
19
|
import { DeviceType } from "../../client/models/descriptions.js";
|
|
22
20
|
import { showAlertDialog, showPromptDialog } from "../../components/dialog-box/show-dialog-box.js";
|
|
23
21
|
import { showNodeBindingDialog } from "../../components/dialogs/binding/show-node-binding-dialog.js";
|
|
24
|
-
import "../../components/ha-svg-icon";
|
|
25
22
|
import { handleAsync } from "../../util/async-handler.js";
|
|
23
|
+
import "../../components/ha-svg-icon";
|
|
24
|
+
import { getDeviceIcon } from "../../util/device-icons.js";
|
|
26
25
|
import { getEndpointDeviceTypes } from "../matter-endpoint-view.js";
|
|
27
26
|
import { bindingContext } from "./context.js";
|
|
28
27
|
|
|
@@ -82,7 +81,13 @@ export class NodeDetails extends LitElement {
|
|
|
82
81
|
<ha-svg-icon slot="start" class="device-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
|
|
83
82
|
<div slot="headline">
|
|
84
83
|
<b>${this.node.nodeLabel || "Node Info"}</b>
|
|
85
|
-
${
|
|
84
|
+
${
|
|
85
|
+
this.node.available
|
|
86
|
+
? nothing
|
|
87
|
+
: html`
|
|
88
|
+
<span class="status">OFFLINE</span>
|
|
89
|
+
`
|
|
90
|
+
}
|
|
86
91
|
</div>
|
|
87
92
|
</md-list-item>
|
|
88
93
|
<md-list-item>
|
|
@@ -96,48 +101,56 @@ export class NodeDetails extends LitElement {
|
|
|
96
101
|
</div>
|
|
97
102
|
<div slot="supporting-text"><span class="left">Is bridge: </span>${this.node.is_bridge}</div>
|
|
98
103
|
<div slot="supporting-text"><span class="left">Serialnumber: </span>${this.node.serialNumber}</div>
|
|
99
|
-
${
|
|
100
|
-
|
|
104
|
+
${
|
|
105
|
+
this.node.matter_version
|
|
106
|
+
? html`<div slot="supporting-text">
|
|
101
107
|
<span class="left">Matter version: </span>${this.node.matter_version}
|
|
102
108
|
</div>`
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
: nothing
|
|
110
|
+
}
|
|
111
|
+
${
|
|
112
|
+
this.node.is_bridge
|
|
113
|
+
? ""
|
|
114
|
+
: html` <div slot="supporting-text">
|
|
107
115
|
<span class="left">All device types: </span>${getNodeDeviceTypes(this.node)
|
|
108
116
|
.map(deviceType => {
|
|
109
117
|
return deviceType.label;
|
|
110
118
|
})
|
|
111
119
|
.join(" / ")}
|
|
112
|
-
</div>`
|
|
120
|
+
</div>`
|
|
121
|
+
}
|
|
113
122
|
</md-list-item>
|
|
114
123
|
<md-list-item>
|
|
115
124
|
<div class="btn-row">
|
|
116
125
|
<md-outlined-button @click=${handleAsync(() => this._reinterview())}
|
|
117
126
|
>Interview<ha-svg-icon slot="icon" .path=${mdiChatProcessing}></ha-svg-icon
|
|
118
127
|
></md-outlined-button>
|
|
119
|
-
${
|
|
120
|
-
|
|
128
|
+
${
|
|
129
|
+
this._updateInitiated
|
|
130
|
+
? html` <md-outlined-button disabled
|
|
121
131
|
>Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
122
132
|
></md-outlined-button>`
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
: (this.node.updateState ?? 0) > 1
|
|
134
|
+
? html` <md-outlined-button disabled
|
|
125
135
|
>${getUpdateStateLabel(
|
|
126
136
|
this.node.updateState!,
|
|
127
137
|
this.node.updateStateProgress,
|
|
128
138
|
)}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
129
139
|
></md-outlined-button>`
|
|
130
|
-
|
|
140
|
+
: html`<md-outlined-button @click=${handleAsync(() => this._searchUpdate())}
|
|
131
141
|
>Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
132
|
-
></md-outlined-button>`
|
|
133
|
-
|
|
134
|
-
|
|
142
|
+
></md-outlined-button>`
|
|
143
|
+
}
|
|
144
|
+
${
|
|
145
|
+
bindings
|
|
146
|
+
? html`
|
|
135
147
|
<md-outlined-button @click=${handleAsync(() => this._binding())}>
|
|
136
148
|
Binding
|
|
137
149
|
<ha-svg-icon slot="icon" .path=${mdiLink}></ha-svg-icon>
|
|
138
150
|
</md-outlined-button>
|
|
139
151
|
`
|
|
140
|
-
|
|
152
|
+
: nothing
|
|
153
|
+
}
|
|
141
154
|
|
|
142
155
|
<md-outlined-button @click=${handleAsync(() => this._openCommissioningWindow())}
|
|
143
156
|
>Share<ha-svg-icon slot="icon" .path=${mdiShareVariant}></ha-svg-icon
|
|
@@ -32,7 +32,13 @@ export class ServerDetails extends LitElement {
|
|
|
32
32
|
<md-list-item>
|
|
33
33
|
<div slot="headline">
|
|
34
34
|
<b>Open Home Foundation Matter Server ${this.client.isProduction ? "" : `(${this.client.serverBaseAddress})`}</b>
|
|
35
|
-
${
|
|
35
|
+
${
|
|
36
|
+
this.client.connection.connected
|
|
37
|
+
? nothing
|
|
38
|
+
: html`
|
|
39
|
+
<span class="status">OFFLINE</span>
|
|
40
|
+
`
|
|
41
|
+
}
|
|
36
42
|
</div>
|
|
37
43
|
</md-list-item>
|
|
38
44
|
<md-list-item>
|
|
@@ -17,10 +17,10 @@ import { clusters } from "../client/models/descriptions.js";
|
|
|
17
17
|
import { showAlertDialog } from "../components/dialog-box/show-dialog-box.js";
|
|
18
18
|
import "../components/ha-svg-icon";
|
|
19
19
|
import "../pages/components/node-details";
|
|
20
|
-
import { bindingContext } from "./components/context.js";
|
|
21
20
|
// Cluster command components (auto-register on import)
|
|
22
21
|
import { formatHex, formatNodeAddress, getEffectiveFabricIndex } from "../util/format_hex.js";
|
|
23
22
|
import { getClusterCommandsTag } from "./cluster-commands/index.js";
|
|
23
|
+
import { bindingContext } from "./components/context.js";
|
|
24
24
|
|
|
25
25
|
declare global {
|
|
26
26
|
interface HTMLElementTagNameMap {
|
|
@@ -118,23 +118,27 @@ class MatterClusterView extends LitElement {
|
|
|
118
118
|
(attribute, index) => html`
|
|
119
119
|
<md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
|
|
120
120
|
<div slot="headline">
|
|
121
|
-
${
|
|
122
|
-
|
|
121
|
+
${
|
|
122
|
+
clusters[this.cluster!]?.attributes[attribute.key]?.label ??
|
|
123
|
+
"Custom/Unknown Attribute"
|
|
124
|
+
}
|
|
123
125
|
</div>
|
|
124
126
|
<div slot="supporting-text">
|
|
125
127
|
AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
|
|
126
128
|
${clusters[this.cluster!]?.attributes[attribute.key]?.type ?? "unknown"}
|
|
127
129
|
</div>
|
|
128
130
|
<div slot="end">
|
|
129
|
-
${
|
|
130
|
-
|
|
131
|
+
${
|
|
132
|
+
toBigIntAwareJson(attribute.value).length > 20
|
|
133
|
+
? html`<button
|
|
131
134
|
@click=${() => {
|
|
132
135
|
this._showAttributeValue(attribute.value);
|
|
133
136
|
}}
|
|
134
137
|
>
|
|
135
138
|
Show value
|
|
136
139
|
</button>`
|
|
137
|
-
|
|
140
|
+
: html`<code>${toBigIntAwareJson(attribute.value)}</code>`
|
|
141
|
+
}
|
|
138
142
|
</div>
|
|
139
143
|
</md-list-item>
|
|
140
144
|
`,
|
|
@@ -75,14 +75,16 @@ class MatterNodeView extends LitElement {
|
|
|
75
75
|
<div class="node-title-bar">
|
|
76
76
|
<ha-svg-icon class="node-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
|
|
77
77
|
<h2>Node ${this.node.node_id} <span class="node-id-hex">${nodeHex}</span></h2>
|
|
78
|
-
${
|
|
79
|
-
|
|
78
|
+
${
|
|
79
|
+
showGraphButton
|
|
80
|
+
? html`
|
|
80
81
|
<a href=${graphUrl} class="show-in-graph-button" title="Show in ${graphViewType} graph">
|
|
81
82
|
<ha-svg-icon .path=${mdiGraphOutline}></ha-svg-icon>
|
|
82
83
|
<span class="button-text">Show in graph</span>
|
|
83
84
|
</a>
|
|
84
85
|
`
|
|
85
|
-
|
|
86
|
+
: ""
|
|
87
|
+
}
|
|
86
88
|
</div>
|
|
87
89
|
<node-details .node=${this.node} .client=${this.client}></node-details>
|
|
88
90
|
</div>
|
|
@@ -97,7 +97,13 @@ class MatterServerView extends LitElement {
|
|
|
97
97
|
node.node_id,
|
|
98
98
|
)})</span
|
|
99
99
|
>
|
|
100
|
-
${
|
|
100
|
+
${
|
|
101
|
+
node.available
|
|
102
|
+
? ""
|
|
103
|
+
: html`
|
|
104
|
+
<span class="status">OFFLINE</span>
|
|
105
|
+
`
|
|
106
|
+
}
|
|
101
107
|
</div>
|
|
102
108
|
<div slot="supporting-text">
|
|
103
109
|
${node.nodeLabel ? `${node.nodeLabel} | ` : nothing} ${node.vendorName} |
|
|
@@ -96,8 +96,9 @@ export class DevicePanel extends LitElement {
|
|
|
96
96
|
class="expand-icon"
|
|
97
97
|
></ha-svg-icon>
|
|
98
98
|
</div>
|
|
99
|
-
${
|
|
100
|
-
|
|
99
|
+
${
|
|
100
|
+
this._isExpanded
|
|
101
|
+
? html`
|
|
101
102
|
<md-list class="device-list">
|
|
102
103
|
${this.nodeIds.map(nodeId => {
|
|
103
104
|
const node = this.nodes[nodeId.toString()];
|
|
@@ -113,7 +114,8 @@ export class DevicePanel extends LitElement {
|
|
|
113
114
|
})}
|
|
114
115
|
</md-list>
|
|
115
116
|
`
|
|
116
|
-
|
|
117
|
+
: nothing
|
|
118
|
+
}
|
|
117
119
|
</div>
|
|
118
120
|
`;
|
|
119
121
|
}
|