Files
2025-09-11 10:47:34 +03:00

83 lines
4.1 KiB
Python

"""Helper functions package."""
import contextlib
import datetime as dt
import json
import pathlib
from homeassistant.core import State
from homeassistant.util import dt as dt_util
def get_np_from_file(data_file: str, set_today: bool = True) -> State | None:
"""Fake NP entity from file."""
diag_data = {}
file_path = pathlib.Path(data_file)
if file_path.is_file():
with contextlib.suppress(ValueError):
diag_data = json.loads(file_path.read_text(encoding="utf-8"))
if data := diag_data.get("data"):
if planner := data.get("planner"):
if prices_entity := planner.get("_prices_entity"):
if np := prices_entity.get("_np"):
attr = np.get("attributes")
now = dt_util.now()
if "raw_today" in attr:
for item in attr["raw_today"]:
for key, value in item.items():
if key in ["start", "end"] and isinstance(value, str):
item[key] = dt_util.parse_datetime(value)
if set_today:
item[key] = item[key].replace(
year=now.year, month=now.month, day=now.day
)
if "raw_tomorrow" in attr:
for item in attr["raw_tomorrow"]:
for key, value in item.items():
if key in ["start", "end"] and isinstance(value, str):
item[key] = dt_util.parse_datetime(value)
if set_today:
item[key] = item[key].replace(
year=now.year, month=now.month, day=now.day
)
item[key] += dt.timedelta(days=1)
if "prices" in attr and set_today:
first_time = None
original_tz = None
for item in attr["prices"]:
for key, value in item.items():
if key in ["time"] and isinstance(value, str):
fixed_time = dt_util.parse_datetime(value)
if not original_tz:
original_tz = fixed_time.tzinfo
fixed_time = fixed_time.astimezone(now.tzinfo)
if not first_time:
first_time = fixed_time
if fixed_time.day == first_time.day:
fixed_time = fixed_time.replace(
year=now.year, month=now.month, day=now.day
)
else:
fixed_time = fixed_time.replace(
year=now.year, month=now.month, day=now.day
)
fixed_time += dt.timedelta(days=1)
item[key] = fixed_time.astimezone(
original_tz
).strftime("%Y-%m-%d %H:%M:%S%z")
return State(
entity_id=np.get("entity_id"),
state=np.get("state"),
attributes=attr,
# last_changed: datetime.datetime | None = None,
# last_reported: datetime.datetime | None = None,
# last_updated: datetime.datetime | None = None,
# context: Context | None = None,
# validate_entity_id: bool | None = True,
# state_info: StateInfo | None = None,
# last_updated_timestamp: float | None = None,
)
return None