Test openWB 2 auf Debian 12 / RPI OS Bookworm

Fragen zur Nutzung, Features, usw..
Basti
Beiträge: 59
Registriert: Di Feb 21, 2023 3:28 pm

Re: Test openWB 2 auf Debian 12 / RPI OS Bookworm

Beitrag von Basti »

Habe es gestern erst wieder getestet nach dem ich die neuesten Updates eingefplegt habe und es lief ohne Probleme auf Proxmox.

Code: Alles auswählen

Debian 12
apt install curl sudo
adduser openwb
usermod -aG sudo openwb
reboot
login as openwb
curl -s https://raw.githubusercontent.com/Xerolux/openwb-bookworm/master/openwb-install.sh | sudo bash
Ansonsten bitte mal die main.log posten nach dem Neustart

Code: Alles auswählen

http://192.168.178.70/openWB/ramdisk/main.log
bitte deine IP Eintragen
Danke dir
rleidner
Beiträge: 917
Registriert: Mo Nov 02, 2020 9:50 am
Been thanked: 3 times

Re: Test openWB 2 auf Debian 12 / RPI OS Bookworm

Beitrag von rleidner »

Ich habe es auf debian12 am Laufen, aber es benötigt "kleinere" Anpassungen:
requirements.txt auf aktuelle Versionen setzen:

Code: Alles auswählen

openwb@debian12:~/openWB$ cat requirements.txt 
jq==1.6.0
paho_mqtt==1.6.1
pymodbus==3.6.3
pytest==8.0.0
requests_mock==1.11.0
lxml==5.1.0
aiohttp==3.9.3
schedule==1.2.1
PyJWT==2.8.0
ipparser==1.0.2
bs4==0.0.2
pkce==1.0.3
# skodaconnect==1.3.9
evdev==1.6.1
#telnetlib3==2.0.2
cryptography==42.0.2
msal==1.26.0
python-dateutil==2.8.2
umodbus==1.0.4
pysmb==1.2.9.1
pytz==2024.1
Daraus folgen einige Anpassungen in packages/modules/common/modbus.py:

Code: Alles auswählen

openwb@debian12:~/openWB$ git diff packages/modules/common/modbus.py | cat
diff --git a/packages/modules/common/modbus.py b/packages/modules/common/modbus.py
index a7ef40ed8..f31a3123e 100644
--- a/packages/modules/common/modbus.py
+++ b/packages/modules/common/modbus.py
@@ -10,7 +10,9 @@ from enum import Enum
 from typing import Callable, Iterable, Union, overload, List
 
 import pymodbus
-from pymodbus.client.sync import ModbusTcpClient, ModbusSerialClient
+from pymodbus.client.tcp  import ModbusTcpClient
+from pymodbus.client.serial  import ModbusSerialClient
+# from pymodbus.client.sync import ModbusTcpClient, ModbusSerialClient
 from pymodbus.constants import Endian
 from pymodbus.payload import BinaryPayloadDecoder
 from urllib3.util import parse_url
@@ -72,8 +74,8 @@ class ModbusClient:
     def __read_registers(self, read_register_method: Callable,
                          address: int,
                          types: Union[Iterable[ModbusDataType], ModbusDataType],
-                         byteorder: Endian = Endian.Big,
-                         wordorder: Endian = Endian.Big,
+                         byteorder: Endian = Endian.BIG,
+                         wordorder: Endian = Endian.BIG,
                          **kwargs):
         try:
             multi_request = isinstance(types, Iterable)
@@ -103,45 +105,45 @@ class ModbusClient:
             raise Exception(__name__+" "+str(type(e))+" " + str(e)) from e
 
     @overload
-    def read_holding_registers(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.Big,
-                               wordorder: Endian = Endian.Big, **kwargs) -> List[Number]:
+    def read_holding_registers(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.BIG,
+                               wordorder: Endian = Endian.BIG, **kwargs) -> List[Number]:
         pass
 
     @overload
-    def read_holding_registers(self, address: int, types: ModbusDataType, byteorder: Endian = Endian.Big,
-                               wordorder: Endian = Endian.Big, **kwargs) -> Number:
+    def read_holding_registers(self, address: int, types: ModbusDataType, byteorder: Endian = Endian.BIG,
+                               wordorder: Endian = Endian.BIG, **kwargs) -> Number:
         pass
 
     def read_holding_registers(self, address: int,
                                types: Union[Iterable[ModbusDataType], ModbusDataType],
-                               byteorder: Endian = Endian.Big,
-                               wordorder: Endian = Endian.Big,
+                               byteorder: Endian = Endian.BIG,
+                               wordorder: Endian = Endian.BIG,
                                **kwargs):
         return self.__read_registers(
             self.delegate.read_holding_registers, address, types, byteorder, wordorder, **kwargs
         )
 
     @overload
-    def read_input_registers(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.Big,
-                             wordorder: Endian = Endian.Big,
+    def read_input_registers(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.BIG,
+                             wordorder: Endian = Endian.BIG,
                              **kwargs) -> List[Number]:
         pass
 
     @overload
-    def read_input_registers(self, address: int, types: ModbusDataType, byteorder: Endian = Endian.Big,
-                             wordorder: Endian = Endian.Big, **kwargs) -> Number:
+    def read_input_registers(self, address: int, types: ModbusDataType, byteorder: Endian = Endian.BIG,
+                             wordorder: Endian = Endian.BIG, **kwargs) -> Number:
         pass
 
     def read_input_registers(self, address: int,
                              types: Union[Iterable[ModbusDataType], ModbusDataType],
-                             byteorder: Endian = Endian.Big,
-                             wordorder: Endian = Endian.Big,
+                             byteorder: Endian = Endian.BIG,
+                             wordorder: Endian = Endian.BIG,
                              **kwargs):
         return self.__read_registers(self.delegate.read_input_registers, address, types, byteorder, wordorder, **kwargs)
 
     @overload
-    def read_coils(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.Big,
-                   wordorder: Endian = Endian.Big,
+    def read_coils(self, address: int, types: Iterable[ModbusDataType], byteorder: Endian = Endian.BIG,
+                   wordorder: Endian = Endian.BIG,
                    **kwargs) -> List[bool]:
         pass
 
Ich empfehle ausserdem in der service definition der openwb2 das restart=always zu kommentieren, da sonst ständig das atreboot.sh neu ausgeführt wird.

Code: Alles auswählen

openwb@debian12:~/openWB$ cat data/config/openwb2.service
# openwb-version:2
[Unit]
Description="Regelung openWB 2.0"

[Service]
User=openwb
WorkingDirectory=/var/www/html/openWB
ExecStartPre=-/var/www/html/openWB/runs/atreboot.sh
ExecStart=/var/www/html/openWB/packages/main.py
# Restart=always
# extend timeout to 15min for long running atreboot
TimeoutStartSec=900

[Install]
WantedBy=multi-user.target
openWB-2 Standard+ | openWB EVU Kit v2 MID| 9,9kWp mit Kostal Plenticore 8.5 plus | VW ID.3, Kia EV6, Smart EQ forfour
Basti
Beiträge: 59
Registriert: Di Feb 21, 2023 3:28 pm

Re: Test openWB 2 auf Debian 12 / RPI OS Bookworm

Beitrag von Basti »

Hast du den pymodbus im Betrieb gändert oder bei Neuinstallation? Ich kriege es nicht zum laufen, es startet nicht.

Code: Alles auswählen

https://raw.githubusercontent.com/Xerolux/openwb-bookworm/pymodbus3.6.3/packages/modules/common/modbus.py

Code: Alles auswählen

pymodbus==3.6.3
Fehler:

Code: Alles auswählen

NameError: name 'event_jobs_running' is not defined
2024-02-11 13:00:26,970 - {root:270} - {ERROR:MainThread} - Fehler im Main-Modul
Traceback (most recent call last):
  File "/var/www/html/openWB/packages/main.py", line 263, in <module>
    if event_jobs_running.is_set() and len(schedule.get_jobs("algorithm")) == 0:
       ^^^^^^^^^^^^^^^^^^
NameError: name 'event_jobs_running' is not defined
2024-02-11 13:00:26,970 - {root:270} - {ERROR:MainThread} - Fehler im Main-Modul
Traceback (most recent call last):
  File "/var/www/html/openWB/packages/main.py", line 263, in <module>
    if event_jobs_running.is_set() and len(schedule.get_jobs("algorithm")) == 0:

Code: Alles auswählen

https://github.com/Xerolux/openwb-bookworm/tree/pymodbus3.6.3
rleidner
Beiträge: 917
Registriert: Mo Nov 02, 2020 9:50 am
Been thanked: 3 times

Re: Test openWB 2 auf Debian 12 / RPI OS Bookworm

Beitrag von rleidner »

Die in requirements.txt enthaltenen Python-Module werden bei Systemstart (runs/atreboot.sh) installiert.

Die Änderung an packages/modules/common/modbus.py habe ich manuell gemacht und dann openwb2 neu gestartet.

Code: Alles auswählen

sudo systemctl restart openwb2
Zum Testen kann man atreboot bzw. main.py auch aus der Shell starten - zumindest main.py zeigt meistens detailliertere Fehlermeldungen.
openWB-2 Standard+ | openWB EVU Kit v2 MID| 9,9kWp mit Kostal Plenticore 8.5 plus | VW ID.3, Kia EV6, Smart EQ forfour
Antworten