made RoonTrigger startup async
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<cpuGovernorAutoAdjust>
|
<cpuGovernorAutoAdjust>
|
||||||
<logLevel>Debug</logLevel>
|
<logLevel>Info</logLevel>
|
||||||
<testMode>true</testMode>
|
<testMode>true</testMode>
|
||||||
<defaultGovernor>powersave</defaultGovernor>
|
<defaultGovernor>powersave</defaultGovernor>
|
||||||
<statisticsIntervalInSeconds>5</statisticsIntervalInSeconds>
|
<statisticsIntervalInSeconds>5</statisticsIntervalInSeconds>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
</trigger>
|
</trigger>
|
||||||
<trigger>
|
<trigger>
|
||||||
<name>cpu_load</name>
|
<name>cpu_load</name>
|
||||||
<logLevel>Debug</logLevel>
|
<logLevel>Info</logLevel>
|
||||||
<intervalInSeconds>1</intervalInSeconds>
|
<intervalInSeconds>1</intervalInSeconds>
|
||||||
<governor>performance</governor>
|
<governor>performance</governor>
|
||||||
<customConfig>
|
<customConfig>
|
||||||
|
|||||||
@@ -79,6 +79,6 @@ class GovernorControl(AppClass):
|
|||||||
self.log.debug("running governor control")
|
self.log.debug("running governor control")
|
||||||
while True:
|
while True:
|
||||||
if self.current_governor != self.governor:
|
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)
|
self._set_governor(self.governor.name)
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|||||||
@@ -2,26 +2,22 @@ from cpu_governor_auto_adjust.trigger import Trigger
|
|||||||
from cpu_governor_auto_adjust.config import Config
|
from cpu_governor_auto_adjust.config import Config
|
||||||
from roonapi import RoonApi, RoonDiscovery # type: ignore
|
from roonapi import RoonApi, RoonDiscovery # type: ignore
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Any, NamedTuple, Union
|
from typing import Any, NamedTuple, Union, Optional
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from importlib.metadata import version
|
from importlib.metadata import version
|
||||||
from socket import gethostname
|
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):
|
class RoonTrigger(Trigger):
|
||||||
def __init__(self, _config: Config) -> None:
|
def __init__(self, _config: Config) -> None:
|
||||||
super().__init__(_config)
|
super().__init__(_config)
|
||||||
self.set_status()
|
self.callback_registered = False
|
||||||
self._roonapi.register_state_callback(self.roon_state_callback, "zones_changed")
|
|
||||||
|
|
||||||
def set_status(self) -> None:
|
def set_status(self) -> None:
|
||||||
zones_state = list()
|
zones_state = list()
|
||||||
|
|
||||||
@@ -71,26 +67,20 @@ class RoonTrigger(Trigger):
|
|||||||
self.log.debug('roon token: %s', _token)
|
self.log.debug('roon token: %s', _token)
|
||||||
return _token
|
return _token
|
||||||
|
|
||||||
@cached_property
|
@property
|
||||||
def _discover(self) -> RoonDiscovery:
|
def _discover(self) -> RoonDiscovery:
|
||||||
return RoonDiscovery(self.core_id)
|
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
|
@cached_property
|
||||||
def _roonapi(self) -> RoonApi:
|
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
|
return _roonapi
|
||||||
|
|
||||||
def roon_state_callback(self, event: str, changed_ids: Union[str, list[str]]) -> None:
|
def roon_state_callback(self, event: str, changed_ids: Union[str, list[str]]) -> None:
|
||||||
@@ -101,5 +91,12 @@ class RoonTrigger(Trigger):
|
|||||||
self.set_status()
|
self.set_status()
|
||||||
|
|
||||||
def trigger_code(self) -> None:
|
def trigger_code(self) -> None:
|
||||||
# this check works with the callback function of roonapi
|
if not self.callback_registered:
|
||||||
pass
|
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
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "cpu_governor_auto_adjust"
|
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."
|
description = "This application has been developed to automatically change cpu governor based on certain triggers."
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "Martin Reurekas", email = "martin@semrks.nl" }
|
{ name = "Martin Reurekas", email = "martin@semrks.nl" }
|
||||||
|
|||||||
Reference in New Issue
Block a user