Initial Home Assistant Configuration

This commit is contained in:
root
2025-09-11 10:47:34 +03:00
commit ac8b542e1b
2360 changed files with 41412 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
import logging
from collections import defaultdict
from operator import itemgetter
from statistics import mean
from decimal import Decimal
import pytz
from homeassistant.util import dt as dt_util
from pytz import timezone
UTC = pytz.utc
__all__ = [
"is_new",
"has_junk",
"extract_attrs",
"start_of",
"end_of",
"stock",
"add_junk",
]
_LOGGER = logging.getLogger(__name__)
stockholm_tz = timezone("Europe/Stockholm")
def exceptions_raiser():
"""Utility to check that all exceptions are raised."""
import aiohttp
import random
exs = [KeyError, aiohttp.ClientError, None, None, None]
got = random.choice(exs)
if got is None:
pass
else:
raise got
def round_decimal(number, decimal_places=3):
decimal_value = Decimal(number)
return decimal_value.quantize(Decimal(10) ** -decimal_places)
def add_junk(d):
for key in ["Average", "Min", "Max", "Off-peak 1", "Off-peak 2", "Peak"]:
d[key] = float("inf")
return d
def stock(d):
"""convert datetime to stocholm time."""
return d.astimezone(stockholm_tz)
def start_of(d, typ_="hour"):
if typ_ == "hour":
return d.replace(minute=0, second=0, microsecond=0)
elif typ_ == "day":
return d.replace(hour=0, minute=0, microsecond=0)
def time_in_range(start, end, x):
"""Return true if x is in the range [start, end]"""
if start <= end:
return start <= x <= end
else:
return start <= x or x <= end
def end_of(d, typ_="hour"):
"""Return end our hour"""
if typ_ == "hour":
return d.replace(minute=59, second=59, microsecond=999999)
elif typ_ == "day":
return d.replace(hour=23, minute=59, second=59, microsecond=999999)
def is_new(date=None, typ="day") -> bool:
"""Utility to check if its a new hour or day."""
# current = pendulum.now()
current = dt_util.now()
if typ == "day":
if date.date() != current.date():
_LOGGER.debug("Its a new day!")
return True
return False
elif typ == "hour":
if current.hour != date.hour:
_LOGGER.debug("Its a new hour!")
return True
return False
def is_inf(d):
if d == float("inf"):
return True
return False
def has_junk(data) -> bool:
"""Check if data has some infinity values.
Args:
data (dict): Holds the data from the api.
Returns:
TYPE: True if there is any infinity values else False
"""
cp = dict(data)
cp.pop("values", None)
if any(map(is_inf, cp.values())):
return True
return False
def extract_attrs(data) -> dict:
"""extract attrs"""
d = defaultdict(list)
items = [i.get("value") for i in data]
if len(data):
data = sorted(data, key=itemgetter("start"))
offpeak1 = [i.get("value") for i in data[0:8]]
peak = [i.get("value") for i in data[8:20]]
offpeak2 = [i.get("value") for i in data[20:]]
d["Peak"] = mean(peak)
d["Off-peak 1"] = mean(offpeak1)
d["Off-peak 2"] = mean(offpeak2)
d["Average"] = mean(items)
d["Min"] = min(items)
d["Max"] = max(items)
return d
return data