Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
0398bea
round values for 1A control steps
LKuemmel Jan 31, 2025
dc71cb4
fix powergraph
cshagen Feb 2, 2025
6decd61
fix time display format
cshagen Feb 2, 2025
6bd28ca
max deviation not needed anymore
LKuemmel Feb 3, 2025
97fd03d
Merge pull request #2183 from LKuemmel/fix
LKuemmel Feb 3, 2025
a0affbb
remove vite server.allowedhosts
cshagen Feb 3, 2025
d479096
cleanup
cshagen Feb 3, 2025
6d06a25
cleanup
cshagen Feb 3, 2025
3958af6
prettify vite.config.ts
cshagen Feb 3, 2025
d883e47
prettify vite.config.ts
cshagen Feb 3, 2025
bdee5d1
Merge pull request #2186 from cshagen/web-fixes
benderl Feb 4, 2025
690ee4f
Feature broker client name (#2191)
LKuemmel Feb 4, 2025
68eb23c
fix cloud (#2194)
LKuemmel Feb 5, 2025
5426413
control bat discharge power: fix negative values (#2195)
LKuemmel Feb 5, 2025
c177a5d
Query for polestar SOC adapted (#2193)
isomacM Feb 5, 2025
580320f
fix install_zabbix.sh permissions
benderl Feb 6, 2025
fbb2548
Merge pull request #2196 from benderl/fixes
benderl Feb 6, 2025
71cfe00
updated dependencies
benderl Feb 6, 2025
696028c
Merge pull request #2198 from benderl/cards-dosplay-theme
benderl Feb 6, 2025
a60b603
Build Display Theme: Cards
benderl Feb 6, 2025
dd23a60
build ui
benderl Feb 6, 2025
b1597b1
Merge pull request #2199 from benderl/settings-build
benderl Feb 6, 2025
3400b75
improve fault state handling
LKuemmel Feb 6, 2025
79ea572
Merge pull request #2192 from LKuemmel/fault_state
benderl Feb 7, 2025
a6c4043
build
benderl Feb 7, 2025
601edad
Merge pull request #2201 from benderl/build-ui
benderl Feb 7, 2025
f3cc106
build ui
benderl Feb 7, 2025
c5c0315
Merge pull request #2202 from benderl/status-fixes
benderl Feb 7, 2025
fdbd512
fix time display format
cshagen Feb 8, 2025
29e6ce9
fix pin check for settings
cshagen Feb 8, 2025
fa4d397
update dependencies
cshagen Feb 8, 2025
b98893b
update to node 22
cshagen Feb 8, 2025
521179c
add keypad for max price
cshagen Feb 9, 2025
284d413
update range slider for price chart
cshagen Feb 9, 2025
703ba7c
fix pricechart layout
cshagen Feb 10, 2025
95dc4ae
fixed visibility
benderl Feb 10, 2025
94a44ac
Merge pull request #2204 from cshagen/display-250208
benderl Feb 10, 2025
a561a84
Merge pull request #2205 from benderl/build-ui
benderl Feb 10, 2025
1057dc2
refactor status topic subscriptions
benderl Feb 10, 2025
7fc4351
Merge pull request #2206 from benderl/build-ui
benderl Feb 10, 2025
0a1d8c8
Update build_display_theme_colors.yml node v22
benderl Feb 10, 2025
7323b24
Update index.html
benderl Feb 10, 2025
e75bcf4
Build Display Theme: Colors
benderl Feb 10, 2025
78a1f57
build settings ui
benderl Feb 12, 2025
ddb827c
Merge pull request #2212 from benderl/build-ui
benderl Feb 12, 2025
154c4ec
fix rfid pro+ (#2217)
LKuemmel Feb 13, 2025
1d02d06
set switch_off_threshold to 0 (#2216)
ndrsnhs Feb 14, 2025
3a56033
invert power sign (#2215)
ndrsnhs Feb 14, 2025
173137a
Fix soc_timestamp handling for milliseconds (#2197)
MartinRinas Feb 18, 2025
e2c6fdd
soc timestamp resturn changed from string to float (#2211)
isomacM Feb 19, 2025
3c7abb4
Bump cryptography from 44.0.0 to 44.0.1 (#2221)
dependabot[bot] Feb 19, 2025
3801279
Update version 2.1.7-RC.2
LKuemmel Feb 20, 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
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/build_display_theme_colors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Setup Node.js (v20)
- name: Setup Node.js (v22)
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 22
cache: npm
cache-dependency-path: packages/modules/display_themes/colors/source/package-lock.json

Expand Down
16 changes: 6 additions & 10 deletions packages/control/algorithm/surplus_controlled.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,19 +136,15 @@ def _fix_deviating_evse_current(self, chargepoint: Chargepoint) -> float:
genutzten Soll-Strom hochgeregelt werden. Wenn Fahrzeuge entgegen der Norm mehr Ladeleistung beziehen, als
freigegeben, wird entsprechend weniger freigegeben, da sonst uU die untere Grenze für die Abschaltschwelle
nicht erreicht wird.
Wenn die Soll-Stromstärke nicht angepasst worden ist, nicht den ungenutzten EVSE-Strom aufschlagen. Wenn das
Auto nur in 1A-Schritten regeln kann, rundet es und lädt immer etwas mehr oder weniger als Soll-Strom. Schlägt
man den EVSE-Strom auf, pendelt die Regelung um diesen 1A-Schritt."""
MAX_DEVIATION = 1.1
Wenn die Soll-Stromstärke nicht angepasst worden ist, nicht den ungenutzten EVSE-Strom aufschlagen."""
evse_current = chargepoint.data.get.evse_current
if evse_current and chargepoint.data.set.current != chargepoint.data.set.current_prev:
offset = evse_current - max(chargepoint.data.get.currents)
if abs(offset) >= MAX_DEVIATION:
current_with_offset = chargepoint.data.set.current + offset
current = min(current_with_offset, chargepoint.data.control_parameter.required_current)
if current != chargepoint.data.set.current:
log.debug(f"Ungenutzten Soll-Strom aufschlagen ergibt {current}A.")
chargepoint.data.set.current = current
current_with_offset = chargepoint.data.set.current + offset
current = min(current_with_offset, chargepoint.data.control_parameter.required_current)
if current != chargepoint.data.set.current:
log.debug(f"Ungenutzten Soll-Strom aufschlagen ergibt {current}A.")
chargepoint.data.set.current = current

def check_submode_pv_charging(self) -> None:
evu_counter = data.data.counter_all_data.get_evu_counter()
Expand Down
2 changes: 1 addition & 1 deletion packages/control/algorithm/surplus_controlled_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_set_required_current_to_max(phases: int,
[
pytest.param(None, 6, 6, id="Kein Soll-Strom aus der EVSE ausgelesen"),
pytest.param(13, 13, 13, id="Auto lädt mit Soll-Stromstärke"),
pytest.param(12.5, 12.5, 12.5, id="Auto lädt mit 0.5A Abweichung von der Soll-Stromstärke"),
pytest.param(12.5, 12.5, 12.0, id="Auto lädt mit 0.5A Abweichung von der Soll-Stromstärke"),
pytest.param(11.8, 11.8, 10.600000000000001, id="Auto lädt mit mehr als Soll-Stromstärke"),
pytest.param(14.2, 14.2, 15.399999999999999, id="Auto lädt mit weniger als Soll-Stromstärke"),
pytest.param(15, 15, 16,
Expand Down
2 changes: 1 addition & 1 deletion packages/control/bat_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ def get_power_limit(self):
power_limit = min(self._max_bat_power_hybrid_system(
data.data.bat_data[f"bat{bat_component.component_config.id}"])[0], remaining_power_limit)
remaining_power_limit -= power_limit
remaining_power_limit = min(remaining_power_limit, 0)
remaining_power_limit = max(remaining_power_limit, 0)

data.data.bat_data[f"bat{bat_component.component_config.id}"].data.set.power_limit = power_limit

Expand Down
24 changes: 12 additions & 12 deletions packages/helpermodules/broker.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
import datetime
import logging
import os
import paho.mqtt.client as mqtt
import time
from typing import Callable

log = logging.getLogger(__name__)


def get_name_suffix() -> str:
with open('/proc/cpuinfo', 'r') as f:
for line in f:
if line[0:6] == 'Serial':
serial = line[10:26]
serial = "0000000000000000"
return f"{serial}-{datetime.datetime.today().timestamp()}"


class InternalBrokerClient:
def __init__(self, name: str, on_connect: Callable, on_message: Callable) -> None:
try:
self.name = f"openWB-{name}-{self._get_serial()}"
self.name = f"openWB-{name}-{get_name_suffix()}"
self.client = mqtt.Client(self.name)
self.client.on_connect = on_connect
self.client.on_message = on_message
Expand All @@ -30,20 +39,11 @@ def disconnect(self) -> None:
self.client.disconnect()
log.info(f"Verbindung von Client {self.name} geschlossen.")

def _get_serial(self) -> str:
""" Extract serial from cpuinfo file
"""
with open('/proc/cpuinfo', 'r') as f:
for line in f:
if line[0:6] == 'Serial':
return line[10:26]
return "0000000000000000"


class InternalBrokerPublisher:
def __init__(self) -> None:
try:
self.client = mqtt.Client(f"openWB-python-bulkpublisher-{os.getpid()}")
self.client = mqtt.Client(f"openWB-python-bulkpublisher-{get_name_suffix()}")
self.client.connect("localhost", 1886)
except Exception:
log.exception("Fehler beim Verbindungsaufbau zum Bulkpublisher")
Expand Down
2 changes: 1 addition & 1 deletion packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ class UpdateConfig:
("openWB/general/chargemode_config/pv_charging/bat_power_reserve", 200),
("openWB/general/chargemode_config/pv_charging/bat_power_reserve_active", True),
("openWB/general/chargemode_config/pv_charging/control_range", [0, 230]),
("openWB/general/chargemode_config/pv_charging/switch_off_threshold", 50),
("openWB/general/chargemode_config/pv_charging/switch_off_threshold", 0),
("openWB/general/chargemode_config/pv_charging/switch_off_delay", 60),
("openWB/general/chargemode_config/pv_charging/switch_on_delay", 30),
("openWB/general/chargemode_config/pv_charging/switch_on_threshold", 1500),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def get_values(self) -> None:
chargepoint_state = self.request_values()
self.store.set(chargepoint_state)

def request_values(self) -> None:
def request_values(self) -> ChargepointState:
with self.client_error_context:
chargepoint_state = self.old_chargepoint_state
ip_address = self.config.configuration.ip_address
Expand Down
3 changes: 3 additions & 0 deletions packages/modules/common/component_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ def __init__(self, soc: float, range: Optional[float] = None, soc_timestamp: Opt
if soc_timestamp is None:
self.soc_timestamp = timecheck.create_timestamp()
else:
if soc_timestamp > 1e10: # Convert soc_timestamp to seconds if it is in milliseconds
log.debug(f'Zeitstempel {soc_timestamp} ist in ms, wird in s gewandelt. Modul sollte angepasst werden.')
soc_timestamp /= 1000
self.soc_timestamp = soc_timestamp


Expand Down
3 changes: 3 additions & 0 deletions packages/modules/common/configurable_vehicle.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ def update(self, vehicle_update_data: VehicleUpdateData):
if vehicle_update_data.soc_timestamp is None or vehicle_update_data.soc_timestamp < car_state.soc_timestamp:
# Nur wenn der SoC neuer ist als der bisherige, diesen setzen.
self.store.set(car_state)
elif vehicle_update_data.soc_timestamp > 1e10:
# car_state ist in ms geschrieben, dieser kann überschrieben werden
self.store.set(car_state)
else:
log.debug("Not updating SoC, because timestamp is older.")

Expand Down
4 changes: 2 additions & 2 deletions packages/modules/devices/growatt/growatt/bat.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ def __init__(self,
def update(self, client: ModbusTcpClient_) -> None:
if self.version == GrowattVersion.max_series:
power_in = client.read_input_registers(
1011, ModbusDataType.UINT_32, unit=self.__modbus_id) * -0.1
1011, ModbusDataType.UINT_32, unit=self.__modbus_id) * 0.1
power_out = client.read_input_registers(
1009, ModbusDataType.UINT_32, unit=self.__modbus_id) * 0.1
1009, ModbusDataType.UINT_32, unit=self.__modbus_id) * -0.1
power = power_in + power_out

soc = client.read_input_registers(1014, ModbusDataType.UINT_16, unit=self.__modbus_id)
Expand Down
2 changes: 1 addition & 1 deletion packages/modules/devices/rct/rct/bat.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def update(self, rct_client: RCT) -> None:
if (stat1.value + stat2.value + stat3.value) > 0:
# Werte werden trotz Fehlercode übermittelt.
self.fault_state.warning(
f"Alarm Status Speicher ist ungleich 0. Status 1: {stat1.value}, Status 2: {stat2.value}, "
f"Speicher-Status ist ungleich 0. Status 1: {stat1.value}, Status 2: {stat2.value}, "
f"Status 3: {stat3.value}")


Expand Down
2 changes: 1 addition & 1 deletion packages/modules/devices/rct/rct/counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def update(self, rct_client: RCT):
if (stat1.value + stat2.value + stat3.value + stat4.value) > 0:
# Werte werden trotz Fehlercode übermittelt.
self.fault_state.warning(
f"Alarm Status Speicher ist ungleich 0. Status 1: {stat1.value}, Status 2: {stat2.value}, "
f"Speicher-Status ist ungleich 0. Status 1: {stat1.value}, Status 2: {stat2.value}, "
f"Status 3: {stat3.value}, Status 4: {stat4.value},")


Expand Down
4 changes: 2 additions & 2 deletions packages/modules/devices/sungrow/sungrow/counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def update(self, pv_power: float):
wordorder=Endian.Little, unit=unit)
except Exception:
powers = None
self.fault_state.warning(self.fault_text)
self.fault_state.no_error(self.fault_text)
else:
if pv_power != 0:
power = self.__tcp_client.read_input_registers(5082, ModbusDataType.INT_32,
Expand All @@ -52,7 +52,7 @@ def update(self, pv_power: float):
wordorder=Endian.Little, unit=unit)
except Exception:
powers = None
self.fault_state.warning(self.fault_text)
self.fault_state.no_error(self.fault_text)

frequency = self.__tcp_client.read_input_registers(5035, ModbusDataType.UINT_16, unit=unit) / 10
if self.device_config.configuration.version == Version.SH_winet_dongle:
Expand Down
Loading
Loading