flickerstrip-py/flickerstrip_py/status.py

76 lines
2.7 KiB
Python

from .pattern import PatternMeta
class MemoryUsage:
def __init__(self, used: int, free: int, total: int):
self.used: int = used
self.free: int = free
self.total: int = total
def to_json(self):
return {
"used": self.used, "free": self.free, "total": self.total
}
@classmethod
def from_json(cls, json):
return cls(json["used"], json["free"], json["total"])
class Status:
def __init__(
self, ap: int, name: str, group: str, firmware: str, power: bool,
mac: str, selectedPattern: int, brightness: int, length: int,
start: int, end: int, fade: int, isReversed: bool, cycle: int,
uptime: int, memory: MemoryUsage, patterns: list[PatternMeta]
):
self.ap: int = ap
self.name: str = name
self.group: str = group
self.firmware: str = firmware
self.power: bool = power
self.mac: str = mac
self.selectedPattern: int = selectedPattern
self.brightness: int = brightness
self.length: int = length
self.start: int = start
self.end: int = end
self.fade: int = fade
self.isReversed: bool = isReversed
self.cycle: int = cycle
self.uptime: int = uptime
self.memory: MemoryUsage = memory
self.patterns: list[PatternMeta] = patterns
def get_current_pattern(self) -> PatternMeta | None:
return self.get_pattern_by_id(self.selectedPattern)
def get_pattern_by_id(self, id: int) -> PatternMeta | None:
for pattern in self.patterns:
if pattern.id == id:
return pattern
return None
def to_json(self):
return {
"ap": self.ap, "name": self.name, "group": self.group,
"firmware": self.firmware, "power": 1 if self.power else 0,
"mac": self.mac, "selectedPattern": self.selectedPattern,
"brightness": self.brightness, "length": self.length,
"start": self.start, "end": self.end, "fade": self.fade,
"reversed": 1 if self.isReversed else 0, "cycle": self.cycle,
"uptime": self.uptime, "memory": self.memory.to_json(),
"patterns": [p.to_json() for p in self.patterns]
}
@classmethod
def from_json(cls, json):
return cls(
json["ap"], json["name"], json["group"], json["firmware"],
json["power"] == 1, json["mac"], json["selectedPattern"],
json["brightness"], json["length"], json["start"], json["end"],
json["fade"], json["reversed"] == 1, json["cycle"],
json["uptime"], MemoryUsage.from_json(json["memory"]),
[PatternMeta.from_json(p) for p in json["patterns"]]
)