iobroker.tr-064 5.0.2 → 5.1.4
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/README.md +94 -25
- package/admin/custom/.vite/manifest.json +190 -0
- package/admin/custom/assets/Components-etMgywDZ.js +1 -0
- package/admin/custom/assets/MeshTopology-B9SsXcMc.js +4 -0
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1-C4BjX5dX.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js +1217 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js +2 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BtYL_XWD.js +122 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__-B9QPCQeP.js +9 -0
- package/admin/custom/assets/dist-B8KMjpwu.js +1 -0
- package/admin/custom/assets/helpers-mPMYxszG.js +1 -0
- package/admin/custom/assets/hostInit-CeJ0LoqS.js +1 -0
- package/admin/custom/assets/iconLibraryData-B5fiyl1C.js +1 -0
- package/admin/custom/assets/lib-DF6pqjZN.js +3 -0
- package/admin/custom/assets/pendingShares-CGUG-stN.js +2 -0
- package/admin/custom/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/admin/custom/assets/utils-Cw-lO5PH.js +4 -0
- package/admin/custom/assets/vite-preload-helper-CaC3yEL3.js +1 -0
- package/admin/custom/customComponents.js +12 -0
- package/admin/custom/i18n/de.json +49 -0
- package/admin/custom/i18n/en.json +49 -0
- package/admin/custom/i18n/es.json +49 -0
- package/admin/custom/i18n/fr.json +49 -0
- package/admin/custom/i18n/it.json +49 -0
- package/admin/custom/i18n/nl.json +49 -0
- package/admin/custom/i18n/pl.json +49 -0
- package/admin/custom/i18n/pt.json +49 -0
- package/admin/custom/i18n/ru.json +49 -0
- package/admin/custom/i18n/uk.json +49 -0
- package/admin/custom/i18n/zh-cn.json +49 -0
- package/admin/custom/mf-manifest.json +1 -0
- package/admin/dm-widgets/.vite/manifest.json +140 -0
- package/admin/dm-widgets/assets/Components-Dy9S3Oqp.js +4 -0
- package/admin/dm-widgets/assets/_virtual_mf-localSharedImportMap___mfe_internal__DevicesWidgetTr064Set__mf_owner__1-k2Q0ZlQx.js +1 -0
- package/admin/dm-widgets/assets/_virtual_mf___mfe_internal__DevicesWidgetTr064Set__mf_owner__14264094198548__loadShare__shared-90ks6q6X.js +2 -0
- package/admin/dm-widgets/assets/_virtual_mf___mfe_internal__DevicesWidgetTr064Set__mf_owner__14264094198548__prebuild___mf_0_iobroker_mf_1_dm_mf_2_widgets__prebuild__-CiYX8DhF.js +1 -0
- package/admin/dm-widgets/assets/dist-eloWKTxM.js +1 -0
- package/admin/dm-widgets/assets/helpers-C7lQ9D8o.js +1 -0
- package/admin/dm-widgets/assets/hostInit-hUxYjlJV.js +1 -0
- package/admin/dm-widgets/assets/no-page-BvRk9kiK.js +0 -0
- package/admin/dm-widgets/assets/no-page-D8jArRpU.js +2 -0
- package/admin/dm-widgets/assets/pendingShares-BJrmbtIv.js +2 -0
- package/admin/dm-widgets/assets/react-pcwjPi4V.js +1 -0
- package/admin/dm-widgets/assets/translations-CZMfeIvV.js +1 -0
- package/admin/dm-widgets/assets/utils-DMh7iVlT.js +4 -0
- package/admin/dm-widgets/assets/vite-preload-helper-CaC3yEL3.js +1 -0
- package/admin/dm-widgets/customDevices.js +12 -0
- package/admin/dm-widgets/fritzbox.png +0 -0
- package/admin/dm-widgets/mf-manifest.json +1 -0
- package/admin/i18n/de.json +15 -1
- package/admin/i18n/en.json +15 -1
- package/admin/i18n/es.json +15 -1
- package/admin/i18n/fr.json +15 -1
- package/admin/i18n/it.json +16 -2
- package/admin/i18n/nl.json +15 -1
- package/admin/i18n/pl.json +15 -1
- package/admin/i18n/pt.json +15 -1
- package/admin/i18n/ru.json +15 -1
- package/admin/i18n/uk.json +15 -1
- package/admin/i18n/zh-cn.json +15 -1
- package/admin/jsonConfig.json +126 -3
- package/build/lib/calllist.js +168 -89
- package/build/lib/calllist.js.map +1 -1
- package/build/lib/callmonitor.js +134 -15
- package/build/lib/callmonitor.js.map +1 -1
- package/build/lib/deflections.js +13 -4
- package/build/lib/deflections.js.map +1 -1
- package/build/lib/devices.js +6 -0
- package/build/lib/devices.js.map +1 -1
- package/build/lib/mesh.js +237 -0
- package/build/lib/mesh.js.map +1 -0
- package/build/lib/oui.js +128 -0
- package/build/lib/oui.js.map +1 -0
- package/build/lib/phonebook.js +53 -8
- package/build/lib/phonebook.js.map +1 -1
- package/build/lib/states.js +72 -2
- package/build/lib/states.js.map +1 -1
- package/build/lib/systemdata.js +7 -3
- package/build/lib/systemdata.js.map +1 -1
- package/build/lib/tr064.js +582 -86
- package/build/lib/tr064.js.map +1 -1
- package/build/lib/utils.js +102 -0
- package/build/lib/utils.js.map +1 -1
- package/build/main.js +452 -60
- package/build/main.js.map +1 -1
- package/data/oui.txt +53430 -0
- package/io-package.json +106 -56
- package/package.json +18 -7
- package/widgets/tr-064/.vite/manifest.json +298 -0
- package/widgets/tr-064/assets/Generic-CDPITo0I.js +1 -0
- package/widgets/tr-064/assets/MeshView-Dtizwffo.js +4 -0
- package/widgets/tr-064/assets/Tr064FritzBox-CfPqURlY.js +1 -0
- package/widgets/tr-064/assets/Tr064Mesh-Djcvx1_V.js +1 -0
- package/widgets/tr-064/assets/Tr064Presence-BbSI8bq4.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf-localSharedImportMap___mfe_internal__vis2Tr064Widgets__mf_owner__1-LZrGs9hh.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__shared-CK9g-w1a.js +2 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_emotion_mf_1_react__prebuild__-D1F47nlJ.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_mui_mf_1_material__prebuild__-CXI-jzsj.js +245 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_mui_mf_1_private_mf_2_theming__prebuild__-DdBpSCnq.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react__prebuild__-BfR62PXi.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_1_jsx_mf_2_dev_mf_2_runtime__prebuild__-Cbwz_BNS.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-ls7Ro8xU.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_2_dom__prebuild__-C80Z9tvh.js +1 -0
- package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_2_dom_mf_1_client__prebuild__-BxU03gFN.js +9 -0
- package/widgets/tr-064/assets/defineProperty-D23yIfEm.js +10 -0
- package/widgets/tr-064/assets/dist-eloWKTxM.js +1 -0
- package/widgets/tr-064/assets/emotion-cache.browser.esm-Bul_CO7q.js +1 -0
- package/widgets/tr-064/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-C7E329a7.js +1 -0
- package/widgets/tr-064/assets/format-sGUrIYMZ.js +1 -0
- package/widgets/tr-064/assets/helpers-C7lQ9D8o.js +1 -0
- package/widgets/tr-064/assets/hostInit-BpiSTXsI.js +1 -0
- package/widgets/tr-064/assets/pendingShares-DyO2O4mO.js +2 -0
- package/widgets/tr-064/assets/react-Cvdyeg_0.js +1 -0
- package/widgets/tr-064/assets/react-dom-B-VxWsjA.js +1 -0
- package/widgets/tr-064/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/widgets/tr-064/assets/translations-CqowGBNV.js +1 -0
- package/widgets/tr-064/assets/utils-DMh7iVlT.js +4 -0
- package/widgets/tr-064/assets/vite-preload-helper-CaC3yEL3.js +1 -0
- package/widgets/tr-064/customWidgets.js +12 -0
- package/widgets/tr-064/img/prev_tr064_fritzbox.png +0 -0
- package/widgets/tr-064/img/prev_tr064_mesh.png +0 -0
- package/widgets/tr-064/img/prev_tr064_presence.png +0 -0
- package/widgets/tr-064/mf-manifest.json +1 -0
package/README.md
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
[](https://weblate.iobroker.net/engage/adapters/?utm_source=widget)
|
|
11
11
|
[](https://www.npmjs.com/package/iobroker.tr-064)
|
|
12
12
|
|
|
13
|
+
> [!IMPORTANT]
|
|
14
|
+
> This adapter cannot be installed from github
|
|
15
|
+
|
|
13
16
|
**This adapter uses the Sentry libraries. These libraries report exceptions and code errors automatically to the developers.** For more details, and for information about how to switch off the error reporting, see the [documentation of the Sentry plugin](https://github.com/ioBroker/plugin-sentry#plugin-sentry). The Sentry reporting is used from js-controller 3.0 on.
|
|
14
17
|
|
|
15
18
|
## Info
|
|
@@ -32,10 +35,12 @@ The adapter is based on the [FRITZ! interface documentation](https://fritz.com/p
|
|
|
32
35
|
|
|
33
36
|
- Switch the Wi-Fi for 2.4 GHz and 5 GHz on and off
|
|
34
37
|
- Switch the guest Wi-Fi on and off
|
|
38
|
+
- Switch all Wi-Fis with `states.wlan` like the WLAN button of the Fritz!Box: only the Wi-Fis which were active before are switched on again, not the guest Wi-Fi or a band which you switched off
|
|
35
39
|
- Restart the Fritz!Box
|
|
36
40
|
- Start the WPS process
|
|
37
41
|
- Reconnect the internet connection
|
|
38
42
|
- Read the external IP address
|
|
43
|
+
- Read the internet connection: `states.wanAccessType` (`DSL`, `Ethernet`, `Fiber`, `Cable`, `LTE`, `UMTS`), `states.wanLinkStatus` (`Up`, `Down`, ...), `states.wanProvider`, the line speed `states.wanDownstreamMax`/`states.wanUpstreamMax` (bit/s), the bytes sent and received since the connection was established `states.wanBytesSent`/`states.wanBytesReceived` and the current rates `states.wanSendRate`/`states.wanReceiveRate` (bytes per second). A change of `wanAccessType` shows for example a fallback to a mobile connection
|
|
39
44
|
|
|
40
45
|
### ring (dial a number)
|
|
41
46
|
|
|
@@ -59,6 +64,12 @@ You can use this adapter to monitor the presence of persons in your home. In thi
|
|
|
59
64
|
- For every device, the adapter creates a folder structure in the objects of the adapter. Normally this is the folder `tr-064.0.devices`.
|
|
60
65
|
- As soon as somebody arrives or leaves, the adapter gets this information. The state `tr-064.0.devices.xxx.active`, where `xxx` is the name of the device, shows whether this device is available, and therefore whether the person is at home.
|
|
61
66
|
|
|
67
|
+
The option "Show the access point of the devices" (on by default) reads the mesh topology of the Fritz!Box once a minute: `devices.xxx.accessPoint` is the Fritz!Box or the repeater the device is connected to, `devices.xxx.connection` the band (`2.4 GHz`, `5 GHz`, `6 GHz`) or `LAN`. With it a script can react only when a smartphone is connected to the repeater at the entrance. The tab "Mesh" of the settings shows the whole mesh topology as a graphic, while the instance runs.
|
|
68
|
+
|
|
69
|
+
By default `xxx` is the name of the device in the Fritz!Box, not the name in the table. Switch on "Name the objects after this table" in the tab "Devices" to get the names of the table. Then two devices with the same name in the Fritz!Box get separate objects, and the objects do not move when a device is renamed in the Fritz!Box. When you switch the option on, the objects which were created with the name of the Fritz!Box are deleted on the next start, so scripts, aliases or VIS views which use them have to be adjusted. A name which occurs twice in the table gets a number at the end (`Guest`, `Guest_2`).
|
|
70
|
+
|
|
71
|
+
A smartphone with a private Wi-Fi address has another MAC address in every Wi-Fi, e.g. in the guest Wi-Fi. Enter all its addresses in the column MAC, separated by commas: the device is present as soon as one of them is active, and `lastMAC-address` shows which one. A rotating private address (iOS 18: "Rotating") changes regularly and cannot be watched this way.
|
|
72
|
+
|
|
62
73
|
You can also switch on the option "Use mDNS to discover new devices". If mDNS is used, the adapter does not need to poll the Fritz!Box, and it detects changes faster.
|
|
63
74
|
|
|
64
75
|
Users report that the detection also works reliably for iOS devices, for example, for iPhones. For iPhones, users report that the Fritz!Box needs up to 10 minutes to detect that a person has left and is no longer connected with the Wi-Fi. The Fritz!Box needs up to 1 minute to detect the presence again.
|
|
@@ -73,6 +84,10 @@ You can switch the answering machine on and off. With the state `cbIndex` you se
|
|
|
73
84
|
|
|
74
85
|
The call monitor creates states in real time for every incoming and outgoing call. If the phone book is switched on, which is the default setting, the adapter resolves the numbers into names. There is also a state that shows a ringing telephone.
|
|
75
86
|
|
|
87
|
+
- `callmonitor.connected` shows whether the adapter is connected to the call monitor of the Fritz!Box.
|
|
88
|
+
- `extension` is the port of the telephone which takes or makes the call, `device` its name, e.g. `Mobilteil Küche`. The Fritz!Box reports only the port; the adapter learns the name of every port from the call lists, so `device` is only filled when the call lists are switched on and the telephone was used once. The Fritz!Box knows the telephone of an incoming call only when it is picked up: `callmonitor.connect.device`.
|
|
89
|
+
- The Fritz!Box does not report internal calls, e.g. of a door bell which calls `**9`, neither to the call monitor nor over TR-064.
|
|
90
|
+
|
|
76
91
|
### Phone book
|
|
77
92
|
|
|
78
93
|
- If the phone book is switched on, the adapter uses it to find the name for the number of the caller.
|
|
@@ -80,6 +95,8 @@ The call monitor creates states in real time for every incoming and outgoing cal
|
|
|
80
95
|
|
|
81
96
|
Example: if you set the state `phonebook.number`, the adapter sets all 3 states, `name`, `number` and `image`, to the values of the contact that was found. Note: for a search by name, the adapter first compares the complete name. If no contact is found, the adapter searches for a part of the name.
|
|
82
97
|
|
|
98
|
+
If one number is in several phone books with different names, the table "Phone book per own number" in the options decides which name the call monitor shows: enter your own number (the last digits are enough) and the name of the phone book in the Fritz!Box. A call to or from this own number takes the name from this phone book first.
|
|
99
|
+
|
|
83
100
|
### Call lists
|
|
84
101
|
|
|
85
102
|
Output formats:
|
|
@@ -98,6 +115,33 @@ Call counter: you can set the call counter to 0. The next call increases the cou
|
|
|
98
115
|
|
|
99
116
|
You can configure the HTML output with a template.
|
|
100
117
|
|
|
118
|
+
### Event log
|
|
119
|
+
|
|
120
|
+
The option "Read the event log of the FRITZ!Box" reads the event log of the Fritz!Box once a minute:
|
|
121
|
+
|
|
122
|
+
- `deviceLog.json` - the last 50 events, the newest first: `[{"id": 506, "group": "sys", "date": "18.09.26", "time": "10:05:00", "msg": "..."}]`. `group` is `sys`, `net`, `fon`, `wlan` or `usb`.
|
|
123
|
+
- `deviceLog.newEvents` - the events since the last reading, written only when there are new ones. After a restart it contains the events since the last run.
|
|
124
|
+
|
|
125
|
+
With it a script can report a login to the user interface of the Fritz!Box ("Anmeldung des Benutzers ... an der FRITZ!Box-Benutzeroberfläche"). The text of the messages depends on the language of the Fritz!Box. The action `GetDeviceLog` of `states.command` returns a shortened log without these events.
|
|
126
|
+
|
|
127
|
+
### Write unchanged values
|
|
128
|
+
|
|
129
|
+
By default the adapter writes a value only when it changes. With the option "Write unchanged values too" every polled value is written with a new time stamp, so a script can use "was updated" instead of "was changed". This increases the load of the database.
|
|
130
|
+
|
|
131
|
+
### Widgets for vis-2 and ioBroker.devices
|
|
132
|
+
|
|
133
|
+
The adapter brings widgets which show the state of the Fritz!Box. A click on the tile opens a dialog with the mesh topology, full screen on a phone.
|
|
134
|
+
|
|
135
|
+
vis-2 (widget set "FRITZ!Box"):
|
|
136
|
+
|
|
137
|
+
- **FRITZ!Box** (`Tr064FritzBox`): a tile like in ioBroker.devices with the online state, model, kind of the connection, current download and upload, external IP, WLAN and guest WLAN, new messages and missed calls. It chooses its layout by its size, from a small square to a large card with the use of the line. Optionally the chips of the WLAN and the guest WLAN switch them (`switchWlan`).
|
|
138
|
+
- **Mesh topology** (`Tr064Mesh`): the mesh topology as a graphic or table which fills the widget, refreshed while it is visible.
|
|
139
|
+
- **Presence** (`Tr064Presence`): the configured devices with present/away, access point and band.
|
|
140
|
+
|
|
141
|
+
ioBroker.devices: the widget **FRITZ!Box** can be added to a category in all four sizes (1x1, 2x0.5, 2x1, 2x2); in the settings of the widget the instance of the adapter is selected.
|
|
142
|
+
|
|
143
|
+
The widgets need the states of the adapter version with these widgets (`states.boxModel`, `states.wan*`, ...) and the running instance for the mesh topology.
|
|
144
|
+
|
|
101
145
|
### The states command and commandResult
|
|
102
146
|
|
|
103
147
|
With the state `command` you can call every tr-064 command from this [documentation](https://avm.de/service/schnittstellen/). Example:
|
|
@@ -154,35 +198,60 @@ If you switch from the adapter tr-064-community, you can copy the complete devic
|
|
|
154
198
|
Placeholder for the next version (at the beginning of the line):
|
|
155
199
|
### **WORK IN PROGRESS**
|
|
156
200
|
-->
|
|
201
|
+
### 5.1.4 (2026-10-02)
|
|
202
|
+
- (@GermanBluefox) New look of the devices in the mesh topology: every device carries the symbol of its kind (computer, smartphone, camera, lamp, printer, ...) next to its name, below it the manufacturer and the IP address, and on the right side the band and the signal. The kind comes from the FRITZ!Box (`device_class`, or the kind which was set for the device in the box), an unknown one gets a generic symbol
|
|
203
|
+
- (@GermanBluefox) `common.localLink` of `io-package.json`, the link to the web interface of the FRITZ!Box, is replaced by `common.localLinks` - the js-controller has removed the old attribute from its schema, which made the package test fail
|
|
204
|
+
- (@GermanBluefox) A card of the mesh topology whose devices have no signal - a switch, a repeater with LAN devices only - uses compact devices: the manufacturer and the IP address stand next to each other below the name instead of below each other
|
|
205
|
+
- (@GermanBluefox) The table of the mesh topology shows the same symbol in front of the name, and the bars of the signal carry the color of the band - only a signal below -80 dBm, or one which the box itself calls too far away, turns red
|
|
206
|
+
|
|
207
|
+
### 5.1.2 (2026-10-01)
|
|
208
|
+
- (@GermanBluefox) The mesh topology shows the signal strength of a WLAN device: four bars and the value in dBm (`rx_rcpi`/`tx_rcpi` of the mesh list), the signal to noise and the rating of the FRITZ!Box itself ("too far away from the access point", `client_position`) in the tooltip and in the new column "Signal" of the table
|
|
209
|
+
- (@GermanBluefox) A device which is not connected any more shows when it was connected last (`last_connected`)
|
|
210
|
+
- (@GermanBluefox) The manufacturer of a device is taken from the FRITZ!Box (`device_manufacturer`, which it knows from LLDP or the DHCP request) and only looked up in the IEEE registries if the box does not name one
|
|
211
|
+
- (@GermanBluefox) The data rates of the mesh topology were shown as download and upload the wrong way round for every link whose first node is the access point - the FRITZ!Box reports `rx`/`tx` from the view of its own node 1, which is not always the upstream side
|
|
212
|
+
- (@GermanBluefox) A click on the missed calls of the tiles ("FRITZ!Box" widget of vis-2 and of `ioBroker.devices`) asks whether the counter is reset and sets `calllists.missed.count` to 0. The counter belongs to the adapter, not to the FRITZ!Box - it counts every missed call since the installation, including the complete call list which is read on the first start. The adapter now confirms a written counter right away instead of at the next poll
|
|
213
|
+
|
|
214
|
+
### 5.1.1 (2026-09-29)
|
|
215
|
+
- (@GermanBluefox) The mesh topology shows the manufacturer of a device below its name. It is resolved from the MAC address with the registries of the IEEE, which the adapter brings with it - no request leaves the network. A device with a randomized (locally administered) address, as many phones use it, is marked as such. The manufacturer can be switched off in the toolbar and in the attributes of the vis-2 widget
|
|
216
|
+
- (@GermanBluefox) A device can be renamed in the mesh topology: a click on its name asks for the new name and writes it into the FRITZ!Box (`X_AVM-DE_SetHostNameByMACAddress`), which uses it everywhere. A firmware without that action says so. Note: the objects below `devices` follow the name of the box, as long as the option "Use the configured names" is switched off
|
|
217
|
+
- (@GermanBluefox) New message `setHostName` (`sendTo('tr-064.0', 'setHostName', { mac, name })`) which renames a device in the FRITZ!Box
|
|
218
|
+
|
|
219
|
+
### 5.1.0 (2026-09-19)
|
|
220
|
+
- (@GermanBluefox) New widgets for vis-2 ("FRITZ!Box", "Mesh topology", "Presence") and for `ioBroker.devices` ("FRITZ!Box"): the state of the box as a tile, a click shows the mesh topology
|
|
221
|
+
- (@GermanBluefox) New states `boxModel` and `boxFirmware`
|
|
222
|
+
- (@GermanBluefox) The table in the tab "Devices" uses the whole width again: in 5.0.2 it was so narrow that name, IP and MAC could not be read
|
|
223
|
+
- (@GermanBluefox) "Search for devices" works with many devices: the adapter reads the list of all devices in one request (`X_AVM-DE_GetHostListPath`) instead of one request per device, which took longer than the 20 seconds of the button. The search is always answered, also when a request fails, the box has no devices or the adapter is not connected
|
|
224
|
+
- (@GermanBluefox) Fixed the crash `systemData.save is not a function` on start when a call list is generated: installations which ran an adapter version from 2017 to 2020 still had an invalid attribute `save` in the object `tr-064.<instance>`, which is removed now
|
|
225
|
+
- (@GermanBluefox) `wlanGuest` switches the guest WLAN again on boxes with three bands (e.g. FRITZ!Box 5690 Pro, 4060) instead of the third band: the guest WLAN is always the last WLAN configuration of the box
|
|
226
|
+
- (@GermanBluefox) New states `wlan60` and `wlan60Password` for the 6 GHz WLAN, and `wlan52` and `wlan52Password` for the second 5 GHz WLAN (e.g. FRITZ!Box 4060). The adapter asks the box which band its third WLAN uses
|
|
227
|
+
- (@GermanBluefox) The call lists do not stop updating after some hours anymore: the call monitor detects a connection which the box dropped unnoticed (e.g. by a restart) with TCP keepalive and reconnects, and the call lists are also read once a minute - that way they are updated without call monitor, too
|
|
228
|
+
- (@GermanBluefox) A call list download which the box does not answer is given up after 10 seconds with a warning
|
|
229
|
+
- (@GermanBluefox) `states.wlan` switches all WLANs like the WLAN button of the FRITZ!Box (`X_AVM-DE_SetWLANGlobalEnable`) and shows its state: switching on does not switch on the guest WLAN and bands which were off any more
|
|
230
|
+
- (@GermanBluefox) New states for the internet connection: `wanAccessType` (e.g. `LTE` during a fallback to a mobile connection), `wanLinkStatus`, `wanProvider`, `wanDownstreamMax`, `wanUpstreamMax`, and the traffic `wanBytesSent`, `wanBytesReceived` (64 bit counters), `wanSendRate`, `wanReceiveRate`
|
|
231
|
+
- (@GermanBluefox) New states `devices.xxx.accessPoint` and `devices.xxx.connection`: the FRITZ!Box or repeater a device is connected to and the band, read from the mesh topology. The new tab "Mesh" in the settings shows the mesh topology as a graphic. Admin 8 is required now
|
|
232
|
+
- (@GermanBluefox) New option "Read the event log of the FRITZ!Box": the complete event log including the logins to the user interface in `deviceLog.json`, new events in `deviceLog.newEvents`
|
|
233
|
+
- (@GermanBluefox) New state `callmonitor.connected` shows whether the call monitor is connected, and `callmonitor.*.device` the name of the telephone of a call
|
|
234
|
+
- (@GermanBluefox) New table "Phone book per own number": a number which is in several phone books gets its name from the phone book of the own number of the call
|
|
235
|
+
- (@GermanBluefox) New option "Write unchanged values too": every polled value is written with a new time stamp
|
|
236
|
+
- (@GermanBluefox) A single call forwarding of the FRITZ!Box is shown in `callForwarding` now - before, the states were only created from the second call forwarding on. With only one phone number the name of the number is added to the name of the state again, and a box without call forwardings does not delay the poll cycle by 3 seconds any more
|
|
237
|
+
- (@GermanBluefox) The call monitor does not lose events any more when the FRITZ!Box sends two of them in one network packet (e.g. `RING` and `DISCONNECT` of a very short call) or one event in two packets: the received data is split into lines now
|
|
238
|
+
- (@GermanBluefox) The call lists do not freeze for good any more when the FRITZ!Box numbers its calls from the beginning again, e.g. after exchanging the box, a factory reset or a restart: the adapter asked only for the calls after the last known call ID and got an empty list forever. It now checks an empty answer against the newest call of the box and builds the lists again from the call list of the box; only calls after the newest known call increase the counters. The meta object `tr-064.<instance>` is only written when the lists changed, not with every refresh
|
|
239
|
+
- (@GermanBluefox) New state `states.abNewMessages`: number of new (not yet listened) messages on the answering machines
|
|
240
|
+
- (@GermanBluefox) The MAC addresses of the configured devices are sent to the box in its own format `AA:BB:CC:DD:EE:FF`, so addresses entered in lower case, with dashes or without separators are found
|
|
241
|
+
- (@GermanBluefox) A configured device which the box does not know (or which is offline since the start) is logged once with a hint to check its MAC address and listed as inactive in `jsonDeviceList`, instead of silently being left out
|
|
242
|
+
- (@GermanBluefox) New option "Name the objects after this table" in the tab "Devices": the objects below `devices` get the names of the table instead of the names in the Fritz!Box, so two devices with the same name in the box are not mixed up any more. When the option is switched on, the objects which were created with the name of the box are deleted. mDNS writes into the same objects as the poll now - before it created additional objects with the name of the table
|
|
243
|
+
- (@GermanBluefox) A device can have several MAC addresses, separated by commas (e.g. a smartphone with a private Wi-Fi address in the home and the guest Wi-Fi): it is present if one of them is active. Changing the spelling of a MAC address does not delete the objects of the device any more, and "Search for devices" does not add a device of the table a second time
|
|
244
|
+
- (@GermanBluefox) A device request which the box does not answer does not stop the presence detection and the polling any more
|
|
245
|
+
- (@GermanBluefox) An info message tells when "Create JSON device list" is switched on, but no devices are configured
|
|
246
|
+
- (@GermanBluefox) The adapter connects to a FRITZ!Box whose WLAN is switched off: the check of the login used the WLAN, which the box answers with an error then, so the adapter restarted (4.x) or retried forever without creating its objects (5.0). A refused login is reported with a hint to check user, password and rights of the user instead of the advice to restart the box
|
|
247
|
+
- (@GermanBluefox) The adapter does not hang silently any more when the FRITZ!Box does not deliver the description of a service (e.g. `x_speedtestSCPD.xml` with FRITZ!OS 8.24 Labor): after 10 seconds the service is skipped with a warning, and the connection is limited to 60 seconds and retried
|
|
248
|
+
- (@GermanBluefox) The debug log does not contain sensitive data any more, so it can be shared to analyze problems: phone numbers, names, phone book and call data, host names, MAC and IP addresses, values of states and results of `states.command` are only logged with level `silly`, and the session ID in URLs of the box is never logged. The result of `states.command` is no longer logged with level info - it is still written into `states.commandResult`
|
|
249
|
+
- (@GermanBluefox) The call monitor does not stop any more when the FRITZ!Box refuses the connection, e.g. while it restarts after a firmware update: it retries every 60 seconds and reconnects on its own. The hint to open port 1012 with `#96*5*` is only logged if the call monitor was never connected
|
|
250
|
+
|
|
157
251
|
### 5.0.2 (2026-09-10)
|
|
158
252
|
- (@GermanBluefox) Fixed the crash `Cannot read properties of undefined (reading 'safe')` in `getWLAN` right after the start: the WLAN states are read again in every poll cycle
|
|
159
253
|
- (@GermanBluefox) A box without a separate 5 GHz configuration does not delay the polling by 3 seconds any more
|
|
160
254
|
|
|
161
|
-
### 5.0.1 (2026-09-09)
|
|
162
|
-
- (@GermanBluefox) **Breaking change:** the adapter requires node.js >= 22 now
|
|
163
|
-
- (@GermanBluefox) Adapter requires admin >= 7.7.22 now
|
|
164
|
-
- (@GermanBluefox) Adapter requires js-controller >= 6.0.11 now
|
|
165
|
-
- (@GermanBluefox) The adapter does not stop any more if the Fritz!Box cannot be reached. The connection is retried every 30 seconds, and the new state `info.connection` shows whether the box answers
|
|
166
|
-
- (@justr1) Expected disconnects of the call monitor (`ETIMEDOUT`, `ECONNRESET`, `EPIPE`) are logged as info now, because the adapter reconnects on its own
|
|
167
|
-
- (@GermanBluefox) The mDNS socket is closed when the adapter stops, so a restart does not leave a listener behind
|
|
168
|
-
- (@GermanBluefox) A phone book with only one contact is read now
|
|
169
|
-
- (@GermanBluefox) The hint how to open port 1012 is shown again if the call monitor is refused by the Fritz!Box
|
|
170
|
-
- (@GermanBluefox) The adapter was refactored to TypeScript. The sources are in `src/`, the adapter runs from `build/`
|
|
171
|
-
- (@GermanBluefox) The configuration dialog was rewritten as JsonConfig. Admin 7.7.22 or newer is required for it
|
|
172
|
-
- (@GermanBluefox) The adapter can only be installed from npm now, no longer directly from GitHub (`common.nogit`)
|
|
173
|
-
- (@GermanBluefox) The options "Use call forwarding options", "Use mDNS" and "Create JSON device list" have a default value in `io-package.json` now
|
|
174
|
-
- (@GermanBluefox) The command `dumpservices.fs` writes the file again instead of stopping the adapter
|
|
175
|
-
|
|
176
|
-
### 4.3.0 (2024-04-30)
|
|
177
|
-
* (mcm1957) Adapter requires node.js >= 18 and js-controller >= 5 now
|
|
178
|
-
* (mcm1957) Dependencies have been updated
|
|
179
|
-
|
|
180
|
-
### 4.2.18 (2023-01-04)
|
|
181
|
-
* (Apollon77) Prepare for future js-controller versions
|
|
182
|
-
|
|
183
|
-
### 4.2.17 (2022-09-16)
|
|
184
|
-
* (simatec/Apollon77) Prevent duplication of entries in configuration
|
|
185
|
-
* (Apollon77) Make sure the active status of devices in jsonDeviceList is correct
|
|
186
255
|
|
|
187
256
|
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
188
257
|
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_MeshTopology-B9SsXcMc.js": {
|
|
3
|
+
"file": "assets/MeshTopology-B9SsXcMc.js",
|
|
4
|
+
"name": "MeshTopology",
|
|
5
|
+
"imports": [
|
|
6
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
7
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js": {
|
|
11
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
12
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js",
|
|
13
|
+
"imports": [
|
|
14
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
15
|
+
"_vite-preload-helper-CaC3yEL3.js"
|
|
16
|
+
],
|
|
17
|
+
"dynamicImports": [
|
|
18
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
19
|
+
"node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js": {
|
|
23
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js",
|
|
24
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared",
|
|
25
|
+
"imports": [
|
|
26
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
27
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
28
|
+
"_vite-preload-helper-CaC3yEL3.js"
|
|
29
|
+
],
|
|
30
|
+
"dynamicImports": [
|
|
31
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js",
|
|
32
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"_dist-B8KMjpwu.js": {
|
|
36
|
+
"file": "assets/dist-B8KMjpwu.js",
|
|
37
|
+
"name": "dist",
|
|
38
|
+
"imports": [
|
|
39
|
+
"_utils-Cw-lO5PH.js"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"_helpers-mPMYxszG.js": {
|
|
43
|
+
"file": "assets/helpers-mPMYxszG.js",
|
|
44
|
+
"name": "helpers",
|
|
45
|
+
"imports": [
|
|
46
|
+
"_utils-Cw-lO5PH.js"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"_rolldown-runtime-Dd_uD5pT.js": {
|
|
50
|
+
"file": "assets/rolldown-runtime-Dd_uD5pT.js",
|
|
51
|
+
"name": "rolldown-runtime"
|
|
52
|
+
},
|
|
53
|
+
"_utils-Cw-lO5PH.js": {
|
|
54
|
+
"file": "assets/utils-Cw-lO5PH.js",
|
|
55
|
+
"name": "utils",
|
|
56
|
+
"imports": [
|
|
57
|
+
"_vite-preload-helper-CaC3yEL3.js"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"_vite-preload-helper-CaC3yEL3.js": {
|
|
61
|
+
"file": "assets/vite-preload-helper-CaC3yEL3.js",
|
|
62
|
+
"name": "vite-preload-helper"
|
|
63
|
+
},
|
|
64
|
+
"index.html": {
|
|
65
|
+
"file": "assets/index-CLu_8AYF.js",
|
|
66
|
+
"name": "index",
|
|
67
|
+
"src": "index.html",
|
|
68
|
+
"isEntry": true,
|
|
69
|
+
"imports": [
|
|
70
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
71
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js",
|
|
72
|
+
"_MeshTopology-B9SsXcMc.js"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js": {
|
|
76
|
+
"file": "assets/iconLibraryData-B5fiyl1C.js",
|
|
77
|
+
"name": "iconLibraryData",
|
|
78
|
+
"src": "node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js",
|
|
79
|
+
"isDynamicEntry": true
|
|
80
|
+
},
|
|
81
|
+
"node_modules/react-qr-code/lib/index.mjs": {
|
|
82
|
+
"file": "assets/lib-DF6pqjZN.js",
|
|
83
|
+
"name": "lib",
|
|
84
|
+
"src": "node_modules/react-qr-code/lib/index.mjs",
|
|
85
|
+
"isDynamicEntry": true,
|
|
86
|
+
"imports": [
|
|
87
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
88
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"src/Components.tsx": {
|
|
92
|
+
"file": "assets/Components-etMgywDZ.js",
|
|
93
|
+
"name": "Components",
|
|
94
|
+
"src": "src/Components.tsx",
|
|
95
|
+
"isEntry": true,
|
|
96
|
+
"imports": [
|
|
97
|
+
"_MeshTopology-B9SsXcMc.js"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js": {
|
|
101
|
+
"file": "customComponents.js",
|
|
102
|
+
"name": "remoteEntry",
|
|
103
|
+
"src": "virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js",
|
|
104
|
+
"imports": [
|
|
105
|
+
"_vite-preload-helper-CaC3yEL3.js",
|
|
106
|
+
"_dist-B8KMjpwu.js",
|
|
107
|
+
"_helpers-mPMYxszG.js"
|
|
108
|
+
],
|
|
109
|
+
"dynamicImports": [
|
|
110
|
+
"src/Components.tsx",
|
|
111
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1": {
|
|
115
|
+
"file": "assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1-C4BjX5dX.js",
|
|
116
|
+
"name": "_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1",
|
|
117
|
+
"src": "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1",
|
|
118
|
+
"isDynamicEntry": true,
|
|
119
|
+
"imports": [
|
|
120
|
+
"_vite-preload-helper-CaC3yEL3.js",
|
|
121
|
+
"_dist-B8KMjpwu.js"
|
|
122
|
+
],
|
|
123
|
+
"dynamicImports": [
|
|
124
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
125
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
126
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js",
|
|
127
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js": {
|
|
131
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BtYL_XWD.js",
|
|
132
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__",
|
|
133
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js",
|
|
134
|
+
"isDynamicEntry": true,
|
|
135
|
+
"imports": [
|
|
136
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
137
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
138
|
+
"_vite-preload-helper-CaC3yEL3.js",
|
|
139
|
+
"_dist-B8KMjpwu.js"
|
|
140
|
+
],
|
|
141
|
+
"dynamicImports": [
|
|
142
|
+
"node_modules/react-qr-code/lib/index.mjs"
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js": {
|
|
146
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js",
|
|
147
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__",
|
|
148
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
149
|
+
"isDynamicEntry": true,
|
|
150
|
+
"imports": [
|
|
151
|
+
"_rolldown-runtime-Dd_uD5pT.js"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js": {
|
|
155
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__-B9QPCQeP.js",
|
|
156
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__",
|
|
157
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js",
|
|
158
|
+
"isDynamicEntry": true,
|
|
159
|
+
"imports": [
|
|
160
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
161
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js": {
|
|
165
|
+
"file": "assets/hostInit-CeJ0LoqS.js",
|
|
166
|
+
"name": "hostInit",
|
|
167
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js",
|
|
168
|
+
"imports": [
|
|
169
|
+
"_vite-preload-helper-CaC3yEL3.js",
|
|
170
|
+
"_helpers-mPMYxszG.js"
|
|
171
|
+
],
|
|
172
|
+
"dynamicImports": [
|
|
173
|
+
"virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js",
|
|
174
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__P_S__pendingShares__P_S__.js": {
|
|
178
|
+
"file": "assets/pendingShares-CGUG-stN.js",
|
|
179
|
+
"name": "pendingShares",
|
|
180
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__P_S__pendingShares__P_S__.js",
|
|
181
|
+
"imports": [
|
|
182
|
+
"_vite-preload-helper-CaC3yEL3.js"
|
|
183
|
+
],
|
|
184
|
+
"dynamicImports": [
|
|
185
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js",
|
|
186
|
+
"__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js",
|
|
187
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./MeshTopology-B9SsXcMc.js";var t={MeshTopology:e};export{t as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{$t as e,An as t,Bn as n,C as r,Cn as i,Dn as a,Dt as o,E as s,En as c,G as l,H as u,Hi as d,Hn as f,Ht as p,It as m,Jt as h,Kr as g,Li as _,Mn as ee,Mt as v,O as y,On as b,Ot as x,Pn as S,Qn as C,Qt as te,R as ne,Rn as re,Rt as ie,Tn as w,U as ae,V as T,Vi as oe,Xt as E,Yt as D,Zn as O,_i as se,_n as k,bn as ce,bt as A,ct as j,d as M,dn as N,dt as P,en as le,fn as ue,gt as F,jt as I,kn as L,kt as de,ln as fe,lt as pe,mn as me,nn as he,pn as ge,qn as _e,qt as ve,rn as ye,tn as be,un as xe,vi as R,yi as z,yn as Se,zi as B,zn as Ce}from"./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js";import{t as we}from"./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare__shared-DdQDUBMT.js";function V(e){if(!e)return`other`;if(e.band)return e.band;let t=(e.interface||``).toUpperCase();return/(^|:)2(G|,4|\.4)/.test(t)?`2.4`:/(^|:)5G/.test(t)?`5`:/(^|:)6G/.test(t)?`6`:(e.type||``).toUpperCase()===`LAN`||t.startsWith(`LAN`)||t.startsWith(`ETH`)?`LAN`:`other`}function H(e){return!!e&&(e.state||``).toUpperCase()===`CONNECTED`}function U(e,t){return e?!H(e)&&H(t)?t:e:t}function W(e){return e.configured||e.name||e.mac||e.uid}function Te(e,t){return!!e.node.configured==!!t.node.configured?e.connected===t.connected?W(e.node).localeCompare(W(t.node)):e.connected?-1:1:e.node.configured?-1:1}function Ee(e){return{...e,from:e.to,to:e.from,curDown:e.curUp,curUp:e.curDown,maxDown:e.maxUp,maxUp:e.maxDown,rcpiFrom:e.rcpiTo,rcpiTo:e.rcpiFrom,rsniFrom:e.rsniTo,rsniTo:e.rsniFrom}}function G(e){return(e==null?void 0:e.rcpiTo)??(e==null?void 0:e.rcpiFrom)}function De(e){return e>=-60?4:e>=-70?3:e>=-80?2:1}function Oe(e,t){let n=(e==null?void 0:e.nodes)||[],r=(e==null?void 0:e.links)||[],i=new Map;n.forEach(e=>i.set(e.uid,e));let a=e=>{var t;let n=(t=i.get(e))==null?void 0:t.role;return!!n&&n!==`client`},o=new Map,s=new Map;for(let e of r)i.has(e.from)&&i.has(e.to)&&e.from!==e.to&&(a(e.from)&&a(e.to)?o.set(e.to,U(o.get(e.to),e)):a(e.from)?s.set(e.to,U(s.get(e.to),e)):a(e.to)&&s.set(e.from,U(s.get(e.from),Ee(e))));let c=n.filter(e=>e.role!==`client`);c.forEach(e=>e.role===`master`&&o.delete(e.uid));let l=new Map;c.forEach(e=>l.set(e.uid,{node:e,uplink:o.get(e.uid),clients:[],children:[]}));let u=0,d=[],f=[];for(let e of n){var p;if(e.role!==`client`)continue;u++;let n=s.get(e.uid),r=H(n);if(t.onlyConfigured&&!e.configured||!r&&!t.showDisconnected&&!e.configured)continue;let i={node:e,link:n,connected:r},a=n?l.get(n.from):void 0;a?a.clients.push(i):d.push(i);let o=n?V(n):``;f.push({uid:e.uid,name:W(e),hostName:e.name,vendor:e.vendor,randomMac:e.randomMac,configured:!!e.configured,accessPoint:(a==null||(p=a.node)==null?void 0:p.name)||``,kind:o,type:(n==null?void 0:n.type)||``,connected:r,curDown:n==null?void 0:n.curDown,curUp:n==null?void 0:n.curUp,rcpi:G(n),position:e.position,deviceClass:e.deviceClass,lastConnected:r||n==null?void 0:n.lastConnected,mac:e.mac,ip:e.ip})}l.forEach(e=>e.clients.sort(Te)),d.sort(Te),f.sort((e,t)=>e.configured===t.configured?e.connected===t.connected?e.name.localeCompare(t.name):e.connected?-1:1:e.configured?-1:1);let m=[...c].sort((e,t)=>{let n=e=>e.role===`master`?0:e.role===`slave`?1:2;return n(e)-n(t)||e.name.localeCompare(t.name)}),h=new Set,g=[],_=e=>{h.add(e.node.uid);for(let n of m){var t;let r=l.get(n.uid);!h.has(n.uid)&&((t=r.uplink)==null?void 0:t.from)===e.node.uid&&(e.children.push(r),_(r))}};for(let e of m){let t=l.get(e.uid),n=t.uplink&&l.get(t.uplink.from);!h.has(e.uid)&&(!n||e.role===`master`)&&(g.push(t),_(t))}for(let e of m)if(!h.has(e.uid)){let t=l.get(e.uid);g.push(t),_(t)}return{roots:g,unassigned:d,rows:f,total:u}}function K(e,t){return t&&ke(e)?56:40}function ke(e){return e.clients.some(e=>e.connected&&G(e.link)!==void 0)}function Ae(e){return e<=8?1:e<=20?2:e<=48?3:4}function je(e,t,n){let r=Math.ceil(e/t);return 60+(e?r*(n+6)-6+10:0)}function Me(e,t=!1){let n=[],r=[],i=new Map,a=e=>{let n=e.clients.length,r=Ae(n);return{w:Math.max(240,r*340+(r-1)*6+20),h:je(n,r,K(e,t)),columns:r}},o=e=>{let t=a(e).w,n=e.children.reduce((e,t)=>e+o(t),0),r=Math.max(t,n+32*Math.max(0,e.children.length-1));return i.set(e,r),r},s=0,c=(e,o,l)=>{let u=a(e),d=i.get(e),f={view:e,x:o+(d-u.w)/2,y:l,w:u.w,h:u.h,columns:u.columns,chipW:340,chipH:K(e,t)};n.push(f),s=Math.max(s,l+u.h);let p=o+(d-(e.children.reduce((e,t)=>e+i.get(t),0)+32*Math.max(0,e.children.length-1)))/2;for(let t of e.children){let e=c(t,p,l+u.h+76);if(t.uplink){let n=f.x+f.w/2,i=f.y+f.h,a=e.x+e.w/2,o=e.y,s=i+(o-i)/2;r.push({link:t.uplink,d:`M ${n} ${i} V ${s} H ${a} V ${o}`,labelX:a+6,labelY:o-10})}p+=i.get(t)+32}return f},l=16;for(let t of e)o(t),c(t,l,16),l+=i.get(t)+64;return{kind:`tree`,cards:n,edges:r,width:Math.max(l-64+16,0),height:s+16}}function Ne(e,t,n=!1){let r=[],i=[],a=8,o=(e,s)=>{let c=8+s*22,l=Math.max(232,t-8-c),u=l-20,d=e.clients.length,f=Math.max(1,Math.min(d||1,Math.floor((u+6)/218))),p=Math.min(420,(u-(f-1)*6)/f),m=K(e,n),h={view:e,x:c,y:a,w:l,h:je(d,f,m),columns:f,chipW:p,chipH:m};r.push(h),a+=h.h+30;let g=h.x+11,_=h.y+h.h;for(let t of e.children){let e=o(t,s+1);if(t.uplink){let n=e.y+24;i.push({link:t.uplink,d:`M ${g} ${_} V ${n} H ${e.x}`,labelX:e.x+4,labelY:e.y-8}),_=n}}return h};for(let t of e)o(t,0);return{kind:`stack`,cards:r,edges:i,width:t,height:Math.max(a-30+8,0)}}function Pe(e,t,n=!1){let r=Me(e,n);return r.width<=t?r:Ne(e,t,n)}function q(e,t,n=!1){return Math.max(3,Math.floor(e/(t*(n?.62:.56))))}function J(e,t){return e.length>t?`${e.substring(0,Math.max(1,t-1))}…`:e}function Y(e){if(!e)return`–`;let t=e/1e3;return t>=10?Math.round(t).toString():t.toFixed(1)}var Fe={COMPUTER:ne,STORAGE:te,SMARTPHONE:h,TABLET:le,GAMING_DEVICE:E,SET_TOP_BOX:ye,PRINTER:v,NETWORK_SWITCH:pe,SPEAKER:D,ROBOT:ve,PHONE:o,IP_PHONE:x,CIRCUIT_BOARD:T,CAMERA:r,DOOR_LOCK:F,DOOR_BELL:ae,SHUTTER:s,AIR_CONDITIONER:j,LAMP:P,THERMOSTAT:be,BUTTON:he,SOCKET:I,SENSOR:p,MONITOR:A,SMART_WATCH:y,ROUTER:ie};function Ie(e){return e&&Fe[e]||u}function Le(e){let t=Ie(e.deviceClass);return R(t,{x:e.x,y:e.y,width:e.size,height:e.size,sx:{width:e.size,height:e.size,color:e.color}})}var Re=`not alive`,ze=`not connected`,Be=`not supported`,X=`timeout`;async function Ve(e,t,n=2e4){try{let r=await e.getState(`system.adapter.${t}.alive`);if(!(r!=null&&r.val))return{error:Re,nodes:[],links:[]};let i,a=new Promise(e=>{i=setTimeout(()=>e(X),n)}),o=e.sendTo(t,`mesh`,{}),s=await Promise.race([o,a]);return clearTimeout(i),s===`timeout`||!s||typeof s!=`object`?{error:X,nodes:[],links:[]}:{error:s.error,ts:s.ts,nodes:Array.isArray(s.nodes)?s.nodes:[],links:Array.isArray(s.links)?s.links:[],canRename:!!s.canRename}}catch(e){return{error:(e==null?void 0:e.message)||String(e),nodes:[],links:[]}}}async function He(e,t,n,r,i=2e4){try{let a=await e.getState(`system.adapter.${t}.alive`);if(!(a!=null&&a.val))return Re;let o,s=new Promise(e=>{o=setTimeout(()=>e(X),i)}),c=e.sendTo(t,`setHostName`,{mac:n,name:r}),l=await Promise.race([c,s]);return clearTimeout(o),l===`timeout`||!l||typeof l!=`object`?X:l.error||void 0}catch(e){return(e==null?void 0:e.message)||String(e)}}var Ue=class{constructor(e){g(this,`options`,void 0),g(this,`timer`,null),g(this,`running`,!1),g(this,`stopped`,!0),g(this,`current`,{data:null,loading:!1,error:null}),this.options=e}get state(){return this.current}start(){this.stop(),this.stopped=!1,this.refresh();let e=this.options.interval??30;e>0&&(this.timer=setInterval(()=>void this.refresh(),e*1e3))}stop(){this.stopped=!0,this.timer&&=(clearInterval(this.timer),null)}async refresh(){if(this.running||this.stopped)return;this.running=!0,this.update({loading:!0});let e=await Ve(this.options.socket,this.options.instanceId,this.options.timeout);this.running=!1,!this.stopped&&(e.error?e.error===`not alive`?this.update({data:null,loading:!1,error:e.error}):this.update({loading:!1,error:e.error}):this.update({data:e,loading:!1,error:null}))}async rename(e,t){let n=await He(this.options.socket,this.options.instanceId,e,t,this.options.timeout);return!n&&!this.stopped&&await this.refresh(),n}update(e){this.current={...this.current,...e},this.stopped||this.options.onChange(this.current)}},Z={2.4:`#f59e0b`,5:`#3b82f6`,6:`#8b5cf6`,LAN:`#10b981`,other:`#9ca3af`},We=13,Ge=26,Ke=16,qe=63,Je=600,Ye=63,Xe=760,Ze=480;function Qe(e){let t={onlyConfigured:!1,showDisconnected:!1,showVendor:!0,viewMode:`graph`};try{let n=JSON.parse(window.localStorage.getItem(e)||`{}`);t.onlyConfigured=!!n.onlyConfigured,t.showDisconnected=!!n.showDisconnected,t.showVendor=n.showVendor!==!1,t.viewMode=n.viewMode===`table`?`table`:`graph`}catch{}return t}function $e(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function Q(e,t){return e.vendor||(e.randomMac?t(`tr064_randomMac`):``)}function $(e){switch(e){case`2.4`:case`5`:case`6`:return`${e} GHz`;case`LAN`:return`LAN`;default:return``}}function et(e,t){switch(e){case Re:return{severity:`info`,text:t(`tr064_startInstance`)};case ze:return{severity:`warning`,text:t(`tr064_notConnected`)};case Be:return{severity:`warning`,text:t(`tr064_notSupported`)};case X:return{severity:`warning`,text:t(`tr064_timeout`)};default:return{severity:`warning`,text:t(`tr064_error`,e)}}}function tt(e){return e.connected&&(e.curDown||e.curUp)?`↓ ${Y(e.curDown)} / ↑ ${Y(e.curUp)}`:``}var nt=`#ef4444`;function rt(e,t,n){return De(t)===1||n===`too_far`?nt:Z[e||`other`]}function it(e){let t=De(e.rcpi);return R(`g`,{transform:`translate(${e.x}, ${e.y})`,children:[0,1,2,3].map(n=>{let r=3+n*2.5;return R(`rect`,{x:n*3.3,y:-r,width:2.4,height:r,rx:.8,fill:e.color,opacity:n<t?1:.22},n)})})}function at(e){return e===void 0?``:`${e} dBm`}function ot(e,t){return e?t(`tr064_lastSeen`,new Date(e).toLocaleString()):``}function st(e,t,n){let r=[];return((e==null?void 0:e.rcpiTo)!==void 0||(e==null?void 0:e.rcpiFrom)!==void 0)&&r.push(n(`tr064_signalTooltip`,e.rcpiTo===void 0?`–`:String(e.rcpiTo),e.rcpiFrom===void 0?`–`:String(e.rcpiFrom))),((e==null?void 0:e.rsniTo)!==void 0||(e==null?void 0:e.rsniFrom)!==void 0)&&r.push(n(`tr064_noiseTooltip`,e.rsniTo===void 0?`–`:String(e.rsniTo),e.rsniFrom===void 0?`–`:String(e.rsniFrom))),(t===`too_far`||t===`too_close`)&&r.push(n(`tr064_position_${t}`)),r}function ct(e){return R(w,{component:`span`,sx:{display:`inline-block`,flexShrink:0,width:10,height:10,borderRadius:`2px`,backgroundColor:Z[e.kind]}})}function lt(){return R(w,{sx:{display:`flex`,gap:1.5,alignItems:`center`,flexWrap:`wrap`},children:[`2.4`,`5`,`6`,`LAN`].map(e=>z(w,{sx:{display:`flex`,alignItems:`center`,gap:.5},children:[R(ct,{kind:e}),R(i,{variant:`caption`,children:$(e)})]},e))})}function ut(e,t,n,r){var i;let a=V(e.link),o=((i=e.link.state)==null?void 0:i.toUpperCase())===`CONNECTED`,s=[$(a)||e.link.type,o&&e.link.curDown?`${Y(e.link.curDown)} Mbit/s`:``].filter(Boolean).join(` · `),c=[`${e.link.interface||e.link.type} - ${r(o?`tr064_connected`:`tr064_disconnected`)}`,e.link.curDown||e.link.curUp?r(`tr064_rateTooltip`,Y(e.link.curDown),Y(e.link.curUp)):``,...st(e.link,void 0,r),o?``:ot(e.link.lastConnected,r)].filter(Boolean);return z(`g`,{children:[R(`title`,{children:c.join(`
|
|
2
|
+
`)}),R(`path`,{d:e.d,fill:`none`,stroke:Z[a],strokeWidth:2.5,strokeDasharray:o?void 0:`6 4`}),R(`text`,{x:e.labelX,y:e.labelY,fontSize:11,fill:n.palette.text.secondary,children:s})]},`edge-${t}`)}function dt(e,t,n,r){let i=t.palette,a=e.view.node,o=a?a.name||a.mac:n(`tr064_notAssigned`),s=a?n(`tr064_role_${a.role}`):``,l=a!=null&&a.model&&a.model!==a.name?a.model:``,u=a&&r.showVendor?Q(a,n):``,d=[l||u,(a==null?void 0:a.ip)||``,s].filter(Boolean).join(` · `),f=a&&a.role!==`master`&&a.mac&&r.onRename?a.uid:``,p=e.view.clients.length,m=p===1?n(`tr064_oneDevice`):p?n(`tr064_devices`,p):``,h=q(e.w-20-(m?m.length*6.2+8:0),14,!0),g=q(e.w-20,11);return z(`g`,{transform:`translate(${e.x}, ${e.y})`,children:[R(`title`,{children:[o,a==null?void 0:a.model,a?Q(a,n):``,a==null?void 0:a.mac,a==null?void 0:a.ip,f?n(`tr064_clickToRename`):``].filter(Boolean).join(`
|
|
3
|
+
`)}),R(`rect`,{width:e.w,height:e.h,rx:8,fill:i.background.paper,stroke:(a==null?void 0:a.role)===`master`?i.primary.main:i.divider,strokeWidth:(a==null?void 0:a.role)===`master`?2:1,strokeDasharray:a?void 0:`5 4`}),R(`text`,{x:10,y:24,fontSize:14,fontWeight:600,fill:i.text.primary,style:f?{cursor:`pointer`}:void 0,onClick:f?()=>r.onRename(f):void 0,children:J(o,h)}),R(`text`,{x:10,y:42,fontSize:11,fill:i.text.secondary,children:J(d,g)}),R(`text`,{x:e.w-10,y:24,fontSize:11,textAnchor:`end`,fill:i.text.secondary,children:m}),e.view.clients.map((t,a)=>{var o;let s=a%e.columns,l=Math.floor(a/e.columns),u=10+s*(e.chipW+6),d=60+l*(e.chipH+6),f=V(t.link),p=!!t.node.configured,m=t.node.configured||t.node.name||t.node.mac,h=r.showVendor?Q(t.node,n):``,g=e.chipH>=56&&!!h,_=t.connected?G(t.link):void 0,ee=Math.max($(f)?34:0,_===void 0?0:qe),v=e.chipW-47-ee-6,y=_===void 0?e.chipW-47-8:v,b=t.node.ip?`IP: ${t.node.ip}`:``,x=!g&&b&&h?b.length*5.7+10:0,S=_===void 0?``:rt(f,_,t.node.position),C=[p?n(`tr064_configuredAs`,t.node.configured):``,t.node.name,Q(t.node,n),t.node.mac,t.node.ip,t.link?t.link.interface||t.link.type:``,t.connected?n(`tr064_connected`):n(`tr064_disconnected`),t.link&&(t.link.curDown||t.link.curUp)?n(`tr064_rateTooltip`,Y(t.link.curDown),Y(t.link.curUp)):``,...t.connected?st(t.link,t.node.position,n):[],t.connected?``:ot((o=t.link)==null?void 0:o.lastConnected,n),r.onRename?n(`tr064_clickToRename`):``].filter(Boolean);return z(`g`,{transform:`translate(${u}, ${d})`,opacity:t.connected?1:p?.85:.6,style:r.onRename?{cursor:`pointer`}:void 0,onClick:r.onRename?()=>r.onRename(t.node.uid):void 0,children:[R(`title`,{children:C.join(`
|
|
4
|
+
`)}),R(`rect`,{width:e.chipW,height:e.chipH,rx:7,fill:i.action.hover,stroke:p?i.primary.main:i.divider,strokeWidth:p?2:1,strokeDasharray:t.connected?void 0:`4 3`}),R(`path`,{d:`M 7 0.5 H 7 A 6.5 6.5 0 0 0 0.5 7 V ${e.chipH-7} A 6.5 6.5 0 0 0 7 ${e.chipH-.5} V 0.5 Z`,fill:Z[f]}),R(`rect`,{x:We,y:(e.chipH-Ge)/2,width:Ge,height:Ge,rx:6,fill:c(Z[f],.14)}),R(Le,{deviceClass:t.node.deviceClass,x:18,y:(e.chipH-Ke)/2,size:Ke,color:Z[f]}),R(`text`,{x:47,y:g?19:17,fontSize:12.5,fontWeight:p?700:600,fill:p?i.primary.main:i.text.primary,children:J(m,q(v,12.5,!0))}),h?R(`text`,{x:47,y:g?34:31,fontSize:10,fontStyle:`italic`,opacity:.75,fill:i.text.secondary,children:J(h,q(y-x,10))}):null,b?R(`text`,{x:x?47+y:47,y:g?48:31,fontSize:10,textAnchor:x?`end`:`start`,fill:i.text.secondary,children:J(b,q(y,10))}):null,R(`text`,{x:e.chipW-8,y:g?19:16,fontSize:10,textAnchor:`end`,fill:i.text.secondary,children:$(f)}),_===void 0?null:z(se,{children:[R(it,{rcpi:_,x:e.chipW-8-qe,y:g?41:34,color:S}),R(`text`,{x:e.chipW-8,y:g?41:34,fontSize:10.5,textAnchor:`end`,fill:S,children:at(_)})]})]},t.node.uid)})]},`card-${(a==null?void 0:a.uid)||`unassigned`}`)}function ft(e){let{tree:t,width:n,t:r,theme:a,showVendor:o,onRename:s}=e,c=n>=Xe,u=n>=Ze,d=u?void 0:{px:1};return z(fe,{size:`small`,stickyHeader:!0,children:[R(ge,{children:z(me,{children:[R(N,{sx:d,children:r(`tr064_device`)}),u?R(N,{children:r(`tr064_accessPoint`)}):null,R(N,{sx:d,children:r(`tr064_connection`)}),u?R(N,{children:r(`tr064_state`)}):null,u?R(N,{children:r(`tr064_signal`)}):null,u?R(N,{children:r(`tr064_rate`)}):null,c?R(N,{children:r(`tr064_mac`)}):null,c?R(N,{children:r(`tr064_ip`)}):null,s?R(N,{sx:{width:40}}):null]})}),R(xe,{children:t.rows.map(e=>z(me,{sx:{opacity:e.connected?1:.6},children:[z(N,{sx:{...d,fontWeight:e.configured?700:400,color:e.configured?a.palette.primary.main:void 0,overflowWrap:`anywhere`},title:e.configured&&e.hostName!==e.name?e.hostName:void 0,children:[z(w,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[R(w,{component:Ie(e.deviceClass),sx:{fontSize:17,flex:`0 0 auto`,color:e.kind?Z[e.kind]:`text.secondary`}}),R(`span`,{children:e.name})]}),o&&Q(e,r)?R(i,{variant:`caption`,component:`div`,color:`text.secondary`,sx:{fontStyle:`italic`,opacity:.7,fontWeight:400},children:Q(e,r)}):null,u?null:R(i,{variant:`caption`,component:`div`,color:`text.secondary`,sx:{fontWeight:400},children:[e.accessPoint||r(`tr064_notAssigned`),e.connected?``:r(`tr064_disconnected`)].filter(Boolean).join(` · `)})]}),u?R(N,{children:e.accessPoint||r(`tr064_notAssigned`)}):null,R(N,{sx:{...d,whiteSpace:`nowrap`},children:e.kind?z(w,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[R(ct,{kind:e.kind}),$(e.kind)||e.type]}):null}),u?z(N,{children:[e.connected?r(`tr064_connected`):r(`tr064_disconnected`),!e.connected&&e.lastConnected?R(i,{variant:`caption`,component:`div`,color:`text.secondary`,children:ot(e.lastConnected,r)}):null]}):null,u?z(N,{sx:{whiteSpace:`nowrap`},children:[e.connected&&e.rcpi!==void 0?z(w,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[R(w,{component:`svg`,viewBox:`0 0 13 11`,sx:{width:13,height:11,flex:`0 0 auto`},children:R(it,{rcpi:e.rcpi,x:0,y:11,color:rt(e.kind,e.rcpi,e.position)})}),at(e.rcpi)]}):null,e.connected&&(e.position===`too_far`||e.position===`too_close`)?R(i,{variant:`caption`,component:`div`,color:e.position===`too_far`?`warning.main`:`text.secondary`,children:r(`tr064_position_${e.position}`)}):null]}):null,u?R(N,{sx:{whiteSpace:`nowrap`},children:tt(e)}):null,c?R(N,{sx:{fontFamily:`monospace`},children:e.mac}):null,c?R(N,{children:e.ip||``}):null,s?R(N,{sx:{...d,width:40},children:R(C,{size:`small`,title:r(`tr064_rename`),onClick:()=>s(e.uid),children:R(l,{fontSize:`small`})})}):null]},e.uid))})]})}function pt(e){let{node:t,t:r,onClose:a,onRename:o}=e,[s,c]=d(t.name||``),[u,p]=d(!1),[m,h]=d(null),g=s.trim()&&s.trim()!==t.name,_=()=>{g&&!u&&(p(!0),h(null),o(t.mac,s.trim()).then(e=>{p(!1),e?h(e):a()}))};return z(re,{open:!0,fullWidth:!0,maxWidth:`sm`,onClose:u?void 0:a,children:[R(f,{children:r(`tr064_renameTitle`)}),z(n,{children:[R(i,{variant:`body2`,color:`text.secondary`,sx:{mb:2},children:[t.mac,Q(t,r),t.ip].filter(Boolean).join(` · `)}),R(k,{fullWidth:!0,autoFocus:!0,variant:`standard`,label:r(`tr064_newName`),value:s,disabled:u,error:!!m,slotProps:{htmlInput:{maxLength:Ye}},onChange:e=>c(e.target.value),onKeyUp:e=>{e.key===`Enter`&&_()}}),R(O,{severity:`info`,sx:{mt:2},children:r(`tr064_renameHint`)}),m?R(O,{severity:`error`,sx:{mt:1},children:r(`tr064_renameFailed`,m)}):null]}),z(Ce,{children:[R(L,{disabled:u,onClick:a,children:r(`tr064_cancel`)}),R(L,{variant:`contained`,disabled:u||!g,startIcon:u?R(S,{size:16}):R(l,{}),onClick:_,children:r(`tr064_rename`)})]})]})}function mt(n){let{data:r,loading:o,error:s,onRefresh:c,onRename:l,t:u,compact:f,height:p}=n,h=n.storageKey||`tr064.meshTopology`,g=b(),v=B(()=>n.themeType&&n.themeType!==g.palette.mode?a({palette:{mode:n.themeType}}):g,[g,n.themeType]),[y,x]=d(()=>Qe(h)),te=e=>{let t={...y,...e};x(t),$e(h,t)},[ne,re]=d(null),ie=ne?((r==null?void 0:r.nodes)||[]).find(e=>e.uid===ne):void 0,ae=l&&r!=null&&r.canRename?e=>re(e):void 0,T=oe(null),[E,D]=d(0);_(()=>{let e=T.current;if(!e||(D(Math.floor(e.getBoundingClientRect().width)),typeof ResizeObserver>`u`))return;let t=new ResizeObserver(e=>{var t;let n=Math.floor(((t=e[0])==null?void 0:t.contentRect.width)||0);D(e=>e===n?e:n)});return t.observe(e),()=>t.disconnect()},[]);let k=B(()=>r?Oe(r,{onlyConfigured:y.onlyConfigured,showDisconnected:y.showDisconnected}):null,[r,y.onlyConfigured,y.showDisconnected]),A=Math.max(0,E-2),j=B(()=>{if(!k||!A)return null;let e=[...k.roots];return k.unassigned.length&&e.push({clients:k.unassigned,children:[]}),Pe(e,A,y.showVendor)},[k,A,y.showVendor]),M=!!f||E>0&&E<Je,N=p!=null&&p!==``,P={overflow:`auto`,minHeight:0,border:`1px solid ${v.palette.divider}`,borderRadius:1,...N?{flex:`1 1 auto`}:{maxHeight:`75vh`}},le=z(w,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,columnGap:M?.5:1,rowGap:.5,mb:1,flex:`0 0 auto`},children:[M?R(C,{size:`small`,title:u(`tr064_refresh`),disabled:o,onClick:()=>c(),children:o?R(S,{size:18}):R(m,{fontSize:`small`})}):R(L,{variant:`outlined`,size:`small`,startIcon:o?R(S,{size:16}):R(m,{}),disabled:o,onClick:()=>c(),children:u(`tr064_refresh`)}),[{key:`onlyConfigured`,label:u(`tr064_onlyConfigured`)},{key:`showDisconnected`,label:u(`tr064_showDisconnected`)},{key:`showVendor`,label:u(`tr064_showVendor`)}].map(e=>R(_e,{sx:M?{mr:.5,ml:0}:void 0,control:R(ee,{size:`small`,sx:M?{p:.5}:void 0,checked:y[e.key],onChange:t=>te({[e.key]:t.target.checked})}),label:R(i,{variant:M?`body2`:`body1`,children:e.label})},e.key)),z(ce,{size:`small`,exclusive:!0,value:y.viewMode,onChange:(e,t)=>t&&te({viewMode:t}),children:[R(Se,{value:`graph`,title:u(`tr064_graph`),sx:M?{p:.5}:void 0,children:R(de,{fontSize:`small`})}),R(Se,{value:`table`,title:u(`tr064_table`),sx:M?{p:.5}:void 0,children:R(e,{fontSize:`small`})})]}),R(w,{sx:{flexGrow:1}}),z(w,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,columnGap:1.5,rowGap:.5},children:[R(lt,{}),r!=null&&r.ts?R(i,{variant:`caption`,color:`text.secondary`,children:u(`tr064_updated`,new Date(r.ts).toLocaleTimeString())}):null]})]}),F;if(s&&(s===`not alive`||!r)){let e=et(s,u);F=R(O,{severity:e.severity,children:e.text})}else if(!r||!k)F=z(w,{sx:{display:`flex`,alignItems:`center`,gap:1,p:2},children:[R(S,{size:20}),R(i,{children:u(`tr064_loading`)})]});else{let e=s?et(s,u):null;F=z(se,{children:[e?R(O,{severity:e.severity,sx:{mb:1,flex:`0 0 auto`},children:e.text}):null,!k.roots.length&&!k.unassigned.length?R(O,{severity:`info`,children:u(`tr064_noData`)}):y.viewMode===`table`?R(ue,{sx:P,children:R(ft,{tree:k,width:A,t:u,theme:v,showVendor:y.showVendor,onRename:ae})}):R(w,{sx:{...P,backgroundColor:v.palette.background.default},children:j?z(`svg`,{width:j.width,height:j.height,style:{display:`block`,fontFamily:v.typography.fontFamily},children:[j.edges.map((e,t)=>ut(e,t,v,u)),j.cards.map(e=>dt(e,v,u,{showVendor:y.showVendor,onRename:ae}))]}):null})]})}let I=z(w,{ref:T,sx:{width:`100%`,minWidth:0,display:`flex`,flexDirection:`column`,...N?{height:p}:{}},children:[le,F,ie&&l?R(pt,{node:ie,t:u,onClose:()=>re(null),onRename:l}):null]});return v===g?I:R(t,{theme:v,children:I})}var ht=class e extends we{constructor(e){super(e),g(this,`loader`,null),this.state={...this.state,data:null,loading:!1,error:null}}async componentDidMount(){await super.componentDidMount(),this.loader=new Ue({socket:this.props.oContext.socket,instanceId:`${this.props.oContext.adapterName}.${this.props.oContext.instance}`,onChange:e=>this.setState(e)}),this.loader.start()}componentWillUnmount(){var e;(e=this.loader)==null||e.stop(),this.loader=null,super.componentWillUnmount()}renderItem(t,n,r){return R(mt,{data:this.state.data,loading:this.state.loading,error:this.state.error,onRefresh:()=>{var e;(e=this.loader)==null||e.refresh()},onRename:async(e,t)=>this.loader?this.loader.rename(e,t):`not alive`,t:e.t,themeType:this.props.oContext.themeType===`dark`?`dark`:`light`,storageKey:`tr064.meshTopology`})}};g(ht,`t`,(e,...t)=>M.t(e,...t));export{ht as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./vite-preload-helper-CaC3yEL3.js";import"./dist-B8KMjpwu.js";var t=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t},n=(e,t,n,r)=>{var i,a;let o=(i=globalThis.__mf_module_cache__)==null?void 0:i.share,s=t.map(e=>o==null?void 0:o[e]).find(e=>e!==void 0),c=(s==null?void 0:s.version)??(s==null||(a=s.default)==null?void 0:a.version),l=String(c||``).split(/[^0-9]+/).map(Number),u=String(n||``).split(/[^0-9]+/).map(Number);for(let e=0;e<Math.max(l.length,u.length);e++){if((l[e]||0)<(u[e]||0))return;if((l[e]||0)>(u[e]||0))break}for(let t of e){var d;let e=o==null?void 0:o[t];if(e!==void 0&&(!r||typeof(e==null?void 0:e[r])==`function`||typeof(e==null||(d=e.default)==null?void 0:d[r])==`function`))return e}},r={react:async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js`).then(e=>e.Wi),[],import.meta.url),"react/jsx-runtime":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js`),[],import.meta.url),"react-dom":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js`).then(e=>e.zr),[],import.meta.url),"react-dom/client":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild__react_mf_2_dom_mf_1_client__prebuild__-B9QPCQeP.js`),[],import.meta.url),"@mui/material":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js`).then(e=>e.gr),[],import.meta.url),"@mui/icons-material":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js`).then(e=>e.an),[],import.meta.url),"@iobroker/gui-components":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-YaIhTVWs.js`).then(e=>e.b),[],import.meta.url),"@iobroker/json-config":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__107524468039083__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BtYL_XWD.js`),[],import.meta.url)},i={react:{name:`react`,version:`19.3.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i.react;return e.lib?e.lib:(e.loading||=(async()=>{try{let{react:n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"react/jsx-runtime":{name:`react/jsx-runtime`,version:`19.3.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`react/jsx-runtime`];if(e.lib)return e.lib;if(e.loading)return e.loading;let a=n([`default:react/jsx-runtime`,`react/jsx-runtime`],[`default:react`,`react`],`19.3.0`,void 0);return a===void 0?(e.loading=(async()=>{try{let{"react/jsx-runtime":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading):(e.lib=function(){return a},e.loaded=!0,e.lib)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"react-dom":{name:`react-dom`,version:`19.3.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`react-dom`];return e.lib?e.lib:(e.loading||=(async()=>{try{let{"react-dom":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"react-dom/client":{name:`react-dom/client`,version:`19.3.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`react-dom/client`];if(e.lib)return e.lib;if(e.loading)return e.loading;let a=n([`default:react-dom/client`,`react-dom/client`,`default:react-dom`,`react-dom`],[`default:react`,`react`],`19.3.0`,`createRoot`);return a===void 0?(e.loading=(async()=>{try{let{"react-dom/client":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading):(e.lib=function(){return a},e.loaded=!0,e.lib)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"@mui/material":{name:`@mui/material`,version:`9.4.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`@mui/material`];return e.lib?e.lib:(e.loading||=(async()=>{try{let{"@mui/material":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"@mui/icons-material":{name:`@mui/icons-material`,version:`9.4.0`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`@mui/icons-material`];return e.lib?e.lib:(e.loading||=(async()=>{try{let{"@mui/icons-material":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"@iobroker/gui-components":{name:`@iobroker/gui-components`,version:`10.3.6`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`@iobroker/gui-components`];return e.lib?e.lib:(e.loading||=(async()=>{try{let{"@iobroker/gui-components":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}},"@iobroker/json-config":{name:`@iobroker/json-config`,version:`10.0.7`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`ConfigCustomTr064Set`,canLiveRebind:!0,get(){let e=i[`@iobroker/json-config`];return e.lib?e.lib:(e.loading||=(async()=>{try{let{"@iobroker/json-config":n}=r,i=t({...await n()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`*`,strictVersion:!1,eager:!1}}},a=[];export{a as usedRemotes,i as usedShared};
|