made RoonTrigger startup async
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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" }
|
||||
|
||||
Reference in New Issue
Block a user