Erster Stand der Hintergrundprozesse, die auf der Synology unter /volume1/homes/wagner/SolarManager laufen: der Manager selbst, die Sammler je Geraet, die MQTT-Bruecke, der Wecker und - neu hinzugezogen - der AutoAction-Runner, der als Hintergrundprozess hierher gehoert und nicht ins Web-Verzeichnis. Zugangsdaten stehen nicht mehr im Quelltext, sondern in config.ini, die nicht mit eingecheckt wird. Vorlage ist config.ini.example, gelesen wird sie von konfig.py. Betroffen waren solarManager.py (Datenbank und Wattpilot), zeit.py, gatherWaterData.py, wecker.py und skoda_testdaten.py, das sich das Passwort bisher aus dem Quelltext eines anderen Moduls herausgesucht hat. Die Kia-Anbindung ist mit dem Fahrzeug entfallen: kiaTest.py, gatherCarData.py und hyundai_kia_connect_api sind nicht mehr dabei, ebenso gatherInverterData.py, auf das nur noch eine auskommentierte Zeile zeigte. Die mitgelieferten Bibliotheken bleiben im Repository - die NAS hat kein pip, sie muessen neben den Skripten liegen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
134 lines
3.2 KiB
Python
134 lines
3.2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import List, Optional, Sequence, Tuple
|
|
|
|
from .. import frames
|
|
from ..typing import ExtensionName, ExtensionParameter
|
|
|
|
|
|
__all__ = ["Extension", "ClientExtensionFactory", "ServerExtensionFactory"]
|
|
|
|
|
|
class Extension:
|
|
"""
|
|
Base class for extensions.
|
|
|
|
"""
|
|
|
|
name: ExtensionName
|
|
"""Extension identifier."""
|
|
|
|
def decode(
|
|
self,
|
|
frame: frames.Frame,
|
|
*,
|
|
max_size: Optional[int] = None,
|
|
) -> frames.Frame:
|
|
"""
|
|
Decode an incoming frame.
|
|
|
|
Args:
|
|
frame (Frame): incoming frame.
|
|
max_size: maximum payload size in bytes.
|
|
|
|
Returns:
|
|
Frame: Decoded frame.
|
|
|
|
Raises:
|
|
PayloadTooBig: if decoding the payload exceeds ``max_size``.
|
|
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def encode(self, frame: frames.Frame) -> frames.Frame:
|
|
"""
|
|
Encode an outgoing frame.
|
|
|
|
Args:
|
|
frame (Frame): outgoing frame.
|
|
|
|
Returns:
|
|
Frame: Encoded frame.
|
|
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
class ClientExtensionFactory:
|
|
"""
|
|
Base class for client-side extension factories.
|
|
|
|
"""
|
|
|
|
name: ExtensionName
|
|
"""Extension identifier."""
|
|
|
|
def get_request_params(self) -> List[ExtensionParameter]:
|
|
"""
|
|
Build parameters to send to the server for this extension.
|
|
|
|
Returns:
|
|
List[ExtensionParameter]: Parameters to send to the server.
|
|
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def process_response_params(
|
|
self,
|
|
params: Sequence[ExtensionParameter],
|
|
accepted_extensions: Sequence[Extension],
|
|
) -> Extension:
|
|
"""
|
|
Process parameters received from the server.
|
|
|
|
Args:
|
|
params (Sequence[ExtensionParameter]): parameters received from
|
|
the server for this extension.
|
|
accepted_extensions (Sequence[Extension]): list of previously
|
|
accepted extensions.
|
|
|
|
Returns:
|
|
Extension: An extension instance.
|
|
|
|
Raises:
|
|
NegotiationError: if parameters aren't acceptable.
|
|
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
class ServerExtensionFactory:
|
|
"""
|
|
Base class for server-side extension factories.
|
|
|
|
"""
|
|
|
|
name: ExtensionName
|
|
"""Extension identifier."""
|
|
|
|
def process_request_params(
|
|
self,
|
|
params: Sequence[ExtensionParameter],
|
|
accepted_extensions: Sequence[Extension],
|
|
) -> Tuple[List[ExtensionParameter], Extension]:
|
|
"""
|
|
Process parameters received from the client.
|
|
|
|
Args:
|
|
params (Sequence[ExtensionParameter]): parameters received from
|
|
the client for this extension.
|
|
accepted_extensions (Sequence[Extension]): list of previously
|
|
accepted extensions.
|
|
|
|
Returns:
|
|
Tuple[List[ExtensionParameter], Extension]: To accept the offer,
|
|
parameters to send to the client for this extension and an
|
|
extension instance.
|
|
|
|
Raises:
|
|
NegotiationError: to reject the offer, if parameters received from
|
|
the client aren't acceptable.
|
|
|
|
"""
|
|
raise NotImplementedError
|