iobroker.ai-energy-manager 0.2.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.
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/admin/ai-energy-manager.png +0 -0
- package/admin/custom/.vite/manifest.json +123 -0
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAiEnergyManager-D_8M5SZg.js +260 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js +2234 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js +180 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js +253550 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js +44 -0
- package/admin/custom/assets/hostInit-CFxXjdei.js +62 -0
- package/admin/custom/assets/index-BEY7z3x9.js +31 -0
- package/admin/custom/assets/main-B8zKNpy9.js +3465 -0
- package/admin/custom/assets/main-C0rS7ABd.css +368 -0
- package/admin/custom/assets/preload-helper-D9f-kLWf.js +65 -0
- package/admin/custom/assets/rolldown-runtime-BYbx6iT9.js +42 -0
- package/admin/custom/assets/virtualExposes-BU4Kt82k.js +2 -0
- package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js +3372 -0
- package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js +61 -0
- package/admin/custom/customComponents.js +5 -0
- package/admin/custom/index.html +14 -0
- package/admin/custom/mf-entry-bootstrap-0.js +16 -0
- package/admin/custom/mf-manifest.json +184 -0
- package/admin/custom/mf-stats.json +375 -0
- package/admin/i18n/de/translations.json +171 -0
- package/admin/i18n/en/translations.json +171 -0
- package/admin/i18n/en.json +171 -0
- package/admin/i18n/es/translations.json +171 -0
- package/admin/i18n/fr/translations.json +171 -0
- package/admin/i18n/it/translations.json +171 -0
- package/admin/i18n/nl/translations.json +171 -0
- package/admin/i18n/nl.json +171 -0
- package/admin/i18n/pl/translations.json +171 -0
- package/admin/i18n/pt/translations.json +171 -0
- package/admin/i18n/ru/translations.json +171 -0
- package/admin/i18n/uk/translations.json +171 -0
- package/admin/i18n/zh-cn/translations.json +171 -0
- package/admin/jsonConfig.json5 +17 -0
- package/io-package.json +566 -0
- package/lib/apiClient.js +178 -0
- package/lib/controlHandler.js +172 -0
- package/lib/datapointAssignments.js +511 -0
- package/lib/datapointManager.js +117 -0
- package/lib/featureRegistry.js +355 -0
- package/lib/loggerUtils.js +43 -0
- package/lib/serverConfigManager.js +102 -0
- package/lib/stateCollector.js +152 -0
- package/lib/telemetryQueue.js +110 -0
- package/lib/telemetrySampler.js +889 -0
- package/lib/validation.js +110 -0
- package/main.js +2047 -0
- package/package.json +82 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christoph Böhrs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# ioBroker AI Energy Manager
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/iobroker.ai-energy-manager)
|
|
4
|
+
[](https://www.npmjs.com/package/iobroker.ai-energy-manager)
|
|
5
|
+

|
|
6
|
+
[](https://github.com/blabond/ioBroker.ai-energy-manager/blob/main/LICENSE)
|
|
7
|
+
[](https://github.com/blabond/ioBroker.ai-energy-manager/actions/workflows/test-and-release.yml)
|
|
8
|
+
|
|
9
|
+
The AI Energy Manager adapter connects ioBroker to the SmartEnergy backend for dynamic electricity tariffs, photovoltaic forecasts, telemetry, battery management, wallbox integration and controlled writable datapoints.
|
|
10
|
+
|
|
11
|
+
The adapter continuously sends normalized energy telemetry to the backend, receives a user-specific system configuration and applies controlled charging commands only to datapoints that were explicitly selected in ioBroker. It supports installations with household meters, PV-only plants, balcony power systems, batteries, generic storage systems, energy meters and wallboxes.
|
|
12
|
+
|
|
13
|
+
## Documentation
|
|
14
|
+
|
|
15
|
+
[German documentation](https://github.com/blabond/ioBroker.ai-energy-manager/blob/main/docs/de/README.md)
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- Token-based connection to the SmartEnergy backend
|
|
20
|
+
- Server-driven adapter configuration for the user's actual plants
|
|
21
|
+
- Telemetry upload for consumption, grid import, grid export, PV production, battery power, battery state of charge and wallbox values
|
|
22
|
+
- Automatic source unit handling for Wh, kWh, W and kW values
|
|
23
|
+
- Dynamic datapoint tables grouped by household and plant
|
|
24
|
+
- ioBroker object browser for selecting datapoints
|
|
25
|
+
- Dashboard Lite with system cards, 6-hour plan and pattern detection
|
|
26
|
+
- Controlled battery commands for charging, discharging and holding reserve
|
|
27
|
+
- Controlled wallbox commands, including charging enablement and current limits
|
|
28
|
+
- Explicit write protection: commands are accepted only for configured writable datapoints
|
|
29
|
+
- Token masking in logs
|
|
30
|
+
- Theme-aware admin UI for light and dark ioBroker themes
|
|
31
|
+
|
|
32
|
+
## Requirements
|
|
33
|
+
|
|
34
|
+
- Node.js 22 or newer
|
|
35
|
+
- js-controller 6.0.11 or newer
|
|
36
|
+
- ioBroker Admin 7.6.20 or newer
|
|
37
|
+
- SmartEnergy account with an adapter token
|
|
38
|
+
- Configured ioBroker datapoints for the meters, batteries, PV plants and wallboxes that should be used
|
|
39
|
+
|
|
40
|
+
## Installation
|
|
41
|
+
|
|
42
|
+
Install the adapter from the ioBroker adapter repository or from npm when it is available there. After installation, create an instance of `ai-energy-manager`.
|
|
43
|
+
|
|
44
|
+
## Configuration
|
|
45
|
+
|
|
46
|
+
Open the adapter configuration in ioBroker Admin.
|
|
47
|
+
|
|
48
|
+
1. Paste the adapter token from the SmartEnergy web frontend.
|
|
49
|
+
2. Save the configuration.
|
|
50
|
+
3. Click **Request Config**.
|
|
51
|
+
4. Open the **Datapoints** tab.
|
|
52
|
+
5. Select the required ioBroker state paths with the object browser.
|
|
53
|
+
6. Save the configuration.
|
|
54
|
+
|
|
55
|
+
The adapter token is stored in encrypted native configuration and is protected from being displayed in ioBroker Admin.
|
|
56
|
+
|
|
57
|
+
## Request Config
|
|
58
|
+
|
|
59
|
+
The **Request Config** button asks the backend for the current system configuration of the user. The backend response defines the required household values and the available plant-specific values. The adapter then renders one household table and one table per configured plant.
|
|
60
|
+
|
|
61
|
+
The number of plant tables is not fixed. If the user adds or removes plants in the web frontend, the adapter receives the new structure on the next configuration request.
|
|
62
|
+
|
|
63
|
+
Existing datapoint assignments are preserved as long as their logical keys still exist.
|
|
64
|
+
|
|
65
|
+
## Datapoints
|
|
66
|
+
|
|
67
|
+
The adapter works with logical datapoints instead of hard-coded ioBroker paths. Typical household datapoints are:
|
|
68
|
+
|
|
69
|
+
- household consumption
|
|
70
|
+
- grid import meter
|
|
71
|
+
- grid export meter
|
|
72
|
+
- current grid power
|
|
73
|
+
- wallbox energy or power
|
|
74
|
+
|
|
75
|
+
Typical plant datapoints are:
|
|
76
|
+
|
|
77
|
+
- PV production
|
|
78
|
+
- battery state of charge
|
|
79
|
+
- battery power
|
|
80
|
+
- battery capacity
|
|
81
|
+
- controllable AC output power
|
|
82
|
+
- charge enablement
|
|
83
|
+
- wallbox current limit
|
|
84
|
+
|
|
85
|
+
The adapter automatically normalizes source units before telemetry is sent. For example, a kWh source can be sent as Wh telemetry and a kW source can be sent as W telemetry.
|
|
86
|
+
|
|
87
|
+
## Telemetry
|
|
88
|
+
|
|
89
|
+
The adapter reads the selected ioBroker states and builds a normalized telemetry payload. The payload is sent to the backend at the configured interval. If `sendOnlyChanged` is enabled, unchanged payloads are skipped to reduce traffic.
|
|
90
|
+
|
|
91
|
+
Telemetry is used by the backend for:
|
|
92
|
+
|
|
93
|
+
- daily household consumption
|
|
94
|
+
- grid import and export
|
|
95
|
+
- PV yield
|
|
96
|
+
- battery availability
|
|
97
|
+
- charging and discharging decisions
|
|
98
|
+
- wallbox charging decisions
|
|
99
|
+
- pattern detection
|
|
100
|
+
- dashboard and 6-hour planning
|
|
101
|
+
|
|
102
|
+
## Battery and Wallbox Control
|
|
103
|
+
|
|
104
|
+
The backend can send control commands for allowed logical targets. The adapter maps these targets to the ioBroker datapoints selected by the user.
|
|
105
|
+
|
|
106
|
+
Supported control behavior includes:
|
|
107
|
+
|
|
108
|
+
- charge battery from PV surplus
|
|
109
|
+
- charge battery from the grid during favorable tariff windows
|
|
110
|
+
- hold reserve for later use
|
|
111
|
+
- discharge when the plan requires battery support
|
|
112
|
+
- limit AC output power
|
|
113
|
+
- enable or disable wallbox charging
|
|
114
|
+
- set wallbox current limits
|
|
115
|
+
|
|
116
|
+
The adapter never writes to arbitrary state IDs supplied by the backend. A write is executed only when:
|
|
117
|
+
|
|
118
|
+
- the target is part of the server configuration
|
|
119
|
+
- the user selected a datapoint for the target
|
|
120
|
+
- the ioBroker object exists
|
|
121
|
+
- the object is writable
|
|
122
|
+
- the value matches the expected type
|
|
123
|
+
- the configured minimum write interval is respected
|
|
124
|
+
|
|
125
|
+
## States
|
|
126
|
+
|
|
127
|
+
The adapter creates internal states below its instance namespace:
|
|
128
|
+
|
|
129
|
+
- `info.connection`
|
|
130
|
+
- `info.lastSync`
|
|
131
|
+
- `info.lastError`
|
|
132
|
+
- `info.configValid`
|
|
133
|
+
- `info.tokenValid`
|
|
134
|
+
- `info.detectedFeatures`
|
|
135
|
+
- `info.serverConfigVersion`
|
|
136
|
+
- `info.serverConfigRevision`
|
|
137
|
+
- `info.serverConfigLastRequest`
|
|
138
|
+
- `status.backendReachable`
|
|
139
|
+
- `status.lastPayload`
|
|
140
|
+
- `status.lastCommand`
|
|
141
|
+
- `status.lastCommandResult`
|
|
142
|
+
|
|
143
|
+
The adapter token is never written to states.
|
|
144
|
+
|
|
145
|
+
## Security
|
|
146
|
+
|
|
147
|
+
- The adapter token is stored as encrypted and protected native configuration.
|
|
148
|
+
- Tokens are masked in logs.
|
|
149
|
+
- Backend commands use logical targets, not direct ioBroker paths.
|
|
150
|
+
- Writable datapoints must be selected explicitly by the user.
|
|
151
|
+
- Commands are acknowledged to the backend after processing.
|
|
152
|
+
- HTTPS is used for backend communication.
|
|
153
|
+
|
|
154
|
+
## Troubleshooting
|
|
155
|
+
|
|
156
|
+
If telemetry is missing, check the **Datapoints** tab and verify that all required state paths are configured.
|
|
157
|
+
|
|
158
|
+
If the backend connection is not available, check:
|
|
159
|
+
|
|
160
|
+
- `info.connection`
|
|
161
|
+
- `info.tokenValid`
|
|
162
|
+
- `status.backendReachable`
|
|
163
|
+
- `info.lastError`
|
|
164
|
+
- the adapter log in ioBroker Admin
|
|
165
|
+
|
|
166
|
+
If a command is not applied, verify that the selected ioBroker state is writable and that the value type matches the state type.
|
|
167
|
+
|
|
168
|
+
## Changelog
|
|
169
|
+
|
|
170
|
+
### 0.2.0 (2026-05-22)
|
|
171
|
+
|
|
172
|
+
- Initial release of the AI Energy Manager adapter.
|
|
173
|
+
|
|
174
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT License
|
|
179
|
+
|
|
180
|
+
Copyright (c) 2026 Christoph Böhrs
|
|
181
|
+
|
|
182
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
183
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
184
|
+
in the Software without restriction, including without limitation the rights
|
|
185
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
186
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
187
|
+
furnished to do so, subject to the following conditions:
|
|
188
|
+
|
|
189
|
+
The above copyright notice and this permission notice shall be included in all
|
|
190
|
+
copies or substantial portions of the Software.
|
|
191
|
+
|
|
192
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
193
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
194
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
195
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
196
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
197
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
198
|
+
SOFTWARE.
|
|
Binary file
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"../virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomAiEnergyManager__customComponents_js": {
|
|
3
|
+
"file": "customComponents.js",
|
|
4
|
+
"name": "remoteEntry",
|
|
5
|
+
"src": "../virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomAiEnergyManager__customComponents_js",
|
|
6
|
+
"isEntry": true,
|
|
7
|
+
"imports": [
|
|
8
|
+
"_virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"../virtual:mf-exposes:__mfe_internal__ConfigCustomAiEnergyManager__customComponents_js": {
|
|
12
|
+
"file": "assets/virtualExposes-BU4Kt82k.js",
|
|
13
|
+
"name": "virtualExposes",
|
|
14
|
+
"src": "../virtual:mf-exposes:__mfe_internal__ConfigCustomAiEnergyManager__customComponents_js",
|
|
15
|
+
"isEntry": true,
|
|
16
|
+
"imports": [
|
|
17
|
+
"_virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"../virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAiEnergyManager": {
|
|
21
|
+
"file": "assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAiEnergyManager-D_8M5SZg.js",
|
|
22
|
+
"name": "_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAiEnergyManager",
|
|
23
|
+
"src": "../virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAiEnergyManager",
|
|
24
|
+
"isDynamicEntry": true,
|
|
25
|
+
"imports": [
|
|
26
|
+
"_preload-helper-D9f-kLWf.js",
|
|
27
|
+
"_virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js"
|
|
28
|
+
],
|
|
29
|
+
"dynamicImports": [
|
|
30
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js",
|
|
31
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js",
|
|
32
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js",
|
|
33
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
"../virtual:mf:__mfe_internal__ConfigCustomAiEnergyManager__H_A_I__hostAutoInit__H_A_I__.js": {
|
|
37
|
+
"file": "assets/hostInit-CFxXjdei.js",
|
|
38
|
+
"name": "hostInit",
|
|
39
|
+
"src": "../virtual:mf:__mfe_internal__ConfigCustomAiEnergyManager__H_A_I__hostAutoInit__H_A_I__.js",
|
|
40
|
+
"isEntry": true,
|
|
41
|
+
"imports": ["_preload-helper-D9f-kLWf.js"],
|
|
42
|
+
"dynamicImports": [
|
|
43
|
+
"_virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js": {
|
|
47
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js",
|
|
48
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs",
|
|
49
|
+
"imports": ["_rolldown-runtime-BYbx6iT9.js"]
|
|
50
|
+
},
|
|
51
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js": {
|
|
52
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js",
|
|
53
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs",
|
|
54
|
+
"imports": [
|
|
55
|
+
"_rolldown-runtime-BYbx6iT9.js",
|
|
56
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js": {
|
|
60
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js",
|
|
61
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs",
|
|
62
|
+
"imports": [
|
|
63
|
+
"_rolldown-runtime-BYbx6iT9.js",
|
|
64
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js",
|
|
65
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js": {
|
|
69
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js",
|
|
70
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs",
|
|
71
|
+
"imports": [
|
|
72
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js",
|
|
73
|
+
"_rolldown-runtime-BYbx6iT9.js"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"_preload-helper-D9f-kLWf.js": {
|
|
77
|
+
"file": "assets/preload-helper-D9f-kLWf.js",
|
|
78
|
+
"name": "preload-helper"
|
|
79
|
+
},
|
|
80
|
+
"_rolldown-runtime-BYbx6iT9.js": {
|
|
81
|
+
"file": "assets/rolldown-runtime-BYbx6iT9.js",
|
|
82
|
+
"name": "rolldown-runtime"
|
|
83
|
+
},
|
|
84
|
+
"_virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js": {
|
|
85
|
+
"file": "assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js",
|
|
86
|
+
"name": "virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js",
|
|
87
|
+
"imports": ["_preload-helper-D9f-kLWf.js"],
|
|
88
|
+
"dynamicImports": [
|
|
89
|
+
"../virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAiEnergyManager",
|
|
90
|
+
"_virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js",
|
|
91
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js",
|
|
92
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js",
|
|
93
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"_virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js": {
|
|
97
|
+
"file": "assets/virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js",
|
|
98
|
+
"name": "virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js",
|
|
99
|
+
"imports": ["_preload-helper-D9f-kLWf.js"],
|
|
100
|
+
"dynamicImports": ["main.jsx"]
|
|
101
|
+
},
|
|
102
|
+
"index.html": {
|
|
103
|
+
"file": "assets/index-BEY7z3x9.js",
|
|
104
|
+
"name": "index",
|
|
105
|
+
"src": "index.html",
|
|
106
|
+
"isEntry": true,
|
|
107
|
+
"imports": ["main.jsx", "main.jsx"]
|
|
108
|
+
},
|
|
109
|
+
"main.jsx": {
|
|
110
|
+
"file": "assets/main-B8zKNpy9.js",
|
|
111
|
+
"name": "main",
|
|
112
|
+
"src": "main.jsx",
|
|
113
|
+
"isEntry": true,
|
|
114
|
+
"imports": [
|
|
115
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js",
|
|
116
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js",
|
|
117
|
+
"__virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js",
|
|
118
|
+
"_virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js",
|
|
119
|
+
"_virtual_mf-exposes___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-Ct62_K2n.js"
|
|
120
|
+
],
|
|
121
|
+
"css": ["assets/main-C0rS7ABd.css"]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { t as e } from "./preload-helper-D9f-kLWf.js";
|
|
2
|
+
import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAiEnergyManager__customComponents_js-CrBRV5Aj.js";
|
|
3
|
+
var t = {
|
|
4
|
+
"@emotion/react": async () =>
|
|
5
|
+
await e(
|
|
6
|
+
() =>
|
|
7
|
+
import(
|
|
8
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js`
|
|
9
|
+
).then((e) => e.c),
|
|
10
|
+
[],
|
|
11
|
+
import.meta.url,
|
|
12
|
+
),
|
|
13
|
+
"@emotion/styled": async () =>
|
|
14
|
+
await e(
|
|
15
|
+
() =>
|
|
16
|
+
import(
|
|
17
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_styled__loadShare__.mjs-Bjagi3Hs.js`
|
|
18
|
+
).then((e) => e.r),
|
|
19
|
+
[],
|
|
20
|
+
import.meta.url,
|
|
21
|
+
),
|
|
22
|
+
"@iobroker/adapter-react-v5": async () =>
|
|
23
|
+
await e(
|
|
24
|
+
() =>
|
|
25
|
+
import(
|
|
26
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js`
|
|
27
|
+
).then((e) => e.i),
|
|
28
|
+
[],
|
|
29
|
+
import.meta.url,
|
|
30
|
+
),
|
|
31
|
+
"@mui/icons-material": async () =>
|
|
32
|
+
await e(
|
|
33
|
+
() =>
|
|
34
|
+
import(
|
|
35
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js`
|
|
36
|
+
).then((e) => e.s),
|
|
37
|
+
[],
|
|
38
|
+
import.meta.url,
|
|
39
|
+
),
|
|
40
|
+
"@mui/material": async () =>
|
|
41
|
+
await e(
|
|
42
|
+
() =>
|
|
43
|
+
import(
|
|
44
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js`
|
|
45
|
+
).then((e) => e.z),
|
|
46
|
+
[],
|
|
47
|
+
import.meta.url,
|
|
48
|
+
),
|
|
49
|
+
react: async () =>
|
|
50
|
+
await e(
|
|
51
|
+
() =>
|
|
52
|
+
import(
|
|
53
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_emotion_mf_1_react__loadShare__.mjs-C_QoYoiQ.js`
|
|
54
|
+
).then((e) => (e.U(), e.H)),
|
|
55
|
+
[],
|
|
56
|
+
import.meta.url,
|
|
57
|
+
),
|
|
58
|
+
"react-dom": async () =>
|
|
59
|
+
await e(
|
|
60
|
+
() =>
|
|
61
|
+
import(
|
|
62
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js`
|
|
63
|
+
).then((e) => (e.K(), e.G)),
|
|
64
|
+
[],
|
|
65
|
+
import.meta.url,
|
|
66
|
+
),
|
|
67
|
+
"react-dom/client": async () =>
|
|
68
|
+
await e(
|
|
69
|
+
() =>
|
|
70
|
+
import(
|
|
71
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-vzzsfdoZ.js`
|
|
72
|
+
).then((e) => e.n),
|
|
73
|
+
[],
|
|
74
|
+
import.meta.url,
|
|
75
|
+
),
|
|
76
|
+
"react/jsx-runtime": async () =>
|
|
77
|
+
await e(
|
|
78
|
+
() =>
|
|
79
|
+
import(
|
|
80
|
+
`./_virtual_mf___mfe_internal__ConfigCustomAiEnergyManager__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.mjs-Qmea7kmD.js`
|
|
81
|
+
).then((e) => e.H),
|
|
82
|
+
[],
|
|
83
|
+
import.meta.url,
|
|
84
|
+
),
|
|
85
|
+
},
|
|
86
|
+
n = {
|
|
87
|
+
"@emotion/react": {
|
|
88
|
+
name: `@emotion/react`,
|
|
89
|
+
version: `11.14.0`,
|
|
90
|
+
scope: [`default`],
|
|
91
|
+
loaded: !1,
|
|
92
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
93
|
+
async get() {
|
|
94
|
+
n[`@emotion/react`].loaded = !0;
|
|
95
|
+
let { "@emotion/react": e } = t,
|
|
96
|
+
r = { ...(await e()) };
|
|
97
|
+
return (
|
|
98
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
99
|
+
function () {
|
|
100
|
+
return r;
|
|
101
|
+
}
|
|
102
|
+
);
|
|
103
|
+
},
|
|
104
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
105
|
+
},
|
|
106
|
+
"@emotion/styled": {
|
|
107
|
+
name: `@emotion/styled`,
|
|
108
|
+
version: `11.14.1`,
|
|
109
|
+
scope: [`default`],
|
|
110
|
+
loaded: !1,
|
|
111
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
112
|
+
async get() {
|
|
113
|
+
n[`@emotion/styled`].loaded = !0;
|
|
114
|
+
let { "@emotion/styled": e } = t,
|
|
115
|
+
r = { ...(await e()) };
|
|
116
|
+
return (
|
|
117
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
118
|
+
function () {
|
|
119
|
+
return r;
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
},
|
|
123
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
124
|
+
},
|
|
125
|
+
"@iobroker/adapter-react-v5": {
|
|
126
|
+
name: `@iobroker/adapter-react-v5`,
|
|
127
|
+
version: `8.2.2`,
|
|
128
|
+
scope: [`default`],
|
|
129
|
+
loaded: !1,
|
|
130
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
131
|
+
async get() {
|
|
132
|
+
n[`@iobroker/adapter-react-v5`].loaded = !0;
|
|
133
|
+
let { "@iobroker/adapter-react-v5": e } = t,
|
|
134
|
+
r = { ...(await e()) };
|
|
135
|
+
return (
|
|
136
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
137
|
+
function () {
|
|
138
|
+
return r;
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
143
|
+
},
|
|
144
|
+
"@mui/icons-material": {
|
|
145
|
+
name: `@mui/icons-material`,
|
|
146
|
+
version: `6.5.0`,
|
|
147
|
+
scope: [`default`],
|
|
148
|
+
loaded: !1,
|
|
149
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
150
|
+
async get() {
|
|
151
|
+
n[`@mui/icons-material`].loaded = !0;
|
|
152
|
+
let { "@mui/icons-material": e } = t,
|
|
153
|
+
r = { ...(await e()) };
|
|
154
|
+
return (
|
|
155
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
156
|
+
function () {
|
|
157
|
+
return r;
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
},
|
|
161
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
162
|
+
},
|
|
163
|
+
"@mui/material": {
|
|
164
|
+
name: `@mui/material`,
|
|
165
|
+
version: `6.5.0`,
|
|
166
|
+
scope: [`default`],
|
|
167
|
+
loaded: !1,
|
|
168
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
169
|
+
async get() {
|
|
170
|
+
n[`@mui/material`].loaded = !0;
|
|
171
|
+
let { "@mui/material": e } = t,
|
|
172
|
+
r = { ...(await e()) };
|
|
173
|
+
return (
|
|
174
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
175
|
+
function () {
|
|
176
|
+
return r;
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
},
|
|
180
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
181
|
+
},
|
|
182
|
+
react: {
|
|
183
|
+
name: `react`,
|
|
184
|
+
version: `18.3.1`,
|
|
185
|
+
scope: [`default`],
|
|
186
|
+
loaded: !1,
|
|
187
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
188
|
+
async get() {
|
|
189
|
+
n.react.loaded = !0;
|
|
190
|
+
let { react: e } = t,
|
|
191
|
+
r = { ...(await e()) };
|
|
192
|
+
return (
|
|
193
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
194
|
+
function () {
|
|
195
|
+
return r;
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
},
|
|
199
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
200
|
+
},
|
|
201
|
+
"react-dom": {
|
|
202
|
+
name: `react-dom`,
|
|
203
|
+
version: `18.3.1`,
|
|
204
|
+
scope: [`default`],
|
|
205
|
+
loaded: !1,
|
|
206
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
207
|
+
async get() {
|
|
208
|
+
n[`react-dom`].loaded = !0;
|
|
209
|
+
let { "react-dom": e } = t,
|
|
210
|
+
r = { ...(await e()) };
|
|
211
|
+
return (
|
|
212
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
213
|
+
function () {
|
|
214
|
+
return r;
|
|
215
|
+
}
|
|
216
|
+
);
|
|
217
|
+
},
|
|
218
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
219
|
+
},
|
|
220
|
+
"react-dom/client": {
|
|
221
|
+
name: `react-dom/client`,
|
|
222
|
+
version: `18.3.1`,
|
|
223
|
+
scope: [`default`],
|
|
224
|
+
loaded: !1,
|
|
225
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
226
|
+
async get() {
|
|
227
|
+
n[`react-dom/client`].loaded = !0;
|
|
228
|
+
let { "react-dom/client": e } = t,
|
|
229
|
+
r = { ...(await e()) };
|
|
230
|
+
return (
|
|
231
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
232
|
+
function () {
|
|
233
|
+
return r;
|
|
234
|
+
}
|
|
235
|
+
);
|
|
236
|
+
},
|
|
237
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
238
|
+
},
|
|
239
|
+
"react/jsx-runtime": {
|
|
240
|
+
name: `react/jsx-runtime`,
|
|
241
|
+
version: `18.3.1`,
|
|
242
|
+
scope: [`default`],
|
|
243
|
+
loaded: !1,
|
|
244
|
+
from: `__mfe_internal__ConfigCustomAiEnergyManager`,
|
|
245
|
+
async get() {
|
|
246
|
+
n[`react/jsx-runtime`].loaded = !0;
|
|
247
|
+
let { "react/jsx-runtime": e } = t,
|
|
248
|
+
r = { ...(await e()) };
|
|
249
|
+
return (
|
|
250
|
+
Object.defineProperty(r, `__esModule`, { value: !0, enumerable: !1 }),
|
|
251
|
+
function () {
|
|
252
|
+
return r;
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
},
|
|
256
|
+
shareConfig: { singleton: !0, requiredVersion: `*` },
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
r = [];
|
|
260
|
+
export { r as usedRemotes, n as usedShared };
|