iobroker.tr-064 5.0.2 → 5.1.0

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.
Files changed (129) hide show
  1. package/README.md +73 -4
  2. package/admin/custom/.vite/manifest.json +198 -0
  3. package/admin/custom/assets/Components-BoWcMYSS.js +1 -0
  4. package/admin/custom/assets/MeshTopology-NPCeKKsE.js +3 -0
  5. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1-CEI0I6ae.js +1 -0
  6. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js +1217 -0
  7. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js +2 -0
  8. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BM_WxSUd.js +1 -0
  9. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-DET9_feo.js +1489 -0
  10. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js +1 -0
  11. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__-BIVeLrp5.js +9 -0
  12. package/admin/custom/assets/dist-3rrF2kvV.js +1 -0
  13. package/admin/custom/assets/helpers-BxmIxGMO.js +1 -0
  14. package/admin/custom/assets/hostInit-DSOwaVi-.js +1 -0
  15. package/admin/custom/assets/iconLibraryData-B5fiyl1C.js +1 -0
  16. package/admin/custom/assets/lib-4OPRvXhM.js +3 -0
  17. package/admin/custom/assets/pendingShares-T1G0jiVV.js +2 -0
  18. package/admin/custom/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  19. package/admin/custom/assets/utils-DxtAVvdK.js +4 -0
  20. package/admin/custom/assets/vite-preload-helper-CaC3yEL3.js +1 -0
  21. package/admin/custom/customComponents.js +12 -0
  22. package/admin/custom/i18n/de.json +34 -0
  23. package/admin/custom/i18n/en.json +34 -0
  24. package/admin/custom/i18n/es.json +34 -0
  25. package/admin/custom/i18n/fr.json +34 -0
  26. package/admin/custom/i18n/it.json +34 -0
  27. package/admin/custom/i18n/nl.json +34 -0
  28. package/admin/custom/i18n/pl.json +34 -0
  29. package/admin/custom/i18n/pt.json +34 -0
  30. package/admin/custom/i18n/ru.json +34 -0
  31. package/admin/custom/i18n/uk.json +34 -0
  32. package/admin/custom/i18n/zh-cn.json +34 -0
  33. package/admin/custom/mf-manifest.json +1 -0
  34. package/admin/dm-widgets/.vite/manifest.json +140 -0
  35. package/admin/dm-widgets/assets/Components-xqQWnYOT.js +3 -0
  36. package/admin/dm-widgets/assets/_virtual_mf-localSharedImportMap___mfe_internal__DevicesWidgetTr064Set__mf_owner__1-ULiXi9yv.js +1 -0
  37. package/admin/dm-widgets/assets/_virtual_mf___mfe_internal__DevicesWidgetTr064Set__mf_owner__14264094198548__loadShare___mf_0_iobroker_mf_1_dm_mf_2_widgets__loadShare__.js-C8vWIM5I.js +2 -0
  38. 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
  39. package/admin/dm-widgets/assets/dist-FhHpT0VB.js +1 -0
  40. package/admin/dm-widgets/assets/helpers-DTPosF_X.js +1 -0
  41. package/admin/dm-widgets/assets/hostInit-JmMt7dnU.js +1 -0
  42. package/admin/dm-widgets/assets/no-page-BvRk9kiK.js +0 -0
  43. package/admin/dm-widgets/assets/no-page-fzExEvxc.js +2 -0
  44. package/admin/dm-widgets/assets/pendingShares-CEv6kRoK.js +2 -0
  45. package/admin/dm-widgets/assets/react-pcwjPi4V.js +1 -0
  46. package/admin/dm-widgets/assets/translations-yVA7ZGpf.js +1 -0
  47. package/admin/dm-widgets/assets/utils-CJGuRvLL.js +4 -0
  48. package/admin/dm-widgets/assets/vite-preload-helper-CaC3yEL3.js +1 -0
  49. package/admin/dm-widgets/customDevices.js +12 -0
  50. package/admin/dm-widgets/fritzbox.png +0 -0
  51. package/admin/dm-widgets/mf-manifest.json +1 -0
  52. package/admin/i18n/de.json +15 -1
  53. package/admin/i18n/en.json +15 -1
  54. package/admin/i18n/es.json +15 -1
  55. package/admin/i18n/fr.json +15 -1
  56. package/admin/i18n/it.json +16 -2
  57. package/admin/i18n/nl.json +15 -1
  58. package/admin/i18n/pl.json +15 -1
  59. package/admin/i18n/pt.json +15 -1
  60. package/admin/i18n/ru.json +15 -1
  61. package/admin/i18n/uk.json +15 -1
  62. package/admin/i18n/zh-cn.json +15 -1
  63. package/admin/jsonConfig.json +126 -3
  64. package/build/lib/calllist.js +168 -89
  65. package/build/lib/calllist.js.map +1 -1
  66. package/build/lib/callmonitor.js +134 -15
  67. package/build/lib/callmonitor.js.map +1 -1
  68. package/build/lib/deflections.js +13 -4
  69. package/build/lib/deflections.js.map +1 -1
  70. package/build/lib/devices.js +6 -0
  71. package/build/lib/devices.js.map +1 -1
  72. package/build/lib/mesh.js +160 -0
  73. package/build/lib/mesh.js.map +1 -0
  74. package/build/lib/phonebook.js +53 -8
  75. package/build/lib/phonebook.js.map +1 -1
  76. package/build/lib/states.js +72 -2
  77. package/build/lib/states.js.map +1 -1
  78. package/build/lib/systemdata.js +7 -3
  79. package/build/lib/systemdata.js.map +1 -1
  80. package/build/lib/tr064.js +553 -86
  81. package/build/lib/tr064.js.map +1 -1
  82. package/build/lib/utils.js +102 -0
  83. package/build/lib/utils.js.map +1 -1
  84. package/build/main.js +407 -60
  85. package/build/main.js.map +1 -1
  86. package/io-package.json +60 -16
  87. package/package.json +10 -3
  88. package/widgets/tr-064/.vite/manifest.json +388 -0
  89. package/widgets/tr-064/assets/Generic-CIzmRpeI.js +1 -0
  90. package/widgets/tr-064/assets/MeshView-340Nx-Yr.js +3 -0
  91. package/widgets/tr-064/assets/Tr064FritzBox-DdODZruN.js +1 -0
  92. package/widgets/tr-064/assets/Tr064Mesh-CQf54WE0.js +1 -0
  93. package/widgets/tr-064/assets/Tr064Presence--G7eM1F-.js +1 -0
  94. package/widgets/tr-064/assets/_virtual_mf-localSharedImportMap___mfe_internal__vis2Tr064Widgets__mf_owner__1-D7nylM3Z.js +1 -0
  95. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CBUuPkFA.js +2 -0
  96. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare___mf_0_mui_mf_1_material__loadShare__.js-ub-5ZQs3.js +2 -0
  97. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare___mf_0_mui_mf_1_private_mf_2_theming__loadShare__.js-BKa066ny.js +1 -0
  98. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__react__loadShare__.js-CcVuD-II.js +2 -0
  99. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__.js-xgh8ZgUb.js +1 -0
  100. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CRKteJto.js +1 -0
  101. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__react_mf_2_dom__loadShare__.js-Bq-33FtC.js +2 -0
  102. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BEZyUUG0.js +2 -0
  103. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_emotion_mf_1_react__prebuild__-BFtS0SC_.js +1 -0
  104. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_mui_mf_1_material__prebuild__-Ba3YBPHm.js +245 -0
  105. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild___mf_0_mui_mf_1_private_mf_2_theming__prebuild__-BQqNvxi1.js +1 -0
  106. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react__prebuild__-DMwD2vWI.js +1 -0
  107. 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
  108. 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
  109. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_2_dom__prebuild__-CwDi_M7l.js +1 -0
  110. package/widgets/tr-064/assets/_virtual_mf___mfe_internal__vis2Tr064Widgets__mf_owner__228572001985851__prebuild__react_mf_2_dom_mf_1_client__prebuild__-DoImG-wh.js +9 -0
  111. package/widgets/tr-064/assets/defineProperty-CfKsT8I7.js +10 -0
  112. package/widgets/tr-064/assets/dist-FhHpT0VB.js +1 -0
  113. package/widgets/tr-064/assets/emotion-cache.browser.esm-Bul_CO7q.js +1 -0
  114. package/widgets/tr-064/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-CilgCtis.js +1 -0
  115. package/widgets/tr-064/assets/format-sGUrIYMZ.js +1 -0
  116. package/widgets/tr-064/assets/helpers-DTPosF_X.js +1 -0
  117. package/widgets/tr-064/assets/hostInit-BrwRSewP.js +1 -0
  118. package/widgets/tr-064/assets/pendingShares-CDDxKtx8.js +2 -0
  119. package/widgets/tr-064/assets/react-dom-CzGJkh8d.js +1 -0
  120. package/widgets/tr-064/assets/react.production-DPSSDlXY.js +1 -0
  121. package/widgets/tr-064/assets/rolldown-runtime-hePW80VL.js +1 -0
  122. package/widgets/tr-064/assets/translations-CXDgEVIh.js +1 -0
  123. package/widgets/tr-064/assets/utils-CJGuRvLL.js +4 -0
  124. package/widgets/tr-064/assets/vite-preload-helper-CaC3yEL3.js +1 -0
  125. package/widgets/tr-064/customWidgets.js +12 -0
  126. package/widgets/tr-064/img/prev_tr064_fritzbox.png +0 -0
  127. package/widgets/tr-064/img/prev_tr064_mesh.png +0 -0
  128. package/widgets/tr-064/img/prev_tr064_presence.png +0 -0
  129. package/widgets/tr-064/mf-manifest.json +1 -0
package/README.md CHANGED
@@ -32,10 +32,12 @@ The adapter is based on the [FRITZ! interface documentation](https://fritz.com/p
32
32
 
33
33
  - Switch the Wi-Fi for 2.4 GHz and 5 GHz on and off
34
34
  - Switch the guest Wi-Fi on and off
35
+ - 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
36
  - Restart the Fritz!Box
36
37
  - Start the WPS process
37
38
  - Reconnect the internet connection
38
39
  - Read the external IP address
40
+ - 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
41
 
40
42
  ### ring (dial a number)
41
43
 
@@ -59,6 +61,12 @@ You can use this adapter to monitor the presence of persons in your home. In thi
59
61
  - 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
62
  - 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
63
 
64
+ 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.
65
+
66
+ 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`).
67
+
68
+ 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.
69
+
62
70
  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
71
 
64
72
  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 +81,10 @@ You can switch the answering machine on and off. With the state `cbIndex` you se
73
81
 
74
82
  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
83
 
84
+ - `callmonitor.connected` shows whether the adapter is connected to the call monitor of the Fritz!Box.
85
+ - `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`.
86
+ - 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.
87
+
76
88
  ### Phone book
77
89
 
78
90
  - If the phone book is switched on, the adapter uses it to find the name for the number of the caller.
@@ -80,6 +92,8 @@ The call monitor creates states in real time for every incoming and outgoing cal
80
92
 
81
93
  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
94
 
95
+ 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.
96
+
83
97
  ### Call lists
84
98
 
85
99
  Output formats:
@@ -98,6 +112,33 @@ Call counter: you can set the call counter to 0. The next call increases the cou
98
112
 
99
113
  You can configure the HTML output with a template.
100
114
 
115
+ ### Event log
116
+
117
+ The option "Read the event log of the FRITZ!Box" reads the event log of the Fritz!Box once a minute:
118
+
119
+ - `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`.
120
+ - `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.
121
+
122
+ 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.
123
+
124
+ ### Write unchanged values
125
+
126
+ 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.
127
+
128
+ ### Widgets for vis-2 and ioBroker.devices
129
+
130
+ 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.
131
+
132
+ vis-2 (widget set "FRITZ!Box"):
133
+
134
+ - **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`).
135
+ - **Mesh topology** (`Tr064Mesh`): the mesh topology as a graphic or table which fills the widget, refreshed while it is visible.
136
+ - **Presence** (`Tr064Presence`): the configured devices with present/away, access point and band.
137
+
138
+ 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.
139
+
140
+ The widgets need the states of the adapter version with these widgets (`states.boxModel`, `states.wan*`, ...) and the running instance for the mesh topology.
141
+
101
142
  ### The states command and commandResult
102
143
 
103
144
  With the state `command` you can call every tr-064 command from this [documentation](https://avm.de/service/schnittstellen/). Example:
@@ -154,6 +195,38 @@ If you switch from the adapter tr-064-community, you can copy the complete devic
154
195
  Placeholder for the next version (at the beginning of the line):
155
196
  ### **WORK IN PROGRESS**
156
197
  -->
198
+ ### 5.1.0 (2026-09-19)
199
+ - (@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
200
+ - (@GermanBluefox) New states `boxModel` and `boxFirmware`
201
+ - (@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
202
+ - (@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
203
+ - (@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
204
+ - (@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
205
+ - (@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
206
+ - (@GermanBluefox) The call lists do not stop updating after some hours any more: 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
207
+ - (@GermanBluefox) A call list download which the box does not answer is given up after 10 seconds with a warning
208
+ - (@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
209
+ - (@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`
210
+ - (@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
211
+ - (@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`
212
+ - (@GermanBluefox) New state `callmonitor.connected` shows whether the call monitor is connected, and `callmonitor.*.device` the name of the telephone of a call
213
+ - (@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
214
+ - (@GermanBluefox) New option "Write unchanged values too": every polled value is written with a new time stamp
215
+ - (@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
216
+ - (@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
217
+ - (@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
218
+ - (@GermanBluefox) New state `states.abNewMessages`: number of new (not yet listened) messages on the answering machines
219
+ - (@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
220
+ - (@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
221
+ - (@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
222
+ - (@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
223
+ - (@GermanBluefox) A device request which the box does not answer does not stop the presence detection and the polling any more
224
+ - (@GermanBluefox) An info message tells when "Create JSON device list" is switched on, but no devices are configured
225
+ - (@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
226
+ - (@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
227
+ - (@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`
228
+ - (@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
229
+
157
230
  ### 5.0.2 (2026-09-10)
158
231
  - (@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
232
  - (@GermanBluefox) A box without a separate 5 GHz configuration does not delay the polling by 3 seconds any more
@@ -180,10 +253,6 @@ If you switch from the adapter tr-064-community, you can copy the complete devic
180
253
  ### 4.2.18 (2023-01-04)
181
254
  * (Apollon77) Prepare for future js-controller versions
182
255
 
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
-
187
256
  [Older changelogs can be found there](CHANGELOG_OLD.md)
188
257
 
189
258
  ## License
@@ -0,0 +1,198 @@
1
+ {
2
+ "_MeshTopology-NPCeKKsE.js": {
3
+ "file": "assets/MeshTopology-NPCeKKsE.js",
4
+ "name": "MeshTopology",
5
+ "imports": [
6
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
7
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js"
8
+ ]
9
+ },
10
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js": {
11
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
12
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__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__242138799280374__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__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js": {
23
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js",
24
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js",
25
+ "imports": [
26
+ "_rolldown-runtime-Dd_uD5pT.js",
27
+ "_vite-preload-helper-CaC3yEL3.js"
28
+ ],
29
+ "dynamicImports": [
30
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
31
+ ]
32
+ },
33
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BM_WxSUd.js": {
34
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BM_WxSUd.js",
35
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js",
36
+ "imports": [
37
+ "_vite-preload-helper-CaC3yEL3.js"
38
+ ],
39
+ "dynamicImports": [
40
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js"
41
+ ]
42
+ },
43
+ "_dist-3rrF2kvV.js": {
44
+ "file": "assets/dist-3rrF2kvV.js",
45
+ "name": "dist",
46
+ "imports": [
47
+ "_utils-DxtAVvdK.js"
48
+ ]
49
+ },
50
+ "_helpers-BxmIxGMO.js": {
51
+ "file": "assets/helpers-BxmIxGMO.js",
52
+ "name": "helpers",
53
+ "imports": [
54
+ "_utils-DxtAVvdK.js"
55
+ ]
56
+ },
57
+ "_rolldown-runtime-Dd_uD5pT.js": {
58
+ "file": "assets/rolldown-runtime-Dd_uD5pT.js",
59
+ "name": "rolldown-runtime"
60
+ },
61
+ "_utils-DxtAVvdK.js": {
62
+ "file": "assets/utils-DxtAVvdK.js",
63
+ "name": "utils",
64
+ "imports": [
65
+ "_vite-preload-helper-CaC3yEL3.js"
66
+ ]
67
+ },
68
+ "_vite-preload-helper-CaC3yEL3.js": {
69
+ "file": "assets/vite-preload-helper-CaC3yEL3.js",
70
+ "name": "vite-preload-helper"
71
+ },
72
+ "index.html": {
73
+ "file": "assets/index-Du3EOceD.js",
74
+ "name": "index",
75
+ "src": "index.html",
76
+ "isEntry": true,
77
+ "imports": [
78
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
79
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BM_WxSUd.js",
80
+ "_MeshTopology-NPCeKKsE.js"
81
+ ]
82
+ },
83
+ "node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js": {
84
+ "file": "assets/iconLibraryData-B5fiyl1C.js",
85
+ "name": "iconLibraryData",
86
+ "src": "node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js",
87
+ "isDynamicEntry": true
88
+ },
89
+ "node_modules/react-qr-code/lib/index.mjs": {
90
+ "file": "assets/lib-4OPRvXhM.js",
91
+ "name": "lib",
92
+ "src": "node_modules/react-qr-code/lib/index.mjs",
93
+ "isDynamicEntry": true,
94
+ "imports": [
95
+ "_rolldown-runtime-Dd_uD5pT.js",
96
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js"
97
+ ]
98
+ },
99
+ "src/Components.tsx": {
100
+ "file": "assets/Components-BoWcMYSS.js",
101
+ "name": "Components",
102
+ "src": "src/Components.tsx",
103
+ "isEntry": true,
104
+ "imports": [
105
+ "_MeshTopology-NPCeKKsE.js"
106
+ ]
107
+ },
108
+ "virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js": {
109
+ "file": "customComponents.js",
110
+ "name": "remoteEntry",
111
+ "src": "virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js",
112
+ "imports": [
113
+ "_vite-preload-helper-CaC3yEL3.js",
114
+ "_dist-3rrF2kvV.js",
115
+ "_helpers-BxmIxGMO.js"
116
+ ],
117
+ "dynamicImports": [
118
+ "src/Components.tsx",
119
+ "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
120
+ ]
121
+ },
122
+ "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1": {
123
+ "file": "assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1-CEI0I6ae.js",
124
+ "name": "_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomTr064Set__mf_owner__1",
125
+ "src": "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1",
126
+ "isDynamicEntry": true,
127
+ "imports": [
128
+ "_vite-preload-helper-CaC3yEL3.js",
129
+ "_dist-3rrF2kvV.js"
130
+ ],
131
+ "dynamicImports": [
132
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
133
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
134
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js",
135
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
136
+ ]
137
+ },
138
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js": {
139
+ "file": "assets/hostInit-DSOwaVi-.js",
140
+ "name": "hostInit",
141
+ "src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js",
142
+ "imports": [
143
+ "_vite-preload-helper-CaC3yEL3.js",
144
+ "_helpers-BxmIxGMO.js"
145
+ ],
146
+ "dynamicImports": [
147
+ "virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomTr064Set__customComponents_js",
148
+ "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
149
+ ]
150
+ },
151
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__P_S__pendingShares__P_S__.js": {
152
+ "file": "assets/pendingShares-T1G0jiVV.js",
153
+ "name": "pendingShares",
154
+ "src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__1__P_S__pendingShares__P_S__.js",
155
+ "imports": [
156
+ "_vite-preload-helper-CaC3yEL3.js"
157
+ ],
158
+ "dynamicImports": [
159
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
160
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js",
161
+ "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomTr064Set__mf_owner__1"
162
+ ]
163
+ },
164
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js": {
165
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-DET9_feo.js",
166
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__",
167
+ "src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js",
168
+ "isDynamicEntry": true,
169
+ "imports": [
170
+ "_rolldown-runtime-Dd_uD5pT.js",
171
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js",
172
+ "_vite-preload-helper-CaC3yEL3.js",
173
+ "_dist-3rrF2kvV.js"
174
+ ],
175
+ "dynamicImports": [
176
+ "node_modules/react-qr-code/lib/index.mjs"
177
+ ]
178
+ },
179
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js": {
180
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js",
181
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__",
182
+ "src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
183
+ "isDynamicEntry": true,
184
+ "imports": [
185
+ "_rolldown-runtime-Dd_uD5pT.js"
186
+ ]
187
+ },
188
+ "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js": {
189
+ "file": "assets/_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__-BIVeLrp5.js",
190
+ "name": "_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__",
191
+ "src": "virtual:mf:__mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__.js",
192
+ "isDynamicEntry": true,
193
+ "imports": [
194
+ "_rolldown-runtime-Dd_uD5pT.js",
195
+ "__virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js"
196
+ ]
197
+ }
198
+ }
@@ -0,0 +1 @@
1
+ import{t as e}from"./MeshTopology-NPCeKKsE.js";var t={MeshTopology:e};export{t as default};
@@ -0,0 +1,3 @@
1
+ import{$t as e,Bt as t,Ct as n,Dn as r,En as i,Ht as a,Jr as o,Nt as s,Sn as c,Sr as l,Ut as u,Vt as d,Wt as f,Xt as p,Yr as m,Yt as h,_t as g,an as _,d as v,di as ee,gi as y,hi as b,in as te,ln as x,nn as S,pi as C,qr as ne,rn as w,sn as re,tn as T,zt as E}from"./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js";import{t as D}from"./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-e4Fscg68.js";function O(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 k(e){return!!e&&(e.state||``).toUpperCase()===`CONNECTED`}function A(e,t){return e?!k(e)&&k(t)?t:e:t}function j(e){return e.configured||e.name||e.mac||e.uid}function M(e,t){return!!e.node.configured==!!t.node.configured?e.connected===t.connected?j(e.node).localeCompare(j(t.node)):e.connected?-1:1:e.node.configured?-1:1}function ie(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)if(i.has(e.from)&&i.has(e.to)&&e.from!==e.to){if(a(e.from)&&a(e.to))o.set(e.to,A(o.get(e.to),e));else if(a(e.from))s.set(e.to,A(s.get(e.to),e));else if(a(e.to)){let t={...e,from:e.to,to:e.from};s.set(e.from,A(s.get(e.from),t))}}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=k(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?O(n):``;f.push({uid:e.uid,name:j(e),hostName:e.name,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,curRx:n==null?void 0:n.curRx,curTx:n==null?void 0:n.curTx,mac:e.mac,ip:e.ip})}l.forEach(e=>e.clients.sort(M)),d.sort(M),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 N(e){return e<=8?1:e<=20?2:e<=48?3:4}function P(e,t){let n=Math.ceil(e/t);return 60+(e?n*32-6+10:0)}function F(e){let t=[],n=[],r=new Map,i=e=>{let t=e.clients.length,n=N(t);return{w:Math.max(240,n*196+(n-1)*6+20),h:P(t,n),columns:n}},a=e=>{let t=i(e).w,n=e.children.reduce((e,t)=>e+a(t),0),o=Math.max(t,n+32*Math.max(0,e.children.length-1));return r.set(e,o),o},o=0,s=(e,a,c)=>{let l=i(e),u=r.get(e),d={view:e,x:a+(u-l.w)/2,y:c,w:l.w,h:l.h,columns:l.columns,chipW:196};t.push(d),o=Math.max(o,c+l.h);let f=a+(u-(e.children.reduce((e,t)=>e+r.get(t),0)+32*Math.max(0,e.children.length-1)))/2;for(let t of e.children){let e=s(t,f,c+l.h+76);if(t.uplink){let r=d.x+d.w/2,i=d.y+d.h,a=e.x+e.w/2,o=e.y,s=i+(o-i)/2;n.push({link:t.uplink,d:`M ${r} ${i} V ${s} H ${a} V ${o}`,labelX:a+6,labelY:o-10})}f+=r.get(t)+32}return d},c=16;for(let t of e)a(t),s(t,c,16),c+=r.get(t)+64;return{kind:`tree`,cards:t,edges:n,width:Math.max(c-64+16,0),height:o+16}}function I(e,t){let n=[],r=[],i=8,a=(e,o)=>{let s=8+o*22,c=Math.max(190,t-8-s),l=c-20,u=e.clients.length,d=Math.max(1,Math.min(u||1,Math.floor((l+6)/176))),f=Math.min(360,(l-(d-1)*6)/d),p={view:e,x:s,y:i,w:c,h:P(u,d),columns:d,chipW:f};n.push(p),i+=p.h+30;let m=p.x+11,h=p.y+p.h;for(let t of e.children){let e=a(t,o+1);if(t.uplink){let n=e.y+24;r.push({link:t.uplink,d:`M ${m} ${h} V ${n} H ${e.x}`,labelX:e.x+4,labelY:e.y-8}),h=n}}return p};for(let t of e)a(t,0);return{kind:`stack`,cards:n,edges:r,width:t,height:Math.max(i-30+8,0)}}function L(e,t){let n=F(e);return n.width<=t?n:I(e,t)}function R(e,t,n=!1){return Math.max(3,Math.floor(e/(t*(n?.62:.56))))}function z(e,t){return e.length>t?`${e.substring(0,Math.max(1,t-1))}…`:e}function B(e){if(!e)return`–`;let t=e/1e3;return t>=10?Math.round(t).toString():t.toFixed(1)}var V=`not alive`,H=`not connected`,U=`not supported`,W=`timeout`;async function G(e,t,n=2e4){try{let r=await e.getState(`system.adapter.${t}.alive`);if(!(r!=null&&r.val))return{error:V,nodes:[],links:[]};let i,a=new Promise(e=>{i=setTimeout(()=>e(W),n)}),o=e.sendTo(t,`mesh`,{}),s=await Promise.race([o,a]);return clearTimeout(i),s===`timeout`||!s||typeof s!=`object`?{error:W,nodes:[],links:[]}:{error:s.error,ts:s.ts,nodes:Array.isArray(s.nodes)?s.nodes:[],links:Array.isArray(s.links)?s.links:[]}}catch(e){return{error:(e==null?void 0:e.message)||String(e),nodes:[],links:[]}}}var K=class{constructor(e){l(this,`options`,void 0),l(this,`timer`,null),l(this,`running`,!1),l(this,`stopped`,!0),l(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 G(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}))}update(e){this.current={...this.current,...e},this.stopped||this.options.onChange(this.current)}},q={2.4:`#f59e0b`,5:`#3b82f6`,6:`#8b5cf6`,LAN:`#10b981`,other:`#9ca3af`},J=600,ae=760,oe=480;function se(e){let t={onlyConfigured:!1,showDisconnected:!1,viewMode:`graph`};try{let n=JSON.parse(window.localStorage.getItem(e)||`{}`);t.onlyConfigured=!!n.onlyConfigured,t.showDisconnected=!!n.showDisconnected,t.viewMode=n.viewMode===`table`?`table`:`graph`}catch{}return t}function ce(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function Y(e){switch(e){case`2.4`:case`5`:case`6`:return`${e} GHz`;case`LAN`:return`LAN`;default:return``}}function X(e,t){switch(e){case V:return{severity:`info`,text:t(`tr064_startInstance`)};case H:return{severity:`warning`,text:t(`tr064_notConnected`)};case U:return{severity:`warning`,text:t(`tr064_notSupported`)};case W:return{severity:`warning`,text:t(`tr064_timeout`)};default:return{severity:`warning`,text:t(`tr064_error`,e)}}}function le(e){return e.connected&&(e.curRx||e.curTx)?`↓ ${B(e.curRx)} / ↑ ${B(e.curTx)}`:``}function Z(e){return o(T,{component:`span`,sx:{display:`inline-block`,flexShrink:0,width:10,height:10,borderRadius:`2px`,backgroundColor:q[e.kind]}})}function ue(){return o(T,{sx:{display:`flex`,gap:1.5,alignItems:`center`,flexWrap:`wrap`},children:[`2.4`,`5`,`6`,`LAN`].map(t=>m(T,{sx:{display:`flex`,alignItems:`center`,gap:.5},children:[o(Z,{kind:t}),o(e,{variant:`caption`,children:Y(t)})]},t))})}function Q(e,t,n,r){var i;let a=O(e.link),s=((i=e.link.state)==null?void 0:i.toUpperCase())===`CONNECTED`,c=[Y(a)||e.link.type,s&&e.link.curRx?`${B(e.link.curRx)} Mbit/s`:``].filter(Boolean).join(` · `),l=e.link.curRx||e.link.curTx?`\n${r(`tr064_rateTooltip`,B(e.link.curRx),B(e.link.curTx))}`:``;return m(`g`,{children:[o(`title`,{children:`${e.link.interface||e.link.type} - ${r(s?`tr064_connected`:`tr064_disconnected`)}${l}`}),o(`path`,{d:e.d,fill:`none`,stroke:q[a],strokeWidth:2.5,strokeDasharray:s?void 0:`6 4`}),o(`text`,{x:e.labelX,y:e.labelY,fontSize:11,fill:n.palette.text.secondary,children:c})]},`edge-${t}`)}function de(e,t,n){let r=t.palette,i=e.view.node,a=i?i.name||i.mac:n(`tr064_notAssigned`),s=i?n(`tr064_role_${i.role}`):``,c=[i!=null&&i.model&&i.model!==i.name?i.model:``,(i==null?void 0:i.ip)||``,s].filter(Boolean).join(` · `),l=e.view.clients.length,u=l===1?n(`tr064_oneDevice`):l?n(`tr064_devices`,l):``,d=R(e.w-20-(u?u.length*6.2+8:0),14,!0),f=R(e.w-20,11),p=e.chipW-12-44;return m(`g`,{transform:`translate(${e.x}, ${e.y})`,children:[o(`title`,{children:[a,i==null?void 0:i.model,i==null?void 0:i.mac,i==null?void 0:i.ip].filter(Boolean).join(`
2
+ `)}),o(`rect`,{width:e.w,height:e.h,rx:8,fill:r.background.paper,stroke:(i==null?void 0:i.role)===`master`?r.primary.main:r.divider,strokeWidth:(i==null?void 0:i.role)===`master`?2:1,strokeDasharray:i?void 0:`5 4`}),o(`text`,{x:10,y:24,fontSize:14,fontWeight:600,fill:r.text.primary,children:z(a,d)}),o(`text`,{x:10,y:42,fontSize:11,fill:r.text.secondary,children:z(c,f)}),o(`text`,{x:e.w-10,y:24,fontSize:11,textAnchor:`end`,fill:r.text.secondary,children:u}),e.view.clients.map((t,i)=>{let a=i%e.columns,s=Math.floor(i/e.columns),c=10+a*(e.chipW+6),l=60+s*32,u=O(t.link),d=!!t.node.configured,f=t.node.configured||t.node.name||t.node.mac,h=[d?n(`tr064_configuredAs`,t.node.configured):``,t.node.name,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.curRx||t.link.curTx)?n(`tr064_rateTooltip`,B(t.link.curRx),B(t.link.curTx)):``].filter(Boolean);return m(`g`,{transform:`translate(${c}, ${l})`,opacity:t.connected?1:d?.85:.65,children:[o(`title`,{children:h.join(`
3
+ `)}),o(`rect`,{width:e.chipW,height:26,rx:5,fill:r.action.hover,stroke:d?r.primary.main:r.divider,strokeWidth:d?2:1,strokeDasharray:t.connected?void 0:`4 3`}),o(`rect`,{width:5,height:26,rx:2,fill:q[u]}),o(`text`,{x:12,y:17,fontSize:12,fontWeight:d?700:400,fill:d?r.primary.main:r.text.primary,children:z(f,R(p,12,d))}),o(`text`,{x:e.chipW-6,y:17,fontSize:10,textAnchor:`end`,fill:r.text.secondary,children:Y(u)})]},t.node.uid)})]},`card-${(i==null?void 0:i.uid)||`unassigned`}`)}function fe(n){let{tree:r,width:i,t:a,theme:s}=n,c=i>=ae,l=i>=oe,p=l?void 0:{px:1};return m(E,{size:`small`,stickyHeader:!0,children:[o(u,{children:m(f,{children:[o(d,{sx:p,children:a(`tr064_device`)}),l?o(d,{children:a(`tr064_accessPoint`)}):null,o(d,{sx:p,children:a(`tr064_connection`)}),l?o(d,{children:a(`tr064_state`)}):null,l?o(d,{children:a(`tr064_rate`)}):null,c?o(d,{children:a(`tr064_mac`)}):null,c?o(d,{children:a(`tr064_ip`)}):null]})}),o(t,{children:r.rows.map(t=>m(f,{sx:{opacity:t.connected?1:.6},children:[m(d,{sx:{...p,fontWeight:t.configured?700:400,color:t.configured?s.palette.primary.main:void 0,overflowWrap:`anywhere`},title:t.configured&&t.hostName!==t.name?t.hostName:void 0,children:[t.name,l?null:o(e,{variant:`caption`,component:`div`,color:`text.secondary`,sx:{fontWeight:400},children:[t.accessPoint||a(`tr064_notAssigned`),t.connected?``:a(`tr064_disconnected`)].filter(Boolean).join(` · `)})]}),l?o(d,{children:t.accessPoint||a(`tr064_notAssigned`)}):null,o(d,{sx:{...p,whiteSpace:`nowrap`},children:t.kind?m(T,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[o(Z,{kind:t.kind}),Y(t.kind)||t.type]}):null}),l?o(d,{children:t.connected?a(`tr064_connected`):a(`tr064_disconnected`)}):null,l?o(d,{sx:{whiteSpace:`nowrap`},children:le(t)}):null,c?o(d,{sx:{fontFamily:`monospace`},children:t.mac}):null,c?o(d,{children:t.ip||``}):null]},t.uid))})]})}function pe(t){let{data:l,loading:u,error:d,onRefresh:f,t:v,compact:E,height:D}=t,O=t.storageKey||`tr064.meshTopology`,k=w(),A=C(()=>t.themeType&&t.themeType!==k.palette.mode?S({palette:{mode:t.themeType}}):k,[k,t.themeType]),[j,M]=y(()=>se(O)),N=e=>{let t={...j,...e};M(t),ce(O,t)},P=b(null),[F,I]=y(0);ee(()=>{let e=P.current;if(!e||(I(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);I(e=>e===n?e:n)});return t.observe(e),()=>t.disconnect()},[]);let R=C(()=>l?ie(l,{onlyConfigured:j.onlyConfigured,showDisconnected:j.showDisconnected}):null,[l,j.onlyConfigured,j.showDisconnected]),z=Math.max(0,F-2),B=C(()=>{if(!R||!z)return null;let e=[...R.roots];return R.unassigned.length&&e.push({clients:R.unassigned,children:[]}),L(e,z)},[R,z]),V=!!E||F>0&&F<J,H=D!=null&&D!==``,U={overflow:`auto`,minHeight:0,border:`1px solid ${A.palette.divider}`,borderRadius:1,...H?{flex:`1 1 auto`}:{maxHeight:`75vh`}},W=m(T,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,columnGap:V?.5:1,rowGap:.5,mb:1,flex:`0 0 auto`},children:[V?o(r,{size:`small`,title:v(`tr064_refresh`),disabled:u,onClick:()=>f(),children:u?o(x,{size:18}):o(n,{fontSize:`small`})}):o(te,{variant:`outlined`,size:`small`,startIcon:u?o(x,{size:16}):o(n,{}),disabled:u,onClick:()=>f(),children:v(`tr064_refresh`)}),[{key:`onlyConfigured`,label:v(`tr064_onlyConfigured`)},{key:`showDisconnected`,label:v(`tr064_showDisconnected`)}].map(t=>o(c,{sx:V?{mr:.5,ml:0}:void 0,control:o(re,{size:`small`,sx:V?{p:.5}:void 0,checked:j[t.key],onChange:e=>N({[t.key]:e.target.checked})}),label:o(e,{variant:V?`body2`:`body1`,children:t.label})},t.key)),m(p,{size:`small`,exclusive:!0,value:j.viewMode,onChange:(e,t)=>t&&N({viewMode:t}),children:[o(h,{value:`graph`,title:v(`tr064_graph`),sx:V?{p:.5}:void 0,children:o(g,{fontSize:`small`})}),o(h,{value:`table`,title:v(`tr064_table`),sx:V?{p:.5}:void 0,children:o(s,{fontSize:`small`})})]}),o(T,{sx:{flexGrow:1}}),m(T,{sx:{display:`flex`,alignItems:`center`,flexWrap:`wrap`,columnGap:1.5,rowGap:.5},children:[o(ue,{}),l!=null&&l.ts?o(e,{variant:`caption`,color:`text.secondary`,children:v(`tr064_updated`,new Date(l.ts).toLocaleTimeString())}):null]})]}),G;if(d&&(d===`not alive`||!l)){let e=X(d,v);G=o(i,{severity:e.severity,children:e.text})}else if(!l||!R)G=m(T,{sx:{display:`flex`,alignItems:`center`,gap:1,p:2},children:[o(x,{size:20}),o(e,{children:v(`tr064_loading`)})]});else{let e=d?X(d,v):null;G=m(ne,{children:[e?o(i,{severity:e.severity,sx:{mb:1,flex:`0 0 auto`},children:e.text}):null,!R.roots.length&&!R.unassigned.length?o(i,{severity:`info`,children:v(`tr064_noData`)}):j.viewMode===`table`?o(a,{sx:U,children:o(fe,{tree:R,width:z,t:v,theme:A})}):o(T,{sx:{...U,backgroundColor:A.palette.background.default},children:B?m(`svg`,{width:B.width,height:B.height,style:{display:`block`,fontFamily:A.typography.fontFamily},children:[B.edges.map((e,t)=>Q(e,t,A,v)),B.cards.map(e=>de(e,A,v))]}):null})]})}let K=m(T,{ref:P,sx:{width:`100%`,minWidth:0,display:`flex`,flexDirection:`column`,...H?{height:D}:{}},children:[W,G]});return A===k?K:o(_,{theme:A,children:K})}var $=class e extends D{constructor(e){super(e),l(this,`loader`,null),this.state={...this.state,data:null,loading:!1,error:null}}async componentDidMount(){await super.componentDidMount(),this.loader=new K({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 o(pe,{data:this.state.data,loading:this.state.loading,error:this.state.error,onRefresh:()=>{var e;(e=this.loader)==null||e.refresh()},t:e.t,themeType:this.props.oContext.themeType===`dark`?`dark`:`light`,storageKey:`tr064.meshTopology`})}};l($,`t`,(e,...t)=>v.t(e,...t));export{$ as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./vite-preload-helper-CaC3yEL3.js";import"./dist-3rrF2kvV.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__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js`).then(e=>e.vi),[],import.meta.url),"react/jsx-runtime":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__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__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js`).then(e=>e.mr),[],import.meta.url),"react-dom/client":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild__react_mf_2_dom_mf_1_client__prebuild__-BIVeLrp5.js`),[],import.meta.url),"@mui/material":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js`).then(e=>e.Gn),[],import.meta.url),"@mui/icons-material":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js`).then(e=>e.Ft),[],import.meta.url),"@iobroker/gui-components":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Dd7LAjq2.js`).then(e=>e.b),[],import.meta.url),"@iobroker/json-config":async()=>await e(()=>import(`./_virtual_mf___mfe_internal__ConfigCustomTr064Set__mf_owner__242138799280374__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-DET9_feo.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.1`,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:`9.1.2`,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};