Skip to content

Commit

Permalink
refactor: parser.py get_requests set default state
Browse files Browse the repository at this point in the history
  • Loading branch information
davidrapan committed Jul 14, 2024
1 parent e6838d4 commit 349dd69
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions custom_components/solarman/parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

import re
import struct
import logging

Expand Down Expand Up @@ -42,6 +43,19 @@ def is_requestable(self, parameters):
def is_scheduled(self, parameters, runtime):
return "realtime" in parameters or (runtime % (parameters["update_interval"] if "update_interval" in parameters else self._update_interval) == 0)

def default_from_unit_of_measurement(self, parameters):
return None if (uom := parameters["uom"] if "uom" in parameters else (parameters["unit_of_measurement"] if "unit_of_measurement" in parameters else "")) and re.match(r"\S+", uom) else ""

def set_state(self, key, value):
self._result[key] = {}
self._result[key]["state"] = value

def set_state_number(self, key, value, digits):
if isinstance(value, int) or (isinstance(value, float) and value.is_integer()):
self.set_state(key, int(value))
else:
self.set_state(key, round(value, digits))

def get_sensors(self):
result = [{"name": "Connection Status", "artificial": ""}]
for i in self.lookup():
Expand All @@ -60,8 +74,7 @@ def get_requests(self, runtime = 0):
for i in self.lookup():
for j in i["items"]:
if self.is_requestable(j) and self.is_scheduled(j, runtime):
self._result[j["name"]] = {}
self._result[j["name"]]["state"] = ""
self.set_state(j["name"], self.default_from_unit_of_measurement(j))
for r in j["registers"]:
registers.append(r)

Expand All @@ -79,16 +92,6 @@ def parse(self, rawData, start, length):

return

def set_state(self, key, value):
self._result[key] = {}
self._result[key]["state"] = value

def set_state_number(self, key, value, digits):
if isinstance(value, int) or (isinstance(value, float) and value.is_integer()):
self.set_state(key, int(value))
else:
self.set_state(key, round(value, digits))

def get_result(self):
return self._result

Expand Down

0 comments on commit 349dd69

Please sign in to comment.