boneIO 0.9.0.dev3__tar.gz → 0.9.0.dev5__tar.gz
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.
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/PKG-INFO +2 -2
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/config.py +8 -2
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/yaml_util.py +36 -3
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sensor.py +1 -1
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/runner.py +3 -1
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/schema.yaml +5 -2
- boneio-0.9.0.dev5/boneio/version.py +2 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/webui/app.py +14 -2
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/css.worker-YzWC8yAR.js +84 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/editor.worker-D5ngByhL.js +12 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/html.worker-D5NPIcdM.js +461 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/index-ONryNrjG.js +72 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/index-gnyFMRqm.css +1 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/json.worker-F0ZGA5Zk.js +49 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/assets/ts.worker-BSchkg-h.js +51334 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/boneio.svg +1 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/boneio_fav.svg +40 -0
- boneio-0.9.0.dev5/boneio/webui/frontend-dist/index.html +14 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/webui/web_server.py +4 -1
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/pyproject.toml +2 -2
- boneIO-0.9.0.dev3/boneio/version.py +0 -2
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/LICENSE +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/README.md +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/boards/0.8/input.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/bonecli.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/const.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/cover.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/adc.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/binary_sensor.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/binary_sensor_v_0_7.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/config.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/cover.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/event.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/event_all.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/event_v_0_7.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/led32x4A.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/output24x16A.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/output24x16A_v0.3.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/output32x10A.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/example_config/output32x5A.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/fonts/danube__.ttf +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/group/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/group/output.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/async_updater.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/click_timer.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/events.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/exceptions.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/filter.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/gpio.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/gpiod.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/ha_discovery.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/loader.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/logger.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/message_bus.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/mqtt.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/oled.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/onewire/W1ThermSensor.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/onewire/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/onewire/ds2482.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/onewire/onewire.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/pcf8575.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/queue.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/sensor/ina_219_smbus.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/state_manager.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/stats.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/timeperiod.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/helper/util.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/input/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/input/gpio.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/input/gpio_new.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/manager.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/client.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/cwt.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/dts1964_3f.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/liquid-sensor.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/modbuscli.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/orno-or-we-517.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/pt100.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/r4dcb08.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sdm120.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sdm630.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sht20.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sht30.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/single_sensor.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/socomec_e03.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/socomec_e23.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/sofar.json +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/modbus/utils.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/models/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/models/files.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/models/logs.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/mqtt_client.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/oled.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/basic.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/gpio.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/mcp.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/pca.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/relay/pcf.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/actions.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/actions_sensor.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/actions_switch.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/filters.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/filters_adc.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/id.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/temp_unit.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/schema/update_interval.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/adc.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/gpio.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/gpio_new.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/ina219.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/temp/__init__.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/temp/dallas.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/temp/lm75.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/sensor/temp/mcp9808.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/boneio/webui/websocket_manager.py +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/tests/32_5_config.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/tests/bandit.yaml +0 -0
- {boneIO-0.9.0.dev3 → boneio-0.9.0.dev5}/tests/relay_32_5.py +0 -0
|
@@ -22,11 +22,13 @@ from boneio.const import (
|
|
|
22
22
|
class ConfigHelper:
|
|
23
23
|
def __init__(
|
|
24
24
|
self,
|
|
25
|
-
topic_prefix: str
|
|
25
|
+
topic_prefix: str,
|
|
26
|
+
name: str = BONEIO,
|
|
26
27
|
ha_discovery: bool = True,
|
|
27
28
|
ha_discovery_prefix: str = HOMEASSISTANT,
|
|
28
29
|
):
|
|
29
|
-
self.
|
|
30
|
+
self._name = name
|
|
31
|
+
self._topic_prefix = topic_prefix if topic_prefix else name
|
|
30
32
|
self._ha_discovery = ha_discovery
|
|
31
33
|
self._ha_discovery_prefix = ha_discovery_prefix
|
|
32
34
|
self._fetch_old_discovery = None
|
|
@@ -45,6 +47,10 @@ class ConfigHelper:
|
|
|
45
47
|
def topic_prefix(self) -> str:
|
|
46
48
|
return self._topic_prefix
|
|
47
49
|
|
|
50
|
+
@property
|
|
51
|
+
def name(self) -> str:
|
|
52
|
+
return self._name
|
|
53
|
+
|
|
48
54
|
@property
|
|
49
55
|
def ha_discovery(self) -> bool:
|
|
50
56
|
return self._ha_discovery
|
|
@@ -180,16 +180,49 @@ def get_board_config_path(board_name: str, version: str) -> str:
|
|
|
180
180
|
)
|
|
181
181
|
|
|
182
182
|
|
|
183
|
+
def normalize_board_name(name: str) -> str:
|
|
184
|
+
"""Normalize board name to a standard format.
|
|
185
|
+
|
|
186
|
+
Examples:
|
|
187
|
+
32x10a, 32x10A, 32 -> 32_10
|
|
188
|
+
cover -> cover
|
|
189
|
+
cover mix, cm -> cover_mix
|
|
190
|
+
24x16A, 24x16, 24 -> 24_16
|
|
191
|
+
"""
|
|
192
|
+
if not name:
|
|
193
|
+
return name
|
|
194
|
+
|
|
195
|
+
name = name.lower().strip()
|
|
196
|
+
|
|
197
|
+
# Handle cover mix variations
|
|
198
|
+
if name in ('cm', 'cover mix', 'covermix', "cover_mix"):
|
|
199
|
+
return 'cover_mix'
|
|
200
|
+
|
|
201
|
+
# Handle simple cover case
|
|
202
|
+
if name == 'cover':
|
|
203
|
+
return 'cover'
|
|
204
|
+
|
|
205
|
+
# Handle 32x10A variations
|
|
206
|
+
if name.startswith('32'):
|
|
207
|
+
return '32_10'
|
|
208
|
+
|
|
209
|
+
# Handle 24x16A variations
|
|
210
|
+
if name.startswith('24'):
|
|
211
|
+
return '24_16'
|
|
212
|
+
|
|
213
|
+
return name
|
|
214
|
+
|
|
215
|
+
|
|
183
216
|
def merge_board_config(config: dict) -> dict:
|
|
184
217
|
"""Merge predefined board configuration with user config."""
|
|
185
|
-
if not config.get("boneio", {}).get("
|
|
218
|
+
if not config.get("boneio", {}).get("device_type"):
|
|
186
219
|
return config
|
|
187
220
|
|
|
188
|
-
board_name = config["boneio"]["
|
|
221
|
+
board_name = normalize_board_name(config["boneio"]["device_type"])
|
|
189
222
|
version = config["boneio"]["version"]
|
|
190
223
|
|
|
191
224
|
try:
|
|
192
|
-
board_file = get_board_config_path(board_name, version)
|
|
225
|
+
board_file = get_board_config_path(f"output_{board_name}", version)
|
|
193
226
|
input_file = get_board_config_path("input", version)
|
|
194
227
|
board_config = load_yaml_file(board_file)
|
|
195
228
|
input_config = load_yaml_file(input_file)
|
|
@@ -243,7 +243,7 @@ class ModbusSensor(BasicMqtt, AsyncUpdater, Filter):
|
|
|
243
243
|
id=sensor.id,
|
|
244
244
|
name=sensor.name,
|
|
245
245
|
state=sensor.state,
|
|
246
|
-
|
|
246
|
+
unit=sensor.unit_of_measurement,
|
|
247
247
|
timestamp=sensor.last_timestamp,
|
|
248
248
|
),
|
|
249
249
|
)
|
|
@@ -83,7 +83,8 @@ async def async_run(
|
|
|
83
83
|
|
|
84
84
|
main_config = config.get(BONEIO, {})
|
|
85
85
|
_config_helper = ConfigHelper(
|
|
86
|
-
|
|
86
|
+
name=main_config.get(NAME, BONEIO),
|
|
87
|
+
topic_prefix=config.get(MQTT, {}).get(TOPIC_PREFIX, None),
|
|
87
88
|
ha_discovery=config.get(MQTT, {}).get(HA_DISCOVERY, {}).get(ENABLED, False),
|
|
88
89
|
ha_discovery_prefix=config.get(MQTT, {}).get(HA_DISCOVERY, {}).get(TOPIC_PREFIX, "homeassistant"),
|
|
89
90
|
)
|
|
@@ -146,6 +147,7 @@ async def async_run(
|
|
|
146
147
|
_LOGGER.info("Starting Web server.")
|
|
147
148
|
web_server = WebServer(
|
|
148
149
|
config_file=config_file,
|
|
150
|
+
config_helper=_config_helper,
|
|
149
151
|
manager=manager,
|
|
150
152
|
port=web_config.get("port", 8090),
|
|
151
153
|
auth=web_config.get("auth", {}),
|
|
@@ -906,8 +906,11 @@ boneio:
|
|
|
906
906
|
required: False
|
|
907
907
|
meta:
|
|
908
908
|
label: BoneIO Black Hardware version
|
|
909
|
-
|
|
909
|
+
device_type:
|
|
910
910
|
type: string
|
|
911
911
|
required: False
|
|
912
|
+
coerce:
|
|
913
|
+
- str
|
|
914
|
+
- lower
|
|
912
915
|
meta:
|
|
913
|
-
label: Predefined
|
|
916
|
+
label: Predefined device type configuration
|
|
@@ -31,6 +31,7 @@ from starlette.responses import JSONResponse
|
|
|
31
31
|
from starlette.types import Receive, Scope, Send
|
|
32
32
|
from starlette.websockets import WebSocketState
|
|
33
33
|
|
|
34
|
+
from boneio.helper.config import ConfigHelper
|
|
34
35
|
from boneio.helper.events import GracefulExit
|
|
35
36
|
from boneio.manager import Manager
|
|
36
37
|
from boneio.models import (
|
|
@@ -121,6 +122,10 @@ def get_manager():
|
|
|
121
122
|
"""Get manager instance."""
|
|
122
123
|
return app.state.manager
|
|
123
124
|
|
|
125
|
+
def get_config_helper():
|
|
126
|
+
"""Get config helper instance."""
|
|
127
|
+
return app.state.config_helper
|
|
128
|
+
|
|
124
129
|
|
|
125
130
|
# Add auth required endpoint
|
|
126
131
|
@app.get("/api/auth/required")
|
|
@@ -457,7 +462,7 @@ async def toggle_output(output_id: str, manager: Manager = Depends(get_manager))
|
|
|
457
462
|
|
|
458
463
|
|
|
459
464
|
@app.post("/api/restart")
|
|
460
|
-
async def restart_service(background_tasks: BackgroundTasks
|
|
465
|
+
async def restart_service(background_tasks: BackgroundTasks):
|
|
461
466
|
"""Restart the BoneIO service."""
|
|
462
467
|
if not is_running_as_service():
|
|
463
468
|
return {"status": "not available"}
|
|
@@ -477,6 +482,11 @@ async def get_version():
|
|
|
477
482
|
"""Get application version."""
|
|
478
483
|
return {"version": __version__}
|
|
479
484
|
|
|
485
|
+
@app.get("/api/name")
|
|
486
|
+
async def get_name(config_helper: ConfigHelper = Depends(get_config_helper)):
|
|
487
|
+
"""Get application version."""
|
|
488
|
+
return {"name": config_helper.name}
|
|
489
|
+
|
|
480
490
|
|
|
481
491
|
@app.get("/api/files")
|
|
482
492
|
async def list_files(path: str = None):
|
|
@@ -594,6 +604,7 @@ async def modbus_sensor_state_changed(event: SensorState):
|
|
|
594
604
|
def init_app(
|
|
595
605
|
manager: Manager,
|
|
596
606
|
yaml_config_file: str,
|
|
607
|
+
config_helper: ConfigHelper,
|
|
597
608
|
auth_config: dict = {},
|
|
598
609
|
jwt_secret: str = None,
|
|
599
610
|
web_server = None,
|
|
@@ -611,6 +622,7 @@ def init_app(
|
|
|
611
622
|
app.state.auth_config = auth_config
|
|
612
623
|
app.state.yaml_config_file = yaml_config_file
|
|
613
624
|
app.state.web_server = web_server
|
|
625
|
+
app.state.config_helper = config_helper
|
|
614
626
|
app.state.websocket_manager = WebSocketManager(
|
|
615
627
|
jwt_secret=jwt_secret,
|
|
616
628
|
auth_required=bool(auth_config)
|
|
@@ -857,7 +869,7 @@ async def websocket_endpoint(
|
|
|
857
869
|
# _LOGGER.error(f"Error during WebSocket cleanup: {type(e).__name__} - {e}")
|
|
858
870
|
|
|
859
871
|
# Static files setup
|
|
860
|
-
FRONTEND_DIR = Path(__file__).parent
|
|
872
|
+
FRONTEND_DIR = Path(__file__).parent / "frontend-dist"
|
|
861
873
|
|
|
862
874
|
|
|
863
875
|
if FRONTEND_DIR.exists():
|