iobroker.eos-admin 7.9.74 → 7.9.76
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/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v54.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v55.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v56.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v57.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v58.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v59.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v60.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v61.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v62.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v63.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v64.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v65.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v66.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v67.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v68.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v69.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v70.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v71.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v72.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v73.js +1 -1
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v74.js +1 -2
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v75.js +1 -0
- package/adminWww/assets/AdapterUpdateDialog-BMg84Hpf-v76.js +2 -0
- package/adminWww/assets/Adapters-B5_jQ7DE-v54.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v55.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v56.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v57.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v58.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v59.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v60.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v61.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v62.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v63.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v64.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v65.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v66.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v67.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v68.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v69.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v70.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v71.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v72.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v73.js +1 -1
- package/adminWww/assets/Adapters-B5_jQ7DE-v74.js +1 -9
- package/adminWww/assets/Adapters-B5_jQ7DE-v75.js +1 -0
- package/adminWww/assets/Adapters-B5_jQ7DE-v76.js +9 -0
- package/adminWww/assets/Config-hHK2UzGP-v54.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v55.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v56.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v57.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v58.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v59.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v60.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v61.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v62.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v63.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v64.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v65.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v66.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v67.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v68.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v69.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v70.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v71.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v72.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v73.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v74.js +1 -1
- package/adminWww/assets/Config-hHK2UzGP-v75.js +1 -0
- package/adminWww/assets/Config-hHK2UzGP-v76.js +1 -0
- package/adminWww/assets/CustomTab-B0wqoazH-v54.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v55.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v56.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v57.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v58.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v59.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v60.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v61.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v62.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v63.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v64.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v65.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v66.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v67.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v68.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v69.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v70.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v71.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v72.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v73.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v74.js +1 -1
- package/adminWww/assets/CustomTab-B0wqoazH-v75.js +1 -0
- package/adminWww/assets/CustomTab-B0wqoazH-v76.js +1 -0
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v54.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v55.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v56.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v57.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v58.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v59.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v60.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v61.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v62.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v63.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v64.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v65.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v66.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v67.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v68.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v69.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v70.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v71.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v72.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v73.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v74.js +1 -1
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v75.js +1 -0
- package/adminWww/assets/DeviceManager-BFmQeYQ1-v76.js +1 -0
- package/adminWww/assets/EasyMode-B1d9Vdc4-v54.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v55.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v56.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v57.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v58.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v59.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v60.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v61.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v62.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v63.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v64.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v65.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v66.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v67.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v68.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v69.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v70.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v71.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v72.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v73.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v74.js +1 -1
- package/adminWww/assets/EasyMode-B1d9Vdc4-v75.js +1 -0
- package/adminWww/assets/EasyMode-B1d9Vdc4-v76.js +1 -0
- package/adminWww/assets/Enums-DbWYxKOo-v54.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v55.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v56.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v57.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v58.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v59.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v60.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v61.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v62.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v63.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v64.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v65.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v66.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v67.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v68.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v69.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v70.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v71.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v72.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v73.js +1 -1
- package/adminWww/assets/Enums-DbWYxKOo-v74.js +1 -91
- package/adminWww/assets/Enums-DbWYxKOo-v75.js +1 -0
- package/adminWww/assets/Enums-DbWYxKOo-v76.js +91 -0
- package/adminWww/assets/Fields-CX3rKuWb-v54.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v55.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v56.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v57.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v58.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v59.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v60.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v61.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v62.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v63.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v64.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v65.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v66.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v67.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v68.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v69.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v70.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v71.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v72.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v73.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v74.js +1 -1
- package/adminWww/assets/Fields-CX3rKuWb-v75.js +1 -0
- package/adminWww/assets/Fields-CX3rKuWb-v76.js +1 -0
- package/adminWww/assets/Files-Cd2HOzIE-v54.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v55.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v56.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v57.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v58.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v59.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v60.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v61.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v62.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v63.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v64.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v65.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v66.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v67.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v68.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v69.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v70.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v71.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v72.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v73.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v74.js +1 -1
- package/adminWww/assets/Files-Cd2HOzIE-v75.js +1 -0
- package/adminWww/assets/Files-Cd2HOzIE-v76.js +1 -0
- package/adminWww/assets/Hosts-Bg8QzW5i-v54.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v55.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v56.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v57.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v58.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v59.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v60.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v61.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v62.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v63.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v64.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v65.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v66.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v67.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v68.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v69.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v70.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v71.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v72.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v73.js +1 -1
- package/adminWww/assets/Hosts-Bg8QzW5i-v74.js +1 -121
- package/adminWww/assets/Hosts-Bg8QzW5i-v75.js +1 -0
- package/adminWww/assets/Hosts-Bg8QzW5i-v76.js +121 -0
- package/adminWww/assets/Instances-YdaGnS5a-v54.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v55.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v56.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v57.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v58.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v59.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v60.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v61.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v62.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v63.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v64.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v65.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v66.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v67.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v68.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v69.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v70.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v71.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v72.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v73.js +1 -1
- package/adminWww/assets/Instances-YdaGnS5a-v74.js +1 -2
- package/adminWww/assets/Instances-YdaGnS5a-v75.js +1 -0
- package/adminWww/assets/Instances-YdaGnS5a-v76.js +2 -0
- package/adminWww/assets/Intro-DkwRiz1n-v54.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v55.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v56.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v57.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v58.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v59.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v60.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v61.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v62.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v63.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v64.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v65.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v66.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v67.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v68.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v69.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v70.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v71.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v72.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v73.js +1 -1
- package/adminWww/assets/Intro-DkwRiz1n-v74.js +1 -2
- package/adminWww/assets/Intro-DkwRiz1n-v75.js +1 -0
- package/adminWww/assets/Intro-DkwRiz1n-v76.js +2 -0
- package/adminWww/assets/Logs-CsVPSLJH-v54.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v55.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v56.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v57.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v58.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v59.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v60.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v61.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v62.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v63.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v64.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v65.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v66.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v67.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v68.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v69.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v70.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v71.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v72.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v73.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v74.js +1 -1
- package/adminWww/assets/Logs-CsVPSLJH-v75.js +1 -0
- package/adminWww/assets/Logs-CsVPSLJH-v76.js +1 -0
- package/adminWww/assets/Objects-DPan0bzw-v54.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v55.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v56.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v57.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v58.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v59.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v60.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v61.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v62.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v63.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v64.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v65.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v66.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v67.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v68.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v69.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v70.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v71.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v72.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v73.js +1 -1
- package/adminWww/assets/Objects-DPan0bzw-v74.js +1 -878
- package/adminWww/assets/Objects-DPan0bzw-v75.js +1 -0
- package/adminWww/assets/Objects-DPan0bzw-v76.js +878 -0
- package/adminWww/assets/Users-BgnBRgwU-v54.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v55.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v56.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v57.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v58.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v59.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v60.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v61.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v62.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v63.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v64.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v65.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v66.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v67.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v68.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v69.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v70.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v71.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v72.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v73.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v74.js +1 -1
- package/adminWww/assets/Users-BgnBRgwU-v75.js +1 -0
- package/adminWww/assets/Users-BgnBRgwU-v76.js +1 -0
- package/adminWww/assets/bootstrap-COulQZax-v54.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v55.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v56.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v57.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v58.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v59.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v60.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v61.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v62.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v63.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v64.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v65.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v66.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v67.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v68.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v69.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v70.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v71.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v72.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v73.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v74.js +1 -317
- package/adminWww/assets/bootstrap-COulQZax-v75.js +1 -0
- package/adminWww/assets/bootstrap-COulQZax-v76.js +317 -0
- package/adminWww/assets/hostInit-v54.js +1 -1
- package/adminWww/assets/hostInit-v55.js +1 -1
- package/adminWww/assets/hostInit-v56.js +1 -1
- package/adminWww/assets/hostInit-v57.js +1 -1
- package/adminWww/assets/hostInit-v58.js +1 -1
- package/adminWww/assets/hostInit-v59.js +1 -1
- package/adminWww/assets/hostInit-v60.js +1 -1
- package/adminWww/assets/hostInit-v61.js +1 -1
- package/adminWww/assets/hostInit-v62.js +1 -1
- package/adminWww/assets/hostInit-v63.js +1 -1
- package/adminWww/assets/hostInit-v64.js +1 -1
- package/adminWww/assets/hostInit-v65.js +1 -1
- package/adminWww/assets/hostInit-v66.js +1 -1
- package/adminWww/assets/hostInit-v67.js +1 -1
- package/adminWww/assets/hostInit-v68.js +1 -1
- package/adminWww/assets/hostInit-v69.js +1 -1
- package/adminWww/assets/hostInit-v70.js +1 -1
- package/adminWww/assets/hostInit-v71.js +1 -1
- package/adminWww/assets/hostInit-v72.js +1 -1
- package/adminWww/assets/hostInit-v73.js +1 -1
- package/adminWww/assets/hostInit-v74.js +1 -2
- package/adminWww/assets/hostInit-v75.js +1 -0
- package/adminWww/assets/hostInit-v76.js +2 -0
- package/adminWww/assets/index-CQZugZ1z-v54.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v55.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v56.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v57.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v58.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v59.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v60.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v61.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v62.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v63.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v64.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v65.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v66.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v67.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v68.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v69.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v70.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v71.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v72.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v73.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v74.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v75.js +1 -0
- package/adminWww/assets/index-CQZugZ1z-v76.js +2 -0
- package/adminWww/assets/index-D2ymscJA-v54.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v55.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v56.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v57.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v58.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v59.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v60.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v61.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v62.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v63.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v64.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v65.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v66.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v67.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v68.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v69.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v70.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v71.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v72.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v73.js +1 -1
- package/adminWww/assets/index-D2ymscJA-v74.js +1 -950
- package/adminWww/assets/index-D2ymscJA-v75.js +1 -0
- package/adminWww/assets/index-D2ymscJA-v76.js +950 -0
- package/adminWww/assets/sentry-B7YeoTAx-v71.js +1 -1
- package/adminWww/assets/sentry-B7YeoTAx-v72.js +1 -1
- package/adminWww/assets/sentry-B7YeoTAx-v73.js +1 -1
- package/adminWww/assets/sentry-B7YeoTAx-v74.js +1 -1
- package/adminWww/assets/sentry-B7YeoTAx-v75.js +1 -0
- package/adminWww/assets/sentry-B7YeoTAx-v76.js +1 -0
- package/adminWww/css/eos-branding.css +86 -0
- package/adminWww/index.html +11 -10
- package/adminWww/js/eos-branding.js +1 -1
- package/adminWww/js/eos-console-quiet.js +1 -1
- package/adminWww/js/eos-manual-write-policy.js +469 -0
- package/adminWww/js/eos-objects-state-tools.js +1 -1
- package/adminWww/js/eos-policy-client.js +1 -1
- package/adminWww/js/eos-role-ui.js +1 -1
- package/adminWww/js/eos-security-ui.js +1 -1
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry-v54.js +1 -1
- package/adminWww/remoteEntry-v55.js +1 -1
- package/adminWww/remoteEntry-v56.js +1 -1
- package/adminWww/remoteEntry-v57.js +1 -1
- package/adminWww/remoteEntry-v58.js +1 -1
- package/adminWww/remoteEntry-v59.js +1 -1
- package/adminWww/remoteEntry-v60.js +1 -1
- package/adminWww/remoteEntry-v61.js +1 -1
- package/adminWww/remoteEntry-v62.js +1 -1
- package/adminWww/remoteEntry-v63.js +1 -1
- package/adminWww/remoteEntry-v64.js +1 -1
- package/adminWww/remoteEntry-v65.js +1 -1
- package/adminWww/remoteEntry-v66.js +1 -1
- package/adminWww/remoteEntry-v67.js +1 -1
- package/adminWww/remoteEntry-v68.js +1 -1
- package/adminWww/remoteEntry-v69.js +1 -1
- package/adminWww/remoteEntry-v70.js +1 -1
- package/adminWww/remoteEntry-v71.js +1 -1
- package/adminWww/remoteEntry-v72.js +1 -1
- package/adminWww/remoteEntry-v73.js +1 -1
- package/adminWww/remoteEntry-v74.js +1 -2
- package/adminWww/remoteEntry-v75.js +1 -0
- package/adminWww/remoteEntry-v76.js +2 -0
- package/adminWww/remoteEntry.js +1 -1
- package/docs/MANUAL_DATAPOINT_WRITE_POLICY.md +42 -0
- package/io-package.json +9 -8
- package/package.json +2 -2
- package/tools/nexowatt-validate-package.cjs +4 -1
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/* NexoWatt EOS manual datapoint write policy v7.9.76 */
|
|
2
|
+
(function (root, factory) {
|
|
3
|
+
'use strict';
|
|
4
|
+
const api = factory();
|
|
5
|
+
if (typeof module === 'object' && module.exports) module.exports = api;
|
|
6
|
+
if (!root) return;
|
|
7
|
+
|
|
8
|
+
root.NEXOWATT_EOS_MANUAL_WRITE_POLICY_VERSION = 'v76-universal-manual-write';
|
|
9
|
+
root.NEXOWATT_EOS_GET_WRITE_BEHAVIOR = api.getWriteBehavior;
|
|
10
|
+
root.NEXOWATT_EOS_IS_EXPERT_ONLY_STATE = api.isExpertOnlyState;
|
|
11
|
+
root.NEXOWATT_EOS_COERCE_BOOLEAN = api.toBoolean;
|
|
12
|
+
root.NEXOWATT_EOS_WRITE_MANUAL_STATE = api.writeManualState;
|
|
13
|
+
root.NEXOWATT_EOS_RESOLVE_EDITOR_TYPE = api.resolveEditorType;
|
|
14
|
+
root.NEXOWATT_EOS_PREPARE_EDITOR_VALUE = api.prepareEditorValue;
|
|
15
|
+
root.NEXOWATT_EOS_COERCE_WRITE_VALUE = api.coerceWriteValue;
|
|
16
|
+
root.NEXOWATT_EOS_GET_DIRECT_WRITE_VALUE = api.getDirectWriteValue;
|
|
17
|
+
root.NEXOWATT_EOS_GET_WRITE_LABEL = api.getWriteLabel;
|
|
18
|
+
root.NEXOWATT_EOS_NORMALIZE_STATES = api.normalizeStates;
|
|
19
|
+
})(typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : null, function () {
|
|
20
|
+
'use strict';
|
|
21
|
+
|
|
22
|
+
// Manual writes are serialized per datapoint. A second command is queued
|
|
23
|
+
// instead of being silently dropped while the previous write is pending.
|
|
24
|
+
const writeQueues = new Map();
|
|
25
|
+
|
|
26
|
+
const normalizeText = value => String(value == null ? '' : value)
|
|
27
|
+
.normalize('NFKD')
|
|
28
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.trim();
|
|
31
|
+
|
|
32
|
+
const flattenTranslatedText = value => {
|
|
33
|
+
if (value == null) return '';
|
|
34
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);
|
|
35
|
+
if (typeof value === 'object') return Object.values(value).map(flattenTranslatedText).filter(Boolean).join(' ');
|
|
36
|
+
return '';
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const getCommon = obj => (obj && obj.common && typeof obj.common === 'object' ? obj.common : {});
|
|
40
|
+
const getNative = obj => (obj && obj.native && typeof obj.native === 'object' ? obj.native : {});
|
|
41
|
+
|
|
42
|
+
const getExplicitValue = (obj, name) => {
|
|
43
|
+
const common = getCommon(obj);
|
|
44
|
+
const native = getNative(obj);
|
|
45
|
+
const custom = common.custom || {};
|
|
46
|
+
const candidates = [
|
|
47
|
+
common[name],
|
|
48
|
+
native[name],
|
|
49
|
+
native.nexowatt && native.nexowatt[name],
|
|
50
|
+
custom.nexowatt && custom.nexowatt[name],
|
|
51
|
+
custom['nexowatt.eos'] && custom['nexowatt.eos'][name],
|
|
52
|
+
custom['eos-admin'] && custom['eos-admin'][name],
|
|
53
|
+
];
|
|
54
|
+
for (const value of candidates) {
|
|
55
|
+
if (value !== undefined) return value;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const getExplicitExpertOnly = obj => {
|
|
61
|
+
const candidates = [getExplicitValue(obj, 'manualWriteExpertOnly'), getExplicitValue(obj, 'expertOnly')];
|
|
62
|
+
for (const value of candidates) {
|
|
63
|
+
if (typeof value === 'boolean') return value;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const isExpertOnlyState = (id, obj) => {
|
|
69
|
+
const explicit = getExplicitExpertOnly(obj);
|
|
70
|
+
if (explicit !== undefined) return explicit;
|
|
71
|
+
|
|
72
|
+
const common = getCommon(obj);
|
|
73
|
+
const role = normalizeText(common.role);
|
|
74
|
+
const text = normalizeText([
|
|
75
|
+
id,
|
|
76
|
+
role,
|
|
77
|
+
common.type,
|
|
78
|
+
flattenTranslatedText(common.name),
|
|
79
|
+
flattenTranslatedText(common.desc),
|
|
80
|
+
].join(' '));
|
|
81
|
+
const compact = text.replace(/[^a-z0-9]+/g, '');
|
|
82
|
+
|
|
83
|
+
// Conservative safety policy for commands that can reset equipment,
|
|
84
|
+
// open contactors or materially change charging/power/current limits.
|
|
85
|
+
if (/^(?:level\.)?(?:power|current)(?:\.|$)/.test(role)) return true;
|
|
86
|
+
if (/^(?:value\.)?(?:power|current)\.setpoint(?:\.|$)/.test(role)) return true;
|
|
87
|
+
|
|
88
|
+
const exactRiskTokens = [
|
|
89
|
+
'hardreset', 'softreset', 'factoryreset', 'factorydefault', 'reboot', 'restartdevice', 'shutdown',
|
|
90
|
+
'emergencystop', 'notaus', 'contactor', 'unlockconnector', 'remotestart', 'remotestop',
|
|
91
|
+
'starttransaction', 'stoptransaction', 'chargepower', 'chargingpower', 'dischargepower',
|
|
92
|
+
'chargecurrent', 'chargingcurrent', 'currentlimit', 'safecurrent', 'setchargingcurrent',
|
|
93
|
+
'exportlimit', 'feedinlimit', 'powerlimit', 'powersetpoint', 'pvpowerlimit', 'gridlimit',
|
|
94
|
+
'controlmode', 'operatingmode', 'batterymode', 'gridmode', 'firmwareupdate',
|
|
95
|
+
'ladeleistung', 'entladeleistung', 'ladestrom', 'stromlimit', 'leistungsgrenze',
|
|
96
|
+
'leistungssollwert', 'einspeiselimit', 'ruecksetzen', 'neustart',
|
|
97
|
+
];
|
|
98
|
+
if (exactRiskTokens.some(token => compact.includes(token))) return true;
|
|
99
|
+
|
|
100
|
+
const powerCommand = /(?:charge|charging|discharge|export|feedin|grid|netz|pv|lade|entlade|einspeise)[\s._/-]{0,6}(?:power|current|leistung|strom).{0,28}(?:limit|setpoint|target|command|override|control|grenze|soll|vorgabe)/;
|
|
101
|
+
const inversePowerCommand = /(?:limit|setpoint|target|command|override|control|grenze|soll|vorgabe).{0,28}(?:charge|charging|discharge|export|feedin|grid|netz|pv|lade|entlade|einspeise|power|current|leistung|strom)/;
|
|
102
|
+
return powerCommand.test(text) || inversePowerCommand.test(text);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const toBoolean = value => {
|
|
106
|
+
if (value === true || value === 1) return true;
|
|
107
|
+
if (value === false || value === 0 || value == null) return false;
|
|
108
|
+
const normalized = normalizeText(value);
|
|
109
|
+
if (['true', '1', 'on', 'yes', 'ja', 'enabled', 'enable', 'active', 'start', 'open', 'ein', 'an'].includes(normalized)) return true;
|
|
110
|
+
if (['false', '0', 'off', 'no', 'nein', 'disabled', 'disable', 'inactive', 'stop', 'closed', 'aus', '', 'null', '(null)'].includes(normalized)) return false;
|
|
111
|
+
return Boolean(value);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const normalizeSingleCommonType = value => {
|
|
115
|
+
const type = normalizeText(value);
|
|
116
|
+
if (type === 'int' || type === 'integer' || type === 'float' || type === 'double') return 'number';
|
|
117
|
+
if (type === 'bool') return 'boolean';
|
|
118
|
+
if (type === 'object' || type === 'array') return type;
|
|
119
|
+
if (type === 'json') return 'json';
|
|
120
|
+
if (type === 'number' || type === 'boolean' || type === 'string' || type === 'mixed' || type === 'file') return type;
|
|
121
|
+
return '';
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const normalizeCommonType = value => {
|
|
125
|
+
if (Array.isArray(value)) {
|
|
126
|
+
const types = [...new Set(value.map(normalizeSingleCommonType).filter(Boolean))];
|
|
127
|
+
return types.length === 1 ? types[0] : types.length ? 'mixed' : '';
|
|
128
|
+
}
|
|
129
|
+
return normalizeSingleCommonType(value);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const inferPrimitiveType = value => {
|
|
133
|
+
if (Array.isArray(value)) return 'array';
|
|
134
|
+
if (value !== null && typeof value === 'object') return 'object';
|
|
135
|
+
if (typeof value === 'boolean') return 'boolean';
|
|
136
|
+
if (typeof value === 'number') return 'number';
|
|
137
|
+
if (typeof value === 'string') return 'string';
|
|
138
|
+
return '';
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const normalizeStates = states => {
|
|
142
|
+
if (!states) return null;
|
|
143
|
+
if (Array.isArray(states)) {
|
|
144
|
+
const result = {};
|
|
145
|
+
states.forEach((value, index) => { result[String(index)] = flattenTranslatedText(value); });
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
if (typeof states === 'string') {
|
|
149
|
+
const result = {};
|
|
150
|
+
states.split(/[;,]/).map(part => part.trim()).filter(Boolean).forEach(part => {
|
|
151
|
+
const separator = part.includes(':') ? ':' : part.includes('=') ? '=' : '';
|
|
152
|
+
if (!separator) return;
|
|
153
|
+
const index = part.indexOf(separator);
|
|
154
|
+
const key = part.slice(0, index).trim();
|
|
155
|
+
const label = part.slice(index + 1).trim();
|
|
156
|
+
if (key) result[key] = label || key;
|
|
157
|
+
});
|
|
158
|
+
return Object.keys(result).length ? result : null;
|
|
159
|
+
}
|
|
160
|
+
if (typeof states === 'object') {
|
|
161
|
+
const result = {};
|
|
162
|
+
Object.keys(states).forEach(key => { result[String(key)] = flattenTranslatedText(states[key]); });
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const resolveEditorType = (obj, currentValue, states) => {
|
|
169
|
+
const common = getCommon(obj);
|
|
170
|
+
const normalizedStates = normalizeStates(states || common.states);
|
|
171
|
+
if (normalizedStates && Object.keys(normalizedStates).length) return 'states';
|
|
172
|
+
|
|
173
|
+
const declared = normalizeCommonType(common.type);
|
|
174
|
+
if (declared === 'file') return 'file';
|
|
175
|
+
if (declared === 'object' || declared === 'array' || declared === 'json') return 'json';
|
|
176
|
+
if (declared === 'number' || declared === 'boolean' || declared === 'string') return declared;
|
|
177
|
+
|
|
178
|
+
const candidate = currentValue !== undefined && currentValue !== null ? currentValue : common.def;
|
|
179
|
+
const inferred = inferPrimitiveType(candidate);
|
|
180
|
+
if (inferred === 'object' || inferred === 'array') return 'json';
|
|
181
|
+
if (inferred) return inferred;
|
|
182
|
+
return 'string';
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const stringifyJsonValue = value => {
|
|
186
|
+
if (typeof value === 'string') {
|
|
187
|
+
try {
|
|
188
|
+
return JSON.stringify(JSON.parse(value), null, 2);
|
|
189
|
+
} catch {
|
|
190
|
+
return value;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (value === undefined || value === null) return '';
|
|
194
|
+
try {
|
|
195
|
+
return JSON.stringify(value, null, 2);
|
|
196
|
+
} catch {
|
|
197
|
+
return String(value);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const isNumberInRange = (value, common) => {
|
|
202
|
+
if (value === '') return false;
|
|
203
|
+
const number = Number(typeof value === 'string' ? value.trim().replace(',', '.') : value);
|
|
204
|
+
if (!Number.isFinite(number)) return false;
|
|
205
|
+
if (typeof common.min === 'number' && number < common.min) return false;
|
|
206
|
+
if (typeof common.max === 'number' && number > common.max) return false;
|
|
207
|
+
return true;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const prepareEditorValue = (obj, currentValue, states) => {
|
|
211
|
+
const common = getCommon(obj);
|
|
212
|
+
const type = resolveEditorType(obj, currentValue, states);
|
|
213
|
+
const hasCurrentValue = currentValue !== undefined && currentValue !== null;
|
|
214
|
+
const hasDefault = common.def !== undefined && common.def !== null;
|
|
215
|
+
let value = hasCurrentValue ? currentValue : hasDefault ? common.def : undefined;
|
|
216
|
+
let valid = true;
|
|
217
|
+
|
|
218
|
+
if (type === 'number') {
|
|
219
|
+
if (value === undefined || value === '') {
|
|
220
|
+
value = '';
|
|
221
|
+
valid = false;
|
|
222
|
+
} else {
|
|
223
|
+
const normalized = typeof value === 'string' ? value.trim().replace(',', '.') : value;
|
|
224
|
+
const parsed = Number(normalized);
|
|
225
|
+
if (Number.isFinite(parsed)) {
|
|
226
|
+
value = parsed;
|
|
227
|
+
valid = isNumberInRange(parsed, common);
|
|
228
|
+
} else {
|
|
229
|
+
value = String(value);
|
|
230
|
+
valid = false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
} else if (type === 'boolean') {
|
|
234
|
+
value = toBoolean(value);
|
|
235
|
+
} else if (type === 'json') {
|
|
236
|
+
const declared = normalizeCommonType(common.type);
|
|
237
|
+
if (value === undefined) value = declared === 'array' ? '[]' : declared === 'object' ? '{}' : '';
|
|
238
|
+
value = stringifyJsonValue(value);
|
|
239
|
+
try {
|
|
240
|
+
JSON.parse(value);
|
|
241
|
+
valid = true;
|
|
242
|
+
} catch {
|
|
243
|
+
valid = false;
|
|
244
|
+
}
|
|
245
|
+
} else if (type === 'states') {
|
|
246
|
+
value = value === undefined ? '' : value;
|
|
247
|
+
const normalizedStates = normalizeStates(states || common.states) || {};
|
|
248
|
+
valid = value !== '' && Object.prototype.hasOwnProperty.call(normalizedStates, String(value));
|
|
249
|
+
} else {
|
|
250
|
+
value = value === undefined ? '' : String(value);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return { type, value, propsValue: value, valid };
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
const parseNumber = (value, common) => {
|
|
257
|
+
if (value === null || value === 'null') return null;
|
|
258
|
+
const normalized = typeof value === 'string' ? value.trim().replace(',', '.') : value;
|
|
259
|
+
if (normalized === '') throw new Error('Der Zahlenwert darf nicht leer sein.');
|
|
260
|
+
const number = Number(normalized);
|
|
261
|
+
if (!Number.isFinite(number)) throw new Error(`Ungültiger Zahlenwert: ${String(value)}`);
|
|
262
|
+
if (typeof common.min === 'number' && number < common.min) throw new Error(`Wert liegt unter dem Minimum ${common.min}.`);
|
|
263
|
+
if (typeof common.max === 'number' && number > common.max) throw new Error(`Wert liegt über dem Maximum ${common.max}.`);
|
|
264
|
+
return number;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const parseJsonStateValue = (value, declared) => {
|
|
268
|
+
const raw = value == null ? '' : typeof value === 'string' ? value : JSON.stringify(value);
|
|
269
|
+
if (!raw.trim()) throw new Error('Der JSON-Wert darf nicht leer sein.');
|
|
270
|
+
const parsed = JSON.parse(raw);
|
|
271
|
+
if (declared === 'array' && !Array.isArray(parsed)) throw new Error('Der Datenpunkt erwartet ein JSON-Array.');
|
|
272
|
+
if (declared === 'object' && (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))) {
|
|
273
|
+
throw new Error('Der Datenpunkt erwartet ein JSON-Objekt.');
|
|
274
|
+
}
|
|
275
|
+
// ioBroker StateValue is scalar. Structured values are therefore stored
|
|
276
|
+
// as a validated JSON string instead of passing an unsupported object.
|
|
277
|
+
return raw;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const coerceByDeclaredType = (obj, value, currentValue) => {
|
|
281
|
+
const common = getCommon(obj);
|
|
282
|
+
const declared = normalizeCommonType(common.type);
|
|
283
|
+
if (value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'value')) value = value.value;
|
|
284
|
+
|
|
285
|
+
if (declared === 'number') return parseNumber(value, common);
|
|
286
|
+
if (declared === 'boolean') return value === null || value === 'null' ? null : toBoolean(value);
|
|
287
|
+
if (declared === 'string') return value === null ? '' : String(value);
|
|
288
|
+
if (declared === 'object' || declared === 'array' || declared === 'json') return parseJsonStateValue(value, declared);
|
|
289
|
+
|
|
290
|
+
// mixed or missing type: preserve the current/default primitive type where possible.
|
|
291
|
+
const candidate = currentValue !== undefined && currentValue !== null ? currentValue : common.def;
|
|
292
|
+
const inferred = inferPrimitiveType(candidate);
|
|
293
|
+
if (inferred === 'number') return parseNumber(value, common);
|
|
294
|
+
if (inferred === 'boolean') return value === null || value === 'null' ? null : toBoolean(value);
|
|
295
|
+
if (inferred === 'object' || inferred === 'array') return parseJsonStateValue(value, inferred);
|
|
296
|
+
if (typeof value === 'string' && value.trim() === 'null') return null;
|
|
297
|
+
return value == null ? '' : value;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
const coerceStateKey = (obj, value, currentValue) => {
|
|
301
|
+
const raw = value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'value') ? value.value : value;
|
|
302
|
+
return coerceByDeclaredType(obj, raw, currentValue);
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
const coerceWriteValue = (obj, rawValue, editorType, originalType, currentValue) => {
|
|
306
|
+
const common = getCommon(obj);
|
|
307
|
+
if (common.write === false) throw new Error('common.write=false');
|
|
308
|
+
|
|
309
|
+
if (editorType === 'states') return coerceStateKey(obj, rawValue, currentValue);
|
|
310
|
+
if (editorType === 'number') return parseNumber(rawValue, common);
|
|
311
|
+
if (editorType === 'boolean') return rawValue === null || rawValue === 'null' ? null : toBoolean(rawValue);
|
|
312
|
+
if (editorType === 'json') return parseJsonStateValue(rawValue, normalizeCommonType(common.type));
|
|
313
|
+
if (editorType === 'string') return rawValue == null ? '' : String(rawValue);
|
|
314
|
+
return coerceByDeclaredType(obj, rawValue, currentValue);
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
const booleanTokens = {
|
|
318
|
+
true: ['true', '1', 'on', 'yes', 'ja', 'enabled', 'enable', 'active', 'start', 'open', 'ein', 'an'],
|
|
319
|
+
false: ['false', '0', 'off', 'no', 'nein', 'disabled', 'disable', 'inactive', 'stop', 'closed', 'aus'],
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
const stringTogglePairs = [
|
|
323
|
+
['off', 'on'], ['false', 'true'], ['0', '1'], ['disabled', 'enabled'], ['disable', 'enable'],
|
|
324
|
+
['inactive', 'active'], ['stop', 'start'], ['closed', 'open'], ['aus', 'ein'], ['nein', 'ja'],
|
|
325
|
+
];
|
|
326
|
+
|
|
327
|
+
const findBooleanStateKey = (states, desired) => {
|
|
328
|
+
const normalized = normalizeStates(states);
|
|
329
|
+
if (!normalized) return undefined;
|
|
330
|
+
const tokens = desired ? booleanTokens.true : booleanTokens.false;
|
|
331
|
+
for (const [key, label] of Object.entries(normalized)) {
|
|
332
|
+
if (tokens.includes(normalizeText(key)) || tokens.includes(normalizeText(label))) return key;
|
|
333
|
+
}
|
|
334
|
+
return undefined;
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
const getStringToggleValue = (currentValue, desired) => {
|
|
338
|
+
const raw = String(currentValue == null ? '' : currentValue).trim();
|
|
339
|
+
const current = normalizeText(raw);
|
|
340
|
+
let result = desired ? 'true' : 'false';
|
|
341
|
+
for (const [falseToken, trueToken] of stringTogglePairs) {
|
|
342
|
+
if (current === falseToken || current === trueToken) {
|
|
343
|
+
result = desired ? trueToken : falseToken;
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (raw && raw === raw.toUpperCase()) return result.toUpperCase();
|
|
348
|
+
if (raw && raw[0] === raw[0].toUpperCase() && raw.slice(1) === raw.slice(1).toLowerCase()) {
|
|
349
|
+
return result.charAt(0).toUpperCase() + result.slice(1);
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
const getDirectWriteValue = (id, obj, item, behavior, currentValue) => {
|
|
355
|
+
const common = getCommon(obj);
|
|
356
|
+
const desired = behavior === 'button' ? true : !toBoolean(currentValue);
|
|
357
|
+
const explicitName = behavior === 'button' ? 'manualTriggerValue' : desired ? 'manualTrueValue' : 'manualFalseValue';
|
|
358
|
+
const explicit = getExplicitValue(obj, explicitName);
|
|
359
|
+
if (explicit !== undefined) return coerceByDeclaredType(obj, explicit, currentValue);
|
|
360
|
+
|
|
361
|
+
const stateKey = findBooleanStateKey(common.states, desired);
|
|
362
|
+
if (stateKey !== undefined) return coerceStateKey(obj, stateKey, currentValue);
|
|
363
|
+
|
|
364
|
+
if (behavior === 'button' && common.def !== undefined && common.def !== null) {
|
|
365
|
+
return coerceByDeclaredType(obj, common.def, currentValue);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const declared = normalizeCommonType(common.type);
|
|
369
|
+
if (declared === 'number') {
|
|
370
|
+
if (behavior === 'switch') {
|
|
371
|
+
if (desired && typeof common.max === 'number') return common.max;
|
|
372
|
+
if (!desired && typeof common.min === 'number') return common.min;
|
|
373
|
+
}
|
|
374
|
+
return desired ? 1 : 0;
|
|
375
|
+
}
|
|
376
|
+
if (declared === 'string') return getStringToggleValue(currentValue, desired);
|
|
377
|
+
if (declared === 'object' || declared === 'array' || declared === 'json') {
|
|
378
|
+
throw new Error('Objekt-/Array-Befehle müssen über den Wertdialog gesetzt werden.');
|
|
379
|
+
}
|
|
380
|
+
if (declared === 'mixed') {
|
|
381
|
+
if (typeof currentValue === 'number') return desired ? 1 : 0;
|
|
382
|
+
if (typeof currentValue === 'string') return getStringToggleValue(currentValue, desired);
|
|
383
|
+
}
|
|
384
|
+
return desired;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
const getWriteBehavior = (id, obj, item, expertMode) => {
|
|
388
|
+
if (!obj || obj.type !== 'state') return 'readonly';
|
|
389
|
+
const common = getCommon(obj);
|
|
390
|
+
if (common.write === false) return 'readonly';
|
|
391
|
+
if (isExpertOnlyState(id, obj) && !expertMode) return 'expert-only';
|
|
392
|
+
if (normalizeCommonType(common.type) === 'file') return 'file';
|
|
393
|
+
|
|
394
|
+
const role = normalizeText(common.role);
|
|
395
|
+
const data = item && item.data ? item.data : {};
|
|
396
|
+
const declared = normalizeCommonType(common.type);
|
|
397
|
+
const explicitControl = normalizeText(
|
|
398
|
+
getExplicitValue(obj, 'manualWriteControl') !== undefined
|
|
399
|
+
? getExplicitValue(obj, 'manualWriteControl')
|
|
400
|
+
: getExplicitValue(obj, 'manualControl'),
|
|
401
|
+
);
|
|
402
|
+
if (['button', 'trigger', 'action'].includes(explicitControl) && !['object', 'array', 'json'].includes(declared)) return 'button';
|
|
403
|
+
if (['dialog', 'value', 'editor'].includes(explicitControl)) return 'dialog';
|
|
404
|
+
if (['switch', 'toggle'].includes(explicitControl)) return 'switch';
|
|
405
|
+
|
|
406
|
+
const normalizedStates = normalizeStates(common.states);
|
|
407
|
+
const stateCount = normalizedStates ? Object.keys(normalizedStates).length : 0;
|
|
408
|
+
const isButton = Boolean(data.button) || role === 'button' || role.startsWith('button.') || role === 'action' || role.startsWith('action.') || role === 'trigger' || role.startsWith('trigger.');
|
|
409
|
+
if (isButton && declared !== 'object' && declared !== 'array' && declared !== 'json') return 'button';
|
|
410
|
+
if (declared === 'boolean') return 'switch';
|
|
411
|
+
// A numeric/string mode with more than two states is a selector, not a
|
|
412
|
+
// toggle. Treating it as a switch would make only two of its values reachable.
|
|
413
|
+
if ((Boolean(data.switch) || role === 'switch' || role.startsWith('switch.')) && stateCount <= 2) return 'switch';
|
|
414
|
+
return 'dialog';
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
const getWriteLabel = (id, obj, behavior, expertMode, hasState) => {
|
|
418
|
+
if (behavior === 'readonly') return 'Nur lesbar';
|
|
419
|
+
if (behavior === 'expert-only') return 'Nur im Expertenmodus beschreibbar';
|
|
420
|
+
if (behavior === 'button') return 'Befehl auslösen';
|
|
421
|
+
if (behavior === 'switch') return 'Schalten';
|
|
422
|
+
if (!hasState) return 'Wert setzen (schreibender Datenpunkt ohne aktuellen Lesewert)';
|
|
423
|
+
return 'Wert bearbeiten';
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
const writeManualState = (socket, id, value) => {
|
|
427
|
+
if (!socket || typeof socket.setState !== 'function') {
|
|
428
|
+
return Promise.reject(new Error('ioBroker socket is not ready'));
|
|
429
|
+
}
|
|
430
|
+
const key = String(id || '');
|
|
431
|
+
if (!key) return Promise.reject(new Error('Missing datapoint ID'));
|
|
432
|
+
if (value === undefined) return Promise.reject(new Error(`Undefined is not a valid state value for ${key}`));
|
|
433
|
+
if (value !== null && !['string', 'number', 'boolean'].includes(typeof value)) {
|
|
434
|
+
return Promise.reject(new Error(`Unsupported state value type for ${key}: ${typeof value}`));
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const previous = writeQueues.get(key) || Promise.resolve();
|
|
438
|
+
const operation = previous.catch(() => undefined).then(() => {
|
|
439
|
+
let timeoutHandle;
|
|
440
|
+
const write = Promise.resolve().then(() => socket.setState(key, { val: value, ack: false, q: 0 }));
|
|
441
|
+
const timeout = new Promise((_, reject) => {
|
|
442
|
+
timeoutHandle = setTimeout(() => reject(new Error(`Write timeout for ${key}`)), 15000);
|
|
443
|
+
});
|
|
444
|
+
return Promise.race([write, timeout]).finally(() => {
|
|
445
|
+
if (timeoutHandle) clearTimeout(timeoutHandle);
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
const tail = operation.finally(() => {
|
|
449
|
+
if (writeQueues.get(key) === tail) writeQueues.delete(key);
|
|
450
|
+
});
|
|
451
|
+
writeQueues.set(key, tail);
|
|
452
|
+
return operation;
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
return {
|
|
456
|
+
getExplicitExpertOnly,
|
|
457
|
+
isExpertOnlyState,
|
|
458
|
+
getWriteBehavior,
|
|
459
|
+
getWriteLabel,
|
|
460
|
+
resolveEditorType,
|
|
461
|
+
prepareEditorValue,
|
|
462
|
+
coerceWriteValue,
|
|
463
|
+
getDirectWriteValue,
|
|
464
|
+
toBoolean,
|
|
465
|
+
writeManualState,
|
|
466
|
+
normalizeStates,
|
|
467
|
+
normalizeCommonType,
|
|
468
|
+
};
|
|
469
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_VERSION = '
|
|
4
|
+
window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_VERSION = 'v76-universal-manual-write';
|
|
5
5
|
window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_MODE = 'passive-native-objectbrowser';
|
|
6
6
|
|
|
7
7
|
// Keep this file intentionally passive. The datapoints page must use the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
window.NEXOWATT_EOS_ROLE_UI_VERSION = '
|
|
4
|
+
window.NEXOWATT_EOS_ROLE_UI_VERSION = 'v76-universal-manual-write';
|
|
5
5
|
|
|
6
6
|
const ASSET_BASE = (() => {
|
|
7
7
|
const script = document.currentScript?.src || document.querySelector('script[src*="eos-role-ui.js"]')?.src || window.location.href;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v76-universal-manual-write';
|
|
5
5
|
const LEGACY_ADMIN = 'admin';
|
|
6
6
|
const LEGACY_ADMIN_INSTANCE = 'admin.0';
|
|
7
7
|
const CORE_PROTECTED_ADAPTERS = ['admin', 'eos-admin', 'backitup', 'nexowatt-devices', 'nexowatt-device', 'nexowatt-dev', 'nexowatt-ui'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry-
|
|
1
|
+
{"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry-v76.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry-v76.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_admin","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_admin:@emotion/react","name":"@emotion/react","version":"11.14.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-react.browser.esm-DrKG52pD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@emotion/styled","name":"@emotion/styled","version":"11.14.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-styled.browser.esm-DOdpWCne.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.2.9","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2ymscJA-v76.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/json-config","name":"@iobroker/json-config","version":"8.4.7","requiredVersion":"*","assets":{"js":{"async":["assets/index-D9Ej0pc9.js"],"sync":["assets/index-mSK_krgD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/dm-gui-components","name":"@iobroker/dm-gui-components","version":"9.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-bCuipom1.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns","name":"date-fns","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Cqq5gIUF.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns/locale","name":"date-fns/locale","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/locale-CLe3aX4T.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet","name":"leaflet","version":"1.9.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/leaflet-src-B651YTWC.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet-geosearch","name":"leaflet-geosearch","version":"4.2.2","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/geosearch.module-BA4ww39P.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-ace","name":"react-ace","version":"13.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-C_anklzA.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dropzone","name":"react-dropzone","version":"15.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CXZCHHB6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:semver","name":"semver","version":"7.7.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CkI9667U.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/x-date-pickers","name":"@mui/x-date-pickers","version":"7.29.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-uASdmaE6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-4wMOc304.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2Em8S_O.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-8JYjTPhv.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/icons-material","name":"@mui/icons-material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-jy_3EbfW.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./remoteEntry-
|
|
1
|
+
export * from "./remoteEntry-v76.js";
|