Loading noctua/api/__init__.py +6 −3 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ from noctua.api.basecontext import ends, resource_registry, config_path from noctua.utils.logger import log from .blocks import blocks_api from .defaults import defaults_api from .sequencer import sequencer_api from .sequencer import sequencer_api, BobRun api_blueprint = Blueprint('api', __name__) Loading @@ -30,13 +30,16 @@ api_blueprint.register_blueprint(sequencer_api, url_prefix='/sequencer') # # Uncomment to test dependecy errors # resource_registry = {} resource_registry['/sequencer/run'] = BobRun(seq) def dynamic_import(url_path): """ Import and register resources from api.ini with debug logging of supported methods. """ try: if url_path.startswith(("/blocks", "/sequencer")): if url_path.startswith(("/blocks", "/templates", "/sequencer")): return dev = getattr(devices, ends.get(url_path,"device")) # devices.light instance Loading Loading @@ -64,5 +67,5 @@ def dynamic_import(url_path): # Load all routes from ini for section in ends.sections(): if not section.startswith(("/blocks", "/sequencer")): if not section.startswith(("/blocks", "/templates", "/sequencer")): dynamic_import(section) noctua/api/sequencer.py +0 −1 Original line number Diff line number Diff line Loading @@ -102,4 +102,3 @@ class BobRun(BaseResource): # --- ROUTING RULES --- sequencer_api.add_url_rule('/run', view_func=BobRun.as_view('bob_run', dev=seq)) noctua/web/__init__.py +5 −1 Original line number Diff line number Diff line Loading @@ -64,14 +64,18 @@ async def start_background_tasks(): # subsystems subsystems = set() subsystems.add("sequencer") for section in ends.sections(): parts = section.strip('/').split('/') if parts: subsystems.add(parts[0]) print("---") for subsys in subsystems: if subsys not in ("blocks", "sequencer", "templates"): if subsys not in ("blocks", "templates"): asyncio.create_task(streamer.subsystem_poll_loop(subsys)) print(subsys) print("---") @web_blueprint.websocket('/socket') Loading noctua/web/static/js/status-stream.js +3 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,9 @@ document.addEventListener('DOMContentLoaded', () => { document.addEventListener('noctua-telemetry', (event) => { const msg = event.detail; console.log(msg) if (!msg || !msg.name.startsWith('all-')) return; const subsystem = msg.name.replace('all-', ''); Loading noctua/web/stream.py +6 −3 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ class StreamManager: subsystem : str The subsystem name (e.g. ``'camera'``, ``'dome'``). """ log.debug(subsystem) while True: subsys_data = {} Loading @@ -177,7 +177,7 @@ class StreamManager: if not hasattr(instance, "get"): continue # Salta le risorse immagine per non bloccare la telemetria json # Avoid images if "snapshot" in path: continue Loading @@ -190,9 +190,12 @@ class StreamManager: data = res[0] if isinstance(res, tuple) else res device_name = path.split('/')[-1] subsys_data[device_name] = data except Exception as e: pass if subsys_data and self.last_states.get(subsystem) != subsys_data: await self.broadcaster.broadcast(f"all-{subsystem}", subsys_data) self.last_states[subsystem] = subsys_data Loading Loading
noctua/api/__init__.py +6 −3 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ from noctua.api.basecontext import ends, resource_registry, config_path from noctua.utils.logger import log from .blocks import blocks_api from .defaults import defaults_api from .sequencer import sequencer_api from .sequencer import sequencer_api, BobRun api_blueprint = Blueprint('api', __name__) Loading @@ -30,13 +30,16 @@ api_blueprint.register_blueprint(sequencer_api, url_prefix='/sequencer') # # Uncomment to test dependecy errors # resource_registry = {} resource_registry['/sequencer/run'] = BobRun(seq) def dynamic_import(url_path): """ Import and register resources from api.ini with debug logging of supported methods. """ try: if url_path.startswith(("/blocks", "/sequencer")): if url_path.startswith(("/blocks", "/templates", "/sequencer")): return dev = getattr(devices, ends.get(url_path,"device")) # devices.light instance Loading Loading @@ -64,5 +67,5 @@ def dynamic_import(url_path): # Load all routes from ini for section in ends.sections(): if not section.startswith(("/blocks", "/sequencer")): if not section.startswith(("/blocks", "/templates", "/sequencer")): dynamic_import(section)
noctua/api/sequencer.py +0 −1 Original line number Diff line number Diff line Loading @@ -102,4 +102,3 @@ class BobRun(BaseResource): # --- ROUTING RULES --- sequencer_api.add_url_rule('/run', view_func=BobRun.as_view('bob_run', dev=seq))
noctua/web/__init__.py +5 −1 Original line number Diff line number Diff line Loading @@ -64,14 +64,18 @@ async def start_background_tasks(): # subsystems subsystems = set() subsystems.add("sequencer") for section in ends.sections(): parts = section.strip('/').split('/') if parts: subsystems.add(parts[0]) print("---") for subsys in subsystems: if subsys not in ("blocks", "sequencer", "templates"): if subsys not in ("blocks", "templates"): asyncio.create_task(streamer.subsystem_poll_loop(subsys)) print(subsys) print("---") @web_blueprint.websocket('/socket') Loading
noctua/web/static/js/status-stream.js +3 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,9 @@ document.addEventListener('DOMContentLoaded', () => { document.addEventListener('noctua-telemetry', (event) => { const msg = event.detail; console.log(msg) if (!msg || !msg.name.startsWith('all-')) return; const subsystem = msg.name.replace('all-', ''); Loading
noctua/web/stream.py +6 −3 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ class StreamManager: subsystem : str The subsystem name (e.g. ``'camera'``, ``'dome'``). """ log.debug(subsystem) while True: subsys_data = {} Loading @@ -177,7 +177,7 @@ class StreamManager: if not hasattr(instance, "get"): continue # Salta le risorse immagine per non bloccare la telemetria json # Avoid images if "snapshot" in path: continue Loading @@ -190,9 +190,12 @@ class StreamManager: data = res[0] if isinstance(res, tuple) else res device_name = path.split('/')[-1] subsys_data[device_name] = data except Exception as e: pass if subsys_data and self.last_states.get(subsystem) != subsys_data: await self.broadcaster.broadcast(f"all-{subsystem}", subsys_data) self.last_states[subsystem] = subsys_data Loading