made RoonTrigger startup async

This commit is contained in:
2025-04-04 17:57:43 +02:00
parent 83d64453c0
commit d762fe7c1c
4 changed files with 29 additions and 32 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<cpuGovernorAutoAdjust>
<logLevel>Debug</logLevel>
<logLevel>Info</logLevel>
<testMode>true</testMode>
<defaultGovernor>powersave</defaultGovernor>
<statisticsIntervalInSeconds>5</statisticsIntervalInSeconds>
@@ -43,7 +43,7 @@
</trigger>
<trigger>
<name>cpu_load</name>
<logLevel>Debug</logLevel>
<logLevel>Info</logLevel>
<intervalInSeconds>1</intervalInSeconds>
<governor>performance</governor>
<customConfig>
+1 -1
View File
@@ -79,6 +79,6 @@ class GovernorControl(AppClass):
self.log.debug("running governor control")
while True:
if self.current_governor != self.governor:
self.log.debug("governor has changed from %s to %s", self.current_governor, self.governor)
self.log.info("governor has changed from %s to %s", self.current_governor, self.governor)
self._set_governor(self.governor.name)
await asyncio.sleep(1)
+25 -28
View File
@@ -2,26 +2,22 @@ from cpu_governor_auto_adjust.trigger import Trigger
from cpu_governor_auto_adjust.config import Config
from roonapi import RoonApi, RoonDiscovery # type: ignore
from functools import cached_property
from typing import Any, NamedTuple, Union
from typing import Any, NamedTuple, Union, Optional
from pathlib import Path
from importlib.metadata import version
from socket import gethostname
import time
class RoonNotReadyError(Exception):
"""Exception raised when Roon is not ready."""
pass
class RoonServer(NamedTuple):
ip: str
port: str
def __repr__(self) -> str:
return f"RoonServer: ip: {self.ip}, port: {self.port}"
class RoonTrigger(Trigger):
def __init__(self, _config: Config) -> None:
super().__init__(_config)
self.set_status()
self._roonapi.register_state_callback(self.roon_state_callback, "zones_changed")
self.callback_registered = False
def set_status(self) -> None:
zones_state = list()
@@ -71,26 +67,20 @@ class RoonTrigger(Trigger):
self.log.debug('roon token: %s', _token)
return _token
@cached_property
@property
def _discover(self) -> RoonDiscovery:
return RoonDiscovery(self.core_id)
@cached_property
def server(self) -> RoonServer:
_server = self._discover.first()
assert isinstance(_server, tuple) and len(_server) == 2, "failed to discover roon server"
while _server[0] is None:
_server = self._discover.first()
self.log.warning("roon not ready (yet)")
time.sleep(1)
self._discover.stop()
roon_server = RoonServer(_server[0], _server[1])
self.log.info("found %s", roon_server)
return roon_server
@cached_property
def _roonapi(self) -> RoonApi:
_roonapi = RoonApi(self.appinfo, self.token, self.server.ip, self.server.port, True)
self.log.info("discovering roon server...")
server = self._discover.first()
assert isinstance(server, tuple) and len(server) == 2, "failed to discover roon server"
self._discover.stop()
if server[0] is None or server[1] is None:
raise RoonNotReadyError("Roon is not ready")
self.log.info("Roon server found: %s:%s", server[0], server[1])
_roonapi = RoonApi(self.appinfo, self.token, server[0], server[1], True)
return _roonapi
def roon_state_callback(self, event: str, changed_ids: Union[str, list[str]]) -> None:
@@ -101,5 +91,12 @@ class RoonTrigger(Trigger):
self.set_status()
def trigger_code(self) -> None:
# this check works with the callback function of roonapi
pass
if not self.callback_registered:
try:
self._roonapi.register_state_callback(self.roon_state_callback, "zones_changed")
self.callback_registered = True
self.set_status()
self.log.info("Roon callback registered")
except RoonNotReadyError:
self.log.warning("Roon is not ready yet, retrying after %s second(s)...", self.config.interval_in_seconds)
return
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "cpu_governor_auto_adjust"
version = "0.5.19"
version = "0.5.21"
description = "This application has been developed to automatically change cpu governor based on certain triggers."
authors = [
{ name = "Martin Reurekas", email = "martin@semrks.nl" }