Skip to content

Commit

Permalink
Merge pull request #12 from tj0vtj0v/feat/11-replace-hardcoded-values
Browse files Browse the repository at this point in the history
replace most values with instance_vars
  • Loading branch information
tj0vtj0v authored Mar 14, 2024
2 parents 09b60a2 + 5dac91c commit bcb8680
Showing 1 changed file with 37 additions and 19 deletions.
56 changes: 37 additions & 19 deletions WLedController.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json
import math
import sys
from datetime import datetime
from enum import Enum

Expand All @@ -25,11 +26,24 @@ class NightlightMode(Enum):


class WLedController:
_api_url: str
_json_url: str
_log: bool
_MIN_BYTE: int
_MAX_BYTE: int
_MAX_TWO_BYTE: int
_MAX_FX: int

def __init__(self, wled_socket: str, log: bool = True) -> None:
self.api_url = f"http://{wled_socket}/"
self.json_url = self.api_url + "json/"
self._api_url = f"http://{wled_socket}/"
self._json_url = self._api_url + "json/"
self._log = log

self._MIN_BYTE = 0
self._MAX_BYTE = 255
self._MAX_TWO_BYTE = 65535
self._MAX_FX = 117

try:
self.get_status()
except:
Expand Down Expand Up @@ -64,19 +78,19 @@ def deactivate_log(self) -> None:

# get requests
def get_version(self) -> int:
return int(self._get_request(self.api_url + "version").text)
return int(self._get_request(self._api_url + "version").text)

def get_free_heap(self) -> int:
return int(self._get_request(self.api_url + "freeheap").text)
return int(self._get_request(self._api_url + "freeheap").text)

def get_uptime(self) -> int:
return int(self._get_request(self.api_url + "uptime").text)
return int(self._get_request(self._api_url + "uptime").text)

def get_timer(self) -> int:
return self.get_status(Specifier.state, "nl")["rem"]

def get_status(self, specification: Specifier = Specifier.none, main_key: str = None) -> dict[str: dict[str: any]]:
response = self._get_request(self.json_url + specification.value).json()
response = self._get_request(self._json_url + specification.value).json()
if main_key:
try:
return response[main_key]
Expand All @@ -87,7 +101,7 @@ def get_status(self, specification: Specifier = Specifier.none, main_key: str =

# nonparametric functions
def reboot(self) -> int:
return self._get_request(self.api_url + "reset").status_code
return self._get_request(self._api_url + "reset").status_code

def activate(self) -> None:
self.set_arguments(self._build_data(("on", "true")))
Expand All @@ -113,7 +127,7 @@ def deactivate_live(self) -> None:
# parametric functions
def set_arguments(self, arguments: str) -> None:
try:
status = list(json.loads(self._post_request(self.json_url, arguments).text))[0]
status = list(json.loads(self._post_request(self._json_url, arguments).text))[0]

if self._log:
self._logging(f"{arguments} --> {status}")
Expand All @@ -128,16 +142,16 @@ def set_arguments(self, arguments: str) -> None:
raise Exception(f"'{arguments}' resulted in an Error.")

def set_brightness(self, brightness: int) -> None:
if brightness < 0 or brightness > 255:
if brightness < self._MIN_BYTE or brightness > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(brightness)

self.set_arguments(self._build_data(("bri", brightness)))

def set_transition(self, milliseconds: int) -> None:
milliseconds = milliseconds / 100

if milliseconds < 0 or milliseconds > 65535:
raise exceptions.ValueOutOfBoundsException(milliseconds, stop=65535)
if milliseconds < self._MIN_BYTE or milliseconds > self._MAX_TWO_BYTE:
raise exceptions.ValueOutOfBoundsException(milliseconds, stop=self._MAX_TWO_BYTE)

self.set_arguments(self._build_data(("transition", math.floor(milliseconds))))

Expand All @@ -148,7 +162,7 @@ def set_preset(self, preset: int) -> None:
self.set_arguments(self._build_data(("ps", preset)))

def set_timer(self, minutes: int) -> None:
if minutes < 0 or minutes > 255:
if minutes < self._MIN_BYTE or minutes > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(minutes)

self.set_arguments(self._build_data(("nl.dur", minutes)))
Expand All @@ -157,32 +171,36 @@ def set_timer_mode(self, mode: NightlightMode) -> None:
self.set_arguments(self._build_data(("nl.mode", mode.value)))

def set_timer_brightness(self, target_brightness: int) -> None:
if target_brightness < 0 or target_brightness > 255:
if target_brightness < self._MIN_BYTE or target_brightness > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(target_brightness)

self.set_arguments(self._build_data(("nl.tbri", target_brightness)))

def set_colors(self, *colors: list[int, int, int]) -> None:
for color in colors:
if min(color) < 0 or max(color) > 255:
raise exceptions.ValueOutOfBoundsException(color, (0, 0, 0), (255, 255, 255))
if min(color) < self._MIN_BYTE or max(color) > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(color, (self._MIN_BYTE, self._MIN_BYTE, self._MIN_BYTE),
(self._MAX_BYTE, self._MAX_BYTE, self._MAX_BYTE))

self.set_arguments(self._build_data(("seg", self._build_data(("col", str(list(colors)))))))

def set_effect(self, effect: int) -> None:
if effect < 0 or effect > 117:
raise exceptions.ValueOutOfBoundsException(effect, stop=101)
if effect < self._MIN_BYTE or effect > self._MAX_FX:
raise exceptions.ValueOutOfBoundsException(effect, stop=self._MAX_FX)

self.set_arguments(self._build_data(("seg", self._build_data(("fx", effect)))))

def set_effect_speed(self, speed: int) -> None:
if speed < 0 or speed > 255:
if speed < self._MIN_BYTE or speed > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(speed)

self.set_arguments(self._build_data(("seg", self._build_data(("sx", speed)))))

def set_effect_intensity(self, intensity: int) -> None:
if intensity < 0 or intensity > 255:
if intensity < self._MIN_BYTE or intensity > self._MAX_BYTE:
raise exceptions.ValueOutOfBoundsException(intensity)

self.set_arguments(self._build_data(("seg", self._build_data(("ix", intensity)))))


WLedController("192.168.178.42").set_preset(10)

0 comments on commit bcb8680

Please sign in to comment.