Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions packages/control/chargelog/chargelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ def write_new_entry(new_entry):
def calc_energy_costs(cp, create_log_entry: bool = False):
try:
if cp.data.set.log.imported_since_plugged != 0 and cp.data.set.log.imported_since_mode_switch != 0:
processed_entries, reference_entries = _get_reference_entries()
processed_entries, reference_entries = _get_reference_entries(cp)
charged_energy_by_source = calculate_charged_energy_by_source(
cp, processed_entries, reference_entries, create_log_entry)
_add_charged_energy_by_source(cp, charged_energy_by_source)
Expand All @@ -354,7 +354,7 @@ def calculate_charged_energy_by_source(cp, processed_entries, reference_entries,
charged_energy = (reference_entries[-1]["cp"][f"cp{cp.num}"]["imported"] -
reference_entries[0]["cp"][f"cp{cp.num}"]["imported"])
elif reference == ReferenceTime.END:
if ((timecheck.create_timestamp()-cp.data.set.log.timestamp_mode_switch) < MEASUREMENT_LOGGING_INTERVAL):
if sum(cp.data.set.log.charged_energy_by_source.values()) == 0:
charged_energy = cp.data.set.log.imported_since_mode_switch
else:
log.debug(f"cp.data.get.imported {cp.data.get.imported}")
Expand Down Expand Up @@ -396,11 +396,13 @@ def _get_reference_position(cp, create_log_entry: bool) -> ReferenceTime:
return ReferenceTime.MIDDLE


def _get_reference_entries() -> Tuple[List[Dict], List]:
def _get_reference_entries(cp) -> Tuple[List[Dict], List]:
processed_entries = {}
reference_entries = []
try:
entries = get_todays_daily_log()["entries"]
log_data = get_todays_daily_log()
names = log_data["names"]
entries = log_data["entries"]
if len(entries) >= 2:
reference_entries = [entries[-2], entries[-1]]
else:
Expand All @@ -409,8 +411,9 @@ def _get_reference_entries() -> Tuple[List[Dict], List]:
reference_entries = [entries_day_before[-1], entries[0]]
processed_entries["entries"] = copy.deepcopy(reference_entries)
processed_entries["entries"] = _process_entries(processed_entries["entries"], CalculationType.ENERGY)
processed_entries["names"] = names
processed_entries["totals"] = get_totals(processed_entries["entries"], False)
processed_entries = _analyse_energy_source(processed_entries)
processed_entries = _analyse_energy_source(processed_entries, f"cp{cp.num}")
except Exception:
log.exception("Fehler beim Zusammenstellen der zwei letzten Logeinträge")
finally:
Expand Down
19 changes: 11 additions & 8 deletions packages/control/chargelog/chargelog_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ def mock_daily_log(monkeypatch):
'pv': {'all': {'exported': 2500}, 'pv1': {'exported': 2500}},
'sh': {},
'timestamp': 1652683200,
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}]}
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}],
"names": {"bat2": "Speicher2", "cp4": "LP 4", "pv1": "PV 1", "ev0": "EV0", "counter0": "Zähler0"}}
mock_todays_daily_log = Mock(return_value=daily_log)
monkeypatch.setattr(chargelog, "get_todays_daily_log", mock_todays_daily_log)
return daily_log
Expand All @@ -62,7 +63,7 @@ def test_calc_charge_cost_reference_middle(mock_data, monkeypatch):
calc_energy_costs(cp)

assert cp.data.set.log.charged_energy_by_source == {
'grid': 1243, 'pv': 386, 'bat': 671, 'cp': 0.0}
'grid': 1242.8, 'pv': 385.8, 'bat': 671.4, 'cp': 0.0}
assert round(cp.data.set.log.costs, 5) == 0.5


Expand All @@ -77,8 +78,7 @@ def test_calc_charge_cost_reference_start(mock_data, monkeypatch):
with patch("builtins.open", mock_open(read_data=json.dumps(daily_log))):
calc_energy_costs(cp)

assert cp.data.set.log.charged_energy_by_source == {
'bat': 28.549999999999997, 'cp': 0.0, 'grid': 57.15, 'pv': 14.299999999999999}
assert cp.data.set.log.charged_energy_by_source == {'bat': 28.57, 'cp': 0.0, 'grid': 57.14, 'pv': 14.29}
assert round(cp.data.set.log.costs, 5) == 0.025


Expand All @@ -93,7 +93,7 @@ def test_calc_charge_cost_reference_end(mock_data, monkeypatch):
with patch("builtins.open", mock_open(read_data=json.dumps(daily_log))):
calc_energy_costs(cp, True)

assert cp.data.set.log.charged_energy_by_source == {'bat': 699.55, 'cp': 0.0, 'grid': 1300.15, 'pv': 400.3}
assert cp.data.set.log.charged_energy_by_source == {'bat': 699.57, 'cp': 0.0, 'grid': 1300.14, 'pv': 400.29}
assert round(cp.data.set.log.costs, 5) == 0.025


Expand All @@ -116,7 +116,9 @@ def test_calc_charge_cost_reference_middle_day_change(mock_data, monkeypatch):
'pv': {'all': {'exported': 2000}, 'pv1': {'exported': 2000}},
'sh': {},
'timestamp': 1652682900,
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}]}
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}],
"names": {
"bat2": "Speicher2", "cp4": "LP 4", "pv1": "PV 1", "ev0": "EV0", "counter0": "Zähler0"}}
mock_yesterdays_daily_log = Mock(return_value=yesterday_daily_log)
monkeypatch.setattr(chargelog, "get_daily_log", mock_yesterdays_daily_log)

Expand All @@ -133,7 +135,8 @@ def test_calc_charge_cost_reference_middle_day_change(mock_data, monkeypatch):
'pv': {'all': {'exported': 2500}, 'pv1': {'exported': 2500}},
'sh': {},
'timestamp': 1652683200,
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}]}
'prices': {'grid': 0.0003, 'pv': 0.00015, 'bat': 0.0002, 'cp': 0}}],
"names": {"bat2": "Speicher2", "cp4": "LP 4", "pv1": "PV 1", "ev0": "EV0", "counter0": "Zähler0"}}
mock_todays_daily_log = Mock(return_value=daily_log)
monkeypatch.setattr(chargelog, "get_todays_daily_log", mock_todays_daily_log)

Expand All @@ -144,5 +147,5 @@ def test_calc_charge_cost_reference_middle_day_change(mock_data, monkeypatch):
calc_energy_costs(cp)

assert cp.data.set.log.charged_energy_by_source == {
'grid': 1243, 'pv': 386, 'bat': 671, 'cp': 0.0}
'grid': 1242.8, 'pv': 385.8, 'bat': 671.4, 'cp': 0.0}
assert round(cp.data.set.log.costs, 5) == 0.5
35 changes: 26 additions & 9 deletions packages/control/chargepoint/chargepoint_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from control import data
from control.chargepoint.chargepoint_state import ChargepointState
from helpermodules.constants import NO_ERROR


log = logging.getLogger(__name__)
Expand All @@ -15,6 +16,8 @@ class AllGet:
power: float = field(default=0, metadata={"topic": "get/power"})
imported: float = field(default=0, metadata={"topic": "get/imported"})
exported: float = field(default=0, metadata={"topic": "get/exported"})
fault_state: int = field(default=0, metadata={"topic": "get/fault_state"})
fault_str: str = field(default=NO_ERROR, metadata={"topic": "get/fault_str"})


def all_get_factory() -> AllGet:
Expand Down Expand Up @@ -68,18 +71,32 @@ def get_cp_sum(self):
"""
imported, exported, power = 0, 0, 0
try:
fault_state = 0
for cp in data.data.cp_data.values():
try:
imported = imported + cp.data.get.imported
exported = exported + cp.data.get.exported
except Exception:
log.exception("Fehler in der allgemeinen Ladepunkt-Klasse für Ladepunkt "+cp)
try:
power = power + cp.data.get.power
except Exception:
log.exception("Fehler in der allgemeinen Ladepunkt-Klasse für Ladepunkt "+cp)
if cp.data.get.fault_state < 2:
try:
imported = imported + cp.data.get.imported
exported = exported + cp.data.get.exported
except Exception:
log.exception(f"Fehler in der allgemeinen Ladepunkt-Klasse für Ladepunkt {cp.num}")
try:
power = power + cp.data.get.power
except Exception:
log.exception(f"Fehler in der allgemeinen Ladepunkt-Klasse für Ladepunkt {cp.num}")
else:
if fault_state < cp.data.get.fault_state:
fault_state = cp.data.get.fault_state
# Ladepunkte setzen ihre Werte im Fehlerfall selbst zurück
self.data.get.power = power
self.data.get.imported = imported
self.data.get.exported = exported
if fault_state == 0:
self.data.get.fault_state = 0
self.data.get.fault_str = NO_ERROR
else:
self.data.get.fault_state = fault_state
self.data.get.fault_str = ("Bitte die Statusmeldungen der Ladepunkte prüfen. Es konnte kein "
Comment thread
benderl marked this conversation as resolved.
"aktueller Zählerstand ermittelt werden, da nicht alle Ladepunkte Werte "
"liefern.")
Comment thread
benderl marked this conversation as resolved.
except Exception:
log.exception("Fehler in der allgemeinen Ladepunkt-Klasse")
2 changes: 1 addition & 1 deletion packages/control/chargepoint/chargepoint_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class Get:
currents: List[float] = field(default_factory=currents_list_factory)
daily_imported: float = 0
daily_exported: float = 0
error_timestamp: int = 0
error_timestamp: Optional[int] = None
evse_current: Optional[float] = None
# kann auch zur Laufzeit geändert werden
evse_signaling: Optional[EvseSignaling] = None
Expand Down
3 changes: 2 additions & 1 deletion packages/helpermodules/data_migration/data_migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@
from helpermodules.broker import BrokerClient
from helpermodules.data_migration.id_mapping import MapId
from helpermodules.hardware_configuration import update_hardware_configuration
from helpermodules.measurement_logging.process_log import get_totals, string_to_float, string_to_int
from helpermodules.measurement_logging.process_log import get_totals
from helpermodules.measurement_logging.write_log import LegacySmartHomeLogData, get_names
from helpermodules.timecheck import convert_timedelta_to_time_string, get_difference
from helpermodules.utils import joined_thread_handler
from helpermodules.utils.precision_math import string_to_float, string_to_int
from helpermodules.utils.topic_parser import get_index
from helpermodules.pub import Pub
from helpermodules.utils.json_file_handler import write_and_check
Expand Down
Loading
Loading