Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
9e2caa1
soc_bmwbc: add new captcha for initial login, store token file in dat…
rleidner Nov 23, 2024
cf3528d
replace absolute by relative path
rleidner Nov 23, 2024
2e78295
soc_ovms: fix missing confDict issue on 1st connect
rleidner Dec 1, 2024
236dc68
use Path Object
rleidner Dec 2, 2024
82b8df2
requirements.txt: update to latest version 0.17.2 of bimmer_connected
rleidner Dec 5, 2024
c0d72d6
Merge pull request #2035 from rleidner/soc_bmwbc_p1
kevinwieland Dec 12, 2024
50a3d26
build-ui
benderl Dec 12, 2024
7de27fa
build settings
benderl Dec 12, 2024
f76d9b4
modify data path for bmwbc
benderl Dec 12, 2024
0c6792f
increment version
benderl Dec 12, 2024
1927094
Merge pull request #2063 from benderl/soc-bmw
benderl Dec 12, 2024
896d9ad
Merge pull request #2042 from rleidner/soc_ovms_p4
benderl Dec 12, 2024
87c2bc3
Colors theme (web): Fixes, Price chart updates (#2036)
cshagen Dec 12, 2024
2256710
minor fixes (#2017)
benderl Dec 12, 2024
448ce24
Detect network for ProPlus
kevinwieland Dec 3, 2024
671210a
restructure updated configuration
benderl Dec 12, 2024
78c0fac
cleanup apache2 configuration
benderl Dec 12, 2024
b92a3cd
Update setup_apache2.sh
kevinwieland Dec 13, 2024
ac716b2
Update setup_network.sh
kevinwieland Dec 13, 2024
5ec625c
build ui
benderl Dec 16, 2024
bc9b969
Merge pull request #2067 from benderl/settings-ui
benderl Dec 16, 2024
a3b7760
settings: fix install assistant layout
benderl Dec 16, 2024
010c622
Merge pull request #2068 from benderl/settings
benderl Dec 16, 2024
1c89a0d
soc_bmwbc: force new login when captcha token has changed
rleidner Dec 16, 2024
bfeb94b
Pro+
LKuemmel Dec 16, 2024
19be65f
fixes
LKuemmel Dec 16, 2024
1b262fa
error handling
LKuemmel Dec 16, 2024
ac7017c
no hard coded eth0
benderl Dec 16, 2024
1a6af15
ammend
LKuemmel Dec 16, 2024
06a2fbb
build UI
LKuemmel Dec 16, 2024
dd3d9d3
Merge pull request #2071 from LKuemmel/web
LKuemmel Dec 16, 2024
05b4f90
Merge pull request #2070 from openWB/feature_proplus
LKuemmel Dec 16, 2024
8363ffc
Get Mac-Adresse und publish MQTT-Topic
Brett-S-OWB Dec 16, 2024
fd420b3
proplus: fix lease time
LKuemmel Dec 16, 2024
1855d81
Merge pull request #2073 from openWB/feature_proplus
LKuemmel Dec 16, 2024
11a66de
fix version
LKuemmel Dec 16, 2024
152a15f
Merge pull request #2075 from openWB/feature_proplus
LKuemmel Dec 16, 2024
2e478b1
Merge pull request #2069 from rleidner/soc_bmwbc_p2
LKuemmel Dec 17, 2024
76d6958
Wiki-Eintrag Manueller SoC (#2065)
cr0i Dec 17, 2024
3c8156b
error message virtual counter (#2052)
LKuemmel Dec 17, 2024
8289b83
update modbus sample: add power limit (#2053)
LKuemmel Dec 17, 2024
3b81088
Tesvolt (#2044)
LKuemmel Dec 17, 2024
4b44550
Merge pull request #2072 from Brett-S-OWB/system-information
benderl Dec 17, 2024
6ab1be5
add ampere_pro inverter module (#2028)
ndrsnhs Dec 17, 2024
50c5c03
fix energy tariff modules (#2016)
benderl Dec 17, 2024
523a25e
Zabbix monitoring (#2041)
ndrsnhs Dec 17, 2024
4922b9e
Improve cloud (#2034)
ndrsnhs Dec 17, 2024
ee35605
support new firmware version v112 (#2040)
ndrsnhs Dec 17, 2024
7c92baf
build UI (#2082)
LKuemmel Dec 17, 2024
8b96ac4
Bump aiohttp from 3.10.2 to 3.10.11 (#2048)
dependabot[bot] Dec 17, 2024
8d1351b
wait for using phases after charge start (#1974)
LKuemmel Dec 17, 2024
76effac
Distinction between soc timestamp and soc request timestamp, update s…
LKuemmel Dec 17, 2024
703908a
pv: fix submode change during switch on (#2054)
LKuemmel Dec 17, 2024
8f82f81
restructure ev (#2005)
LKuemmel Dec 17, 2024
443cea6
use ErrorTimerContext for internal chargepoint and socket (#2024)
LKuemmel Dec 18, 2024
00fb31a
scheduled charging - instant charging: automatic phase switch without…
LKuemmel Dec 18, 2024
d778788
Huawai modbus rtu (#2077)
ndrsnhs Dec 18, 2024
b4897ed
Improve logging (#2081)
ndrsnhs Dec 18, 2024
e90135d
add sdm120 simcounter for openWB Kit (#2080)
ndrsnhs Dec 18, 2024
f26148f
remember timestamp of last phase switch instead of waiting the whole …
LKuemmel Dec 18, 2024
1c743c6
build UI (#2084)
LKuemmel Dec 18, 2024
90a0394
fix update (#2085)
ndrsnhs Dec 19, 2024
d5ac98a
Deye/jinko (#2083)
ndrsnhs Dec 19, 2024
4f5d4af
Sample Speichersteuerung (#2088)
LKuemmel Dec 19, 2024
5b5dea0
fix set current prev (#2089)
LKuemmel Dec 19, 2024
671fcd8
JSON SoC Modul (#2064)
MartinRinas Dec 19, 2024
e344a6d
fix counter (#2086)
ndrsnhs Dec 19, 2024
7799925
build UI (#2090)
LKuemmel Dec 19, 2024
a3eaee9
fix electricity tariffs (#2102)
LKuemmel Dec 27, 2024
c7242e9
fix timestamp charge start (#2105)
LKuemmel Dec 30, 2024
3917b1c
fix electricity tariff based charging (#2106)
LKuemmel Dec 30, 2024
88aaffe
fix discovergy/inexogy (#2107)
LKuemmel Dec 30, 2024
a47d7d5
remove spaces
Xerolux Jan 1, 2025
8e80f66
Merge pull request #2109 from Xerolux/patch-1
benderl Jan 2, 2025
971e68a
error handling for NAN counters from SMA inverter and battery (new or…
MartinRinas Jan 2, 2025
8869183
invert power value of counter module (#2112)
ndrsnhs Jan 2, 2025
ece3cf7
PSA Car Controller SoC (#2046)
andlem74 Jan 2, 2025
9e8dc40
Polestar auth update (#2076)
isomacM Jan 2, 2025
076851d
add warning for powers (#2111)
ndrsnhs Jan 2, 2025
c509166
Redact credentials in logging (#2074)
MartinRinas Jan 2, 2025
031d88e
JSON SoC module: add timestamp (#2104)
MartinRinas Jan 2, 2025
ddacb31
msal 1.31.1 cryptography 44.0.0 (#2087)
MartinRinas Jan 2, 2025
cef271e
build UI (#2113)
LKuemmel Jan 2, 2025
19e2b19
Smarthomedevices als Virtuelle Zähler... (#2059)
okaegi Jan 2, 2025
aa16ff7
plan ids in connected vehicle (#1958)
LKuemmel Jan 3, 2025
f579be9
Read and display evse current (#2025)
ndrsnhs Jan 3, 2025
c0adf11
build UI (#2114)
LKuemmel Jan 3, 2025
be2e07e
fix switch on and phase switch before charge start (#2117)
LKuemmel Jan 3, 2025
d98adec
Colors theme (web): Fixes and version upgrades (#2110)
cshagen Jan 6, 2025
9629b2d
remove obsolete files
benderl Jan 6, 2025
a16804a
Merge pull request #2122 from benderl/smarthome-cleanup
benderl Jan 6, 2025
414372c
remove price button for scheduled charging
benderl Jan 8, 2025
7b9ad05
Merge pull request #2124 from benderl/standard-legacy
benderl Jan 8, 2025
06f46ff
fix timestamp in JSON SoC (#2121)
MartinRinas Jan 9, 2025
3c0de26
remove smarteq module - support stopped by mercedes (#2115)
rleidner Jan 9, 2025
3e31f85
Aiways SoC module (#2066)
FriedrichF Jan 9, 2025
26f3d5e
build UI (#2126)
LKuemmel Jan 9, 2025
0cefb5c
Consistent name for aiways soc module (#2127)
LKuemmel Jan 9, 2025
d894031
rename firmware version
benderl Jan 9, 2025
fc0635f
fix bat power direction
benderl Jan 9, 2025
f999057
build ui
benderl Jan 10, 2025
e42a171
Merge pull request #2125 from openWB/feature-sungrow-firmware
benderl Jan 10, 2025
7899e8e
Psacc SoC timestamp (#2128)
andlem74 Jan 10, 2025
3bac891
fix deye devicetype (#2129)
LKuemmel Jan 10, 2025
932a9d3
fix plan id in control parameter (#2130)
LKuemmel Jan 10, 2025
8df9f01
fix direct download
benderl Jan 10, 2025
87b41d8
Merge pull request #2131 from benderl/chargelog-download
benderl Jan 10, 2025
841ceac
switch sign of pv power (#2132)
ndrsnhs Jan 10, 2025
18556c7
fix ocpp heartbeat (#2133)
LKuemmel Jan 10, 2025
099fcb7
soc_bmw: removed, end of support, replaced by soc_bmwbc
rleidner Jan 10, 2025
3531626
fix empty files in yearly download
benderl Jan 11, 2025
1c028ee
change order of charge modes
cshagen Jan 11, 2025
75a76c5
update dependencies
cshagen Jan 11, 2025
16392cb
fix chargepoint display, update eslint config
cshagen Jan 11, 2025
1bec89b
add soc editor
cshagen Jan 11, 2025
979f3ca
Fix layout of settings pages
cshagen Jan 12, 2025
3406c45
Put status page behind PIN check
cshagen Jan 12, 2025
62a0095
cleanup files and code
cshagen Jan 12, 2025
890ba4f
Merge pull request #2138 from benderl/chargelog-download
benderl Jan 13, 2025
6177328
switch from ping to curl for inet check
benderl Jan 13, 2025
2fd4cd8
Merge pull request #2139 from benderl/network
benderl Jan 13, 2025
e60f24d
fix solaredge: remove component from hierarchy (#2140)
LKuemmel Jan 13, 2025
02f474d
Merge pull request #2135 from rleidner/soc_bmw_p0
benderl Jan 13, 2025
2320683
fix layout
cshagen Jan 13, 2025
f70a46b
fix sungrow firmware selection
benderl Jan 13, 2025
6fbc4ae
build ui
benderl Jan 13, 2025
59ebf59
Merge pull request #2141 from benderl/sungrow
benderl Jan 13, 2025
2e04b14
Merge pull request #2137 from cshagen/display-2501
benderl Jan 13, 2025
a3388dd
Build Display Theme: Colors
benderl Jan 13, 2025
576a3ff
build ui
benderl Jan 13, 2025
5d1b82d
Merge pull request #2143 from benderl/ui
benderl Jan 13, 2025
fc036fc
Update version 2.1.7-Beta.1
LKuemmel Jan 14, 2025
c57d5c6
Zabbix monitoring (#2145)
ndrsnhs Jan 14, 2025
5fdb6ad
rename "Externe openWB" to secondary openWB (#2144)
LKuemmel Jan 14, 2025
859edfe
read dc_power (#2147)
ndrsnhs Jan 14, 2025
a664010
build UI (#2148)
LKuemmel Jan 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 12 additions & 0 deletions data/config/apache/apache-proplus.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# openwb-version:1
Listen 8080

<VirtualHost *:8080>
ProxyPreserveHost On

# Proxy for Pro:
ProxyPass / http://192.168.192.50:80/
ProxyPassReverse / http://192.168.192.50:80/

ServerName localhost
</VirtualHost>
8 changes: 8 additions & 0 deletions data/config/dhcpcd.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# openwb - begin
# openwb-version:1
# second interface connected to internal pro
interface eth1
static ip_address=192.168.192.150
# static routers=192.168.192.150
# static domain_name_servers=8.8.8.8
# openwb - end
9 changes: 9 additions & 0 deletions data/config/dnsmasq.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# openwb-version:2
# activate DHCP-Server on second interface only
interface=eth1

# IPv4 pool and lease time
dhcp-range=192.168.192.50,192.168.192.50,1m

# DNS
dhcp-option=option:dns-server,192.168.192.150
17 changes: 17 additions & 0 deletions docs/Manueller SoC.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SoC-Modul des Fahrzeugs „Manueller SoC“

Stehen keine anderen SoC-Module für Dein Fahrzeug zur Verfügung, so kann das Modul „Manueller SoC“ genutzt werden.

Der Anfangs-SoC des Fahrzeugs muss hierbei manuell angegeben werden, z.B. über ein integriertes Display oder über das Webinterface. Während der Ladung wird anhand der Angaben aus dem Fahrzeugprofil zur Akkukapazität und des Wirkungsgrades der Ladeelektronik der aktuelle SoC berechnet.

Zunächst müssen also diese Angaben im Fahrzeugprofil (Angaben zur Batterie) erfasst werden:

![Fahrzeugprofil: Angaben zu Batterie](<pictures/Manueller SoC_Angaben zu Batterie.png>)

Dann wird im Fahrzeug das SoC Modul „Manueller SoC“ ausgewählt:

![Einstellungen Manueller SoC](<pictures/Manueller SoC_Einstellungen.png>)

Nun kann der Anfangs-SoC auf der Hauptseite angegeben werden:

![Eingabe manueller SoC](<pictures/Manueller SoC_Eingabe.png>)
1 change: 1 addition & 0 deletions docs/_Sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* [Grundkonzept](https://github.com/openWB/core/wiki/Grundkonzept)
* [Ladepunkte](https://github.com/openWB/core/wiki/Ladepunkte)
* [Fahrzeuge](https://github.com/openWB/core/wiki/Fahrzeuge)
* [Manueller SoC](https://github.com/openWB/core/wiki/Manueller-SoC)
* [Lademodi](https://github.com/openWB/core/wiki/Lademodi)
* Zähler
* [Grundsätzliches zu Zählern](https://github.com/openWB/core/wiki/Grundsätzliches-zu-Zählern)
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pictures/Manueller SoC_Eingabe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pictures/Manueller SoC_Einstellungen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 12 additions & 3 deletions docs/samples/sample_modbus/bat.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
from typing import Optional
from dataclass_utils import dataclass_from_dict
from modules.common.abstract_device import AbstractBat
from modules.common.component_state import BatState
Expand All @@ -11,15 +12,16 @@


class SampleBat(AbstractBat):
def __init__(self, device_id: int, component_config: SampleBatSetup) -> None:
def __init__(self, device_id: int, component_config: SampleBatSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleBatSetup, component_config)
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="speicher")
self.store = get_bat_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self, client: ModbusTcpClient_) -> None:
power = client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
def update(self) -> None:
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
imported, exported = self.sim_counter.sim_count(power)

bat_state = BatState(
Expand All @@ -30,5 +32,12 @@ def update(self, client: ModbusTcpClient_) -> None:
)
self.store.set(bat_state)

def set_power_limit(self, power_limit: Optional[int]) -> None:
# Methode entfernen, falls der Speicher keine Steuerung der Ladeleistung unterstützt
# Wenn der Speicher die Steuerung der Ladeleistung unterstützt, muss bei Übergabe einer Zahl auf aktive
# Speichersteurung umgeschaltet werden, sodass der Speicher mit der übergebenen Leistung lädt/entlädt. Wird
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
self.client.write_registers(reg, power_limit)


component_descriptor = ComponentDescriptor(configuration_factory=SampleBatSetup)
7 changes: 4 additions & 3 deletions docs/samples/sample_modbus/counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@


class SampleCounter(AbstractCounter):
def __init__(self, device_id: int, component_config: SampleCounterSetup) -> None:
def __init__(self, device_id: int, component_config: SampleCounterSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleCounterSetup, component_config)
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug")
self.store = get_counter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self, client: ModbusTcpClient_):
power = client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
def update(self):
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
imported, exported = self.sim_counter.sim_count(power)

counter_state = CounterState(
Expand Down
10 changes: 5 additions & 5 deletions docs/samples/sample_modbus/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@

def create_device(device_config: Sample):
def create_bat_component(component_config: SampleBatSetup):
return SampleBat(device_config.id, component_config, device_config.configuration.ip_address)
return SampleBat(device_config.id, component_config, device_config.configuration.ip_address, client)

def create_counter_component(component_config: SampleCounterSetup):
return SampleCounter(device_config.id, component_config, device_config.configuration.ip_address)
return SampleCounter(device_config.id, component_config, device_config.configuration.ip_address, client)

def create_inverter_component(component_config: SampleInverterSetup):
return SampleInverter(device_config.id, component_config, device_config.configuration.ip_address)
return SampleInverter(device_config.id, component_config, device_config.configuration.ip_address, client)

def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]):
with client as c:
with client:
for component in components:
with SingleComponentUpdateContext(component.fault_state):
component.update(c)
component.update()

try:
client = ModbusTcpClient_(device_config.configuration.ip_address, device_config.configuration.port)
Expand Down
7 changes: 4 additions & 3 deletions docs/samples/sample_modbus/inverter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@


class SampleInverter(AbstractInverter):
def __init__(self, device_id: int, component_config: SampleInverterSetup) -> None:
def __init__(self, device_id: int, component_config: SampleInverterSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleInverterSetup, component_config)
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv")
self.store = get_inverter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self, client: ModbusTcpClient_) -> None:
power = client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
def update(self) -> None:
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
exported = self.sim_counter.sim_count(power)[1]

inverter_state = InverterState(
Expand Down
3 changes: 2 additions & 1 deletion packages/control/algorithm/additional_current_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from control.chargepoint.chargepoint import Chargepoint, ChargepointData
from control.chargepoint.chargepoint_data import Set
from control.chargepoint.control_parameter import ControlParameter
from control.ev import ChargeTemplate, Ev
from control.ev.charge_template import ChargeTemplate
from control.ev.ev import Ev
from control.loadmanagement import LimitingValue


Expand Down
3 changes: 2 additions & 1 deletion packages/control/algorithm/common_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from control import data
from control.algorithm import common
from control.chargepoint.chargepoint import Chargepoint
from control.ev import Ev
from control.ev.ev import Ev
from control.counter import Counter
from control.counter_all import CounterAll

Expand Down Expand Up @@ -49,6 +49,7 @@ def test_set_current_counterdiff(diff: float,
cp.data.control_parameter.required_currents = required_currents
cp.data.set.charging_ev_data = ev
cp.data.set.current = 6
cp.data.get.currents = [10]*3
get_counters_to_check_mock = Mock(return_value=["cp0", "cp6"])
monkeypatch.setattr(CounterAll, "get_counters_to_check", get_counters_to_check_mock)
data.data.counter_data = {"cp0": Mock(spec=Counter), "cp6": Mock(spec=Counter)}
Expand Down
3 changes: 2 additions & 1 deletion packages/control/algorithm/filter_chargepoints_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
from control.chargemode import Chargemode
from control.chargepoint.chargepoint import Chargepoint, ChargepointData
from control.chargepoint.chargepoint_data import Log, Set
from control.chargepoint.control_parameter import ControlParameter
from control.counter_all import CounterAll
from control.ev import ControlParameter, Ev, EvData, Get
from control.ev.ev import Ev, EvData, Get


@dataclass
Expand Down
2 changes: 1 addition & 1 deletion packages/control/algorithm/integration_test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from control.chargepoint.chargepoint import Chargepoint
from control.counter_all import CounterAll
from control.counter import Counter
from control.ev import Ev
from control.ev.ev import Ev
from control.pv import Pv
from control.chargepoint.chargepoint_state import ChargepointState
from test_utils.default_hierarchies import NESTED_HIERARCHY
Expand Down
39 changes: 14 additions & 25 deletions packages/control/algorithm/integration_test/pv_charging_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ class ParamsPhaseSwitch(ParamsExpectedSetCurrent, ParamsExpectedCounterSet):
raw_power_left: float = 0
raw_currents_left_counter0: List[float] = field(default_factory=currents_list_factory)
raw_currents_left_counter6: List[float] = field(default_factory=currents_list_factory)
expected_timestamp_auto_phase_switch_cp3: Optional[str] = None
expected_timestamp_auto_phase_switch_cp4: Optional[str] = None
expected_timestamp_auto_phase_switch_cp5: Optional[str] = None
expected_timestamp_last_phase_switch_cp3: Optional[str] = None
expected_timestamp_last_phase_switch_cp4: Optional[str] = None
expected_timestamp_last_phase_switch_cp5: Optional[str] = None


def assert_counter_set(params: ParamsExpectedCounterSet):
Expand Down Expand Up @@ -243,9 +243,9 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3
raw_power_left=32580,
raw_currents_left_counter0=[40]*3,
raw_currents_left_counter6=[16]*3,
expected_timestamp_auto_phase_switch_cp3=1652683252.0,
expected_timestamp_auto_phase_switch_cp4=None,
expected_timestamp_auto_phase_switch_cp5=None,
expected_timestamp_last_phase_switch_cp3=1652683252.0,
expected_timestamp_last_phase_switch_cp4=None,
expected_timestamp_last_phase_switch_cp5=None,
expected_current_cp3=10,
expected_current_cp4=6,
expected_current_cp5=6,
Expand All @@ -257,9 +257,9 @@ def test_surplus(params: ParamsSurplus, all_cp_pv_charging_3p, all_cp_charging_3
raw_power_left=42580,
raw_currents_left_counter0=[40]*3,
raw_currents_left_counter6=[16]*3,
expected_timestamp_auto_phase_switch_cp3=1652683252.0,
expected_timestamp_auto_phase_switch_cp4=None,
expected_timestamp_auto_phase_switch_cp5=None,
expected_timestamp_last_phase_switch_cp3=1652683252.0,
expected_timestamp_last_phase_switch_cp4=None,
expected_timestamp_last_phase_switch_cp5=None,
expected_current_cp3=32,
expected_current_cp4=6,
expected_current_cp5=6,
Expand All @@ -281,21 +281,16 @@ def test_phase_switch(all_cp_pv_charging_3p, all_cp_charging_3p, monkeypatch):
monkeypatch.setattr(algorithm_data.data.general_data, "get_phases_chargemode", mockget_get_phases_chargemode)
data.data.cp_data[
"cp3"].data.control_parameter.state = ChargepointState.CHARGING_ALLOWED
data.data.cp_data[
"cp3"].data.control_parameter.timestamp_last_phase_switch = 1652682252

# execution
Algorithm().calc_current()

# evaluation
assert_expected_current(cases_phase_switch[0])
assert data.data.cp_data[
"cp3"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
0].expected_timestamp_auto_phase_switch_cp3
assert data.data.cp_data[
"cp4"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
0].expected_timestamp_auto_phase_switch_cp4
assert data.data.cp_data[
"cp5"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
0].expected_timestamp_auto_phase_switch_cp5
"cp3"].data.control_parameter.state == ChargepointState.PHASE_SWITCH_DELAY
assert_counter_set(cases_phase_switch[0])


Expand All @@ -311,6 +306,7 @@ def test_phase_switch_1p_3p(all_cp_pv_charging_1p, monkeypatch):
monkeypatch.setattr(algorithm_data.data.general_data, "get_phases_chargemode", mockget_get_phases_chargemode)
data.data.cp_data["cp3"].data.get.currents = [32, 0, 0]
data.data.cp_data["cp3"].data.get.power = 7360
data.data.cp_data["cp3"].data.control_parameter.timestamp_last_phase_switch = 1652682252
data.data.cp_data["cp4"].data.get.currents = [0, 0, 0]
data.data.cp_data["cp5"].data.get.currents = [0, 0, 0]

Expand All @@ -320,11 +316,4 @@ def test_phase_switch_1p_3p(all_cp_pv_charging_1p, monkeypatch):
# evaluation
assert_counter_set(cases_phase_switch[1])
assert data.data.cp_data[
"cp3"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
1].expected_timestamp_auto_phase_switch_cp3
assert data.data.cp_data[
"cp4"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
1].expected_timestamp_auto_phase_switch_cp4
assert data.data.cp_data[
"cp5"].data.control_parameter.timestamp_auto_phase_switch == cases_phase_switch[
1].expected_timestamp_auto_phase_switch_cp5
"cp3"].data.control_parameter.state == ChargepointState.PHASE_SWITCH_DELAY
8 changes: 4 additions & 4 deletions packages/control/algorithm/surplus_controlled.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ def _set(self,
available_for_cp = common.available_current_for_cp(cp, counts, available_currents, missing_currents)
if counter.get_control_range_state(feed_in_yield) == ControlRangeState.MIDDLE:
pv_charging = data.data.general_data.data.chargemode_config.pv_charging
dif_to_old_current = available_for_cp + cp.data.set.target_current - cp.set_current_prev
dif_to_old_current = available_for_cp + cp.data.set.target_current - cp.data.set.current_prev
# Wenn die Differenz zwischen altem und neuem Soll-Strom größer als der Regelbereich ist, trotzdem
# nachregeln, auch wenn der Regelbereich eingehalten wird. Sonst würde zB nicht berücksichtigt werden,
# wenn noch ein Fahrzeug dazu kommmt.
if (pv_charging.control_range[1] - pv_charging.control_range[0]) / 230 < abs(dif_to_old_current):
current = available_for_cp
else:
# Nicht mehr freigeben, wie das Lastmanagement vorgibt
current = min(cp.set_current_prev - cp.data.set.target_current, available_for_cp)
current = min(cp.data.set.current_prev - cp.data.set.target_current, available_for_cp)
else:
current = available_for_cp

Expand Down Expand Up @@ -110,7 +110,7 @@ def _limit_adjust_current(self, chargepoint: Chargepoint, new_current: float) ->
MAX_CURRENT = 30
msg = None
nominal_difference = chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference
if chargepoint.data.set.charging_ev_data.chargemode_changed:
if chargepoint.data.set.charging_ev_data.chargemode_changed or chargepoint.data.get.charge_state is False:
return new_current
else:
# Um max. +/- 5A pro Zyklus regeln
Expand Down Expand Up @@ -141,7 +141,7 @@ def _fix_deviating_evse_current(self, chargepoint: Chargepoint) -> float:
man den EVSE-Strom auf, pendelt die Regelung um diesen 1A-Schritt."""
MAX_DEVIATION = 1.1
evse_current = chargepoint.data.get.evse_current
if evse_current and chargepoint.data.set.current != chargepoint.set_current_prev:
if evse_current and chargepoint.data.set.current != chargepoint.data.set.current_prev:
formatted_evse_current = evse_current if evse_current < 32 else evse_current / 100
offset = formatted_evse_current - max(chargepoint.data.get.currents)
if abs(offset) >= MAX_DEVIATION:
Expand Down
5 changes: 3 additions & 2 deletions packages/control/algorithm/surplus_controlled_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
from control.chargepoint.chargepoint_data import Get, Set
from control.chargepoint.chargepoint_template import CpTemplate
from control.chargepoint.control_parameter import ControlParameter
from control.ev import ChargeTemplate, Ev
from control.ev.charge_template import ChargeTemplate
from control.ev.ev import Ev


@pytest.fixture(autouse=True)
Expand Down Expand Up @@ -63,7 +64,7 @@ def setup_cp(cp: Chargepoint, feed_in_limit: bool) -> Chargepoint:
def test_limit_adjust_current(new_current: float, expected_current: float, monkeypatch):
# setup
cp = Chargepoint(0, None)
cp.data = ChargepointData(get=Get(currents=[15]*3))
cp.data = ChargepointData(get=Get(charge_state=True, currents=[15]*3))
cp.template = CpTemplate()
monkeypatch.setattr(Chargepoint, "set_state_and_log", Mock())

Expand Down
Loading