mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-04-19 08:55:15 +00:00
Fix Gesamtlast (#398)
Some checks are pending
docker-build / platform-excludes (push) Waiting to run
docker-build / build (push) Blocked by required conditions
docker-build / merge (push) Blocked by required conditions
pre-commit / pre-commit (push) Waiting to run
Run Pytest on Pull Request / test (push) Waiting to run
Some checks are pending
docker-build / platform-excludes (push) Waiting to run
docker-build / build (push) Blocked by required conditions
docker-build / merge (push) Blocked by required conditions
pre-commit / pre-commit (push) Waiting to run
Run Pytest on Pull Request / test (push) Waiting to run
Make Gesamtlast endpoint understand the legacy load mesaurement data format. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
parent
43ebbc2e55
commit
e255e97141
@ -759,6 +759,33 @@ class DataSequence(DataBase, MutableSequence):
|
|||||||
|
|
||||||
return dates, values
|
return dates, values
|
||||||
|
|
||||||
|
def key_from_lists(self, key: str, dates: List[DateTime], values: List[float]) -> None:
|
||||||
|
"""Update the DataSequence from lists of datetime and value elements.
|
||||||
|
|
||||||
|
The dates list should represent the date_time of each DataRecord, and the values list
|
||||||
|
should represent the corresponding data values for the specified key.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
key (str): The field name in the DataRecord that corresponds to the values in the Series.
|
||||||
|
dates: List of datetime elements.
|
||||||
|
values: List of values corresponding to the specified key in the data records.
|
||||||
|
"""
|
||||||
|
self._validate_key_writable(key)
|
||||||
|
|
||||||
|
for i, date_time in enumerate(dates):
|
||||||
|
# Ensure datetime objects are normalized
|
||||||
|
date_time = to_datetime(date_time, to_maxtime=False) if date_time else None
|
||||||
|
# Check if there's an existing record for this date_time
|
||||||
|
existing_record = next((r for r in self.records if r.date_time == date_time), None)
|
||||||
|
if existing_record:
|
||||||
|
# Update existing record's specified key
|
||||||
|
setattr(existing_record, key, values[i])
|
||||||
|
else:
|
||||||
|
# Create a new DataRecord if none exists
|
||||||
|
new_record = self.record_class()(date_time=date_time, **{key: values[i]})
|
||||||
|
self.records.append(new_record)
|
||||||
|
self.sort_by_datetime()
|
||||||
|
|
||||||
def key_to_series(
|
def key_to_series(
|
||||||
self,
|
self,
|
||||||
key: str,
|
key: str,
|
||||||
|
@ -616,19 +616,30 @@ def fastapi_gesamtlast(request: GesamtlastRequest) -> list[float]:
|
|||||||
measurement_key = "measurement_load0_mr"
|
measurement_key = "measurement_load0_mr"
|
||||||
measurement_eos.key_delete_by_datetime(key=measurement_key) # delete all load0_mr measurements
|
measurement_eos.key_delete_by_datetime(key=measurement_key) # delete all load0_mr measurements
|
||||||
energy = {}
|
energy = {}
|
||||||
for data_dict in request.measured_data:
|
try:
|
||||||
for date_time, value in data_dict.items():
|
for data_dict in request.measured_data:
|
||||||
dt_str = to_datetime(date_time, as_string=True)
|
dt_str = to_datetime(data_dict["time"], as_string=True)
|
||||||
|
value = float(data_dict["Last"])
|
||||||
energy[dt_str] = value
|
energy[dt_str] = value
|
||||||
energy_mr = 0
|
except Exception as e:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=404,
|
||||||
|
detail=f"Invalid measured data: {e}.",
|
||||||
|
)
|
||||||
|
energy_mr_dates = []
|
||||||
|
energy_mr_values = []
|
||||||
|
energy_mr = 0.0
|
||||||
for i, key in enumerate(sorted(energy)):
|
for i, key in enumerate(sorted(energy)):
|
||||||
energy_mr += energy[key]
|
energy_mr += energy[key]
|
||||||
dt = to_datetime(key)
|
dt = to_datetime(key)
|
||||||
if i == 0:
|
if i == 0:
|
||||||
# first element, add start value before
|
# first element, add start value before
|
||||||
dt_before = dt - to_duration("1 hour")
|
dt_before = dt - to_duration("1 hour")
|
||||||
measurement_eos.update_value(date=dt_before, key=measurement_key, value=0.0)
|
energy_mr_dates.append(dt_before)
|
||||||
measurement_eos.update_value(date=dt, key=measurement_key, value=energy_mr)
|
energy_mr_values.append(0.0)
|
||||||
|
energy_mr_dates.append(dt)
|
||||||
|
energy_mr_values.append(energy_mr)
|
||||||
|
measurement_eos.key_from_lists(measurement_key, energy_mr_dates, energy_mr_values)
|
||||||
|
|
||||||
# Create load forecast
|
# Create load forecast
|
||||||
prediction_eos.update_data(force_update=True)
|
prediction_eos.update_data(force_update=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user