src/gridnet/models.py
"""Models for GridNet."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
@dataclass
class SmartBridge:
"""Object representing an SmartBridge response from the device."""
power_flow: int
energy_consumption_total: float
energy_production_total: float
@staticmethod
def from_dict(data: dict[str, Any]) -> SmartBridge:
"""Return SmartBridge object from the API response.
Args:
----
data: Response data from the API.
Returns:
-------
A SmartBridge object.
"""
data = data["elec"]
def convert(value: float) -> float:
"""Convert the unit of measurement.
Args:
----
value: input value.
Returns:
-------
Value in kWh rounded with 1 decimal.
"""
value = value / 1000
return float(round(value, 1))
return SmartBridge(
power_flow=data["power"]["now"].get("value"),
energy_consumption_total=convert(data["import"]["now"].get("value")),
energy_production_total=convert(data["export"]["now"].get("value")),
)
@dataclass
class Device:
"""Object representing an Device response from the device."""
n2g_id: str
model: str
batch: str
firmware: str
hardware: int
manufacturer: str
@staticmethod
def from_dict(data: dict[str, Any]) -> Device:
"""Return Device object from the API response.
Args:
----
data: Response data from the API.
Returns:
-------
A Device object.
"""
return Device(
n2g_id=data["id"],
model=data["model"],
batch=data["batch"],
firmware=data["fw"],
hardware=data["hw"],
manufacturer=data["mf"],
)