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
14 changes: 13 additions & 1 deletion packages/modules/common/hardware_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
"Bitte den openWB series2 satellit stromlos machen.")
METER_PROBLEM = "Der Zähler konnte nicht ausgelesen werden. Vermutlich ist der Zähler falsch konfiguriert oder defekt."
METER_BROKEN_VOLTAGES = "Die Spannungen des Zählers konnten nicht korrekt ausgelesen werden: {}V Der Zähler ist defekt."
METER_VOLTAGE = "Die Spannung des Zählers ist zu {}. Bitte prüfen Sie die Spannungsversorgung. Spannung: {}V."
METER_VOLTAGE_TOO_HIGH = METER_VOLTAGE.format("hoch", "{}")
METER_VOLTAGE_TOO_LOW = METER_VOLTAGE.format("niedrig", "{}")
METER_NO_SERIAL_NUMBER = ("Die Seriennummer des Zählers für das Ladelog kann nicht ausgelesen werden. Wenn Sie die "
"Seriennummer für Abrechnungszwecke benötigen, wenden Sie sich bitte an unseren Support. Die "
"Funktionalität wird dadurch nicht beeinträchtigt!")
Expand All @@ -33,9 +36,18 @@ def check_meter_values(counter_state: CounterState, fault_state: Optional[FaultS


def _check_meter_values(counter_state: CounterState) -> Optional[str]:
VOLTAGE_HIGH_THRESHOLD = 260
VOLTAGE_LOW_THRESHOLD = 200
VOLTAGE_DETECTED_THRESHOLD = 50 # Phasenaufall detektieren

def valid_voltage(voltage) -> bool:
return 200 < voltage < 260
return VOLTAGE_LOW_THRESHOLD < voltage < VOLTAGE_HIGH_THRESHOLD
voltages = counter_state.voltages
# wenn ein Wert in voltages großer VOLTAGE_HIGH_THRESHOLD ist, gebe eine Fehlermeldung zurück
if any(v > VOLTAGE_HIGH_THRESHOLD and v > VOLTAGE_DETECTED_THRESHOLD for v in voltages):
return METER_VOLTAGE_TOO_HIGH.format(voltages)
elif any(v < VOLTAGE_LOW_THRESHOLD and v > VOLTAGE_DETECTED_THRESHOLD for v in voltages):
return METER_VOLTAGE_TOO_LOW.format(voltages)
if not ((valid_voltage(voltages[0]) and voltages[1] == 0 and voltages[2] == 0) or
# Zoe lädt einphasig an einphasiger Wallbox und erzeugt Spannung auf L2 (ca 126V)
(valid_voltage(voltages[0]) and 115 < voltages[1] < 135 and voltages[2] == 0) or
Expand Down
5 changes: 4 additions & 1 deletion packages/modules/common/hardware_check_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
from modules.common.evse import Evse
from modules.common.hardware_check import (
EVSE_BROKEN, LAN_ADAPTER_BROKEN, METER_BROKEN_VOLTAGES, METER_IMPLAUSIBLE_VALUE, METER_NO_SERIAL_NUMBER,
METER_PROBLEM, OPEN_TICKET, USB_ADAPTER_BROKEN, SeriesHardwareCheckMixin, _check_meter_values)
METER_PROBLEM, METER_VOLTAGE_TOO_HIGH, METER_VOLTAGE_TOO_LOW, OPEN_TICKET, USB_ADAPTER_BROKEN,
SeriesHardwareCheckMixin, _check_meter_values)
from modules.common.modbus import NO_CONNECTION, ModbusSerialClient_, ModbusTcpClient_
from modules.conftest import SAMPLE_IP, SAMPLE_PORT
from modules.internal_chargepoint_handler.clients import ClientHandler
Expand Down Expand Up @@ -97,6 +98,8 @@ def test_hardware_check_succeeds(monkeypatch):
pytest.param([0, 230, 230], 0, METER_BROKEN_VOLTAGES.format([0, 230, 230]), id="dreiphasig, L1 defekt"),
pytest.param([230, 0, 230], 0, METER_BROKEN_VOLTAGES.format([230, 0, 230]), id="dreiphasig, L2 defekt"),
pytest.param([230]*3, 100, METER_PROBLEM, id="Phantom-Leistung"),
pytest.param([261, 230, 230], 0, METER_VOLTAGE_TOO_HIGH.format([261, 230, 230]), id="Spannung zu hoch"),
pytest.param([230, 230, 199], 0, METER_VOLTAGE_TOO_LOW.format([230, 230, 199]), id="Spannung zu niedrig"),
]
)
def test_check_meter_values_voltages(voltages, power, expected_msg, monkeypatch):
Expand Down