Victron Geräte Verbindung via Bluetooth

@Juergen Erst mal danke für die vorarbeit.
@range4200t
Hallo Jürgen hallo Stefan Ihr habt ja anscheinend Victron über BLE laufen.
Ich habe das Heute mal bei mir Installiert.
so wie Stefan das gemacht hat. sudo pip3 install victron_ble --break-system-packages
das hat auch ohne Error funktioniert.
dann abe ich von meinem 230V Lader und von meinem Ladebooster die Mac und KEY eingegeben. und ich bekomme nur eine Fehlermeldung.
Wenn ich den Befehl in der konsole eingebe bekomme ich folgende Meldung.

pi@pekaway:~ $ sudo timeout -s SIGINT 5s /usr/local/bin/victron-ble read MAC@KEY
INFO:victron_ble.scanner:Reading data for ['MAC']
ERROR:dbus_fast.message_bus:A message handler raised an exception: 'BLEDevice' object has no attribute 'rssi'
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 797, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1058, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1101, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 233, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 238, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 113, in callback
    "rssi": ble_device.rssi,
            ^^^^^^^^^^^^^^^
AttributeError: 'BLEDevice' object has no attribute 'rssi'
ERROR:dbus_fast.message_bus:A message handler raised an exception: 'BLEDevice' object has no attribute 'rssi'
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 797, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1058, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1101, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 233, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 238, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 113, in callback
    "rssi": ble_device.rssi,
            ^^^^^^^^^^^^^^^
AttributeError: 'BLEDevice' object has no attribute 'rssi'
ERROR:dbus_fast.message_bus:A message handler raised an exception: 'BLEDevice' object has no attribute 'rssi'
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 797, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1058, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1101, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 233, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 238, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 113, in callback
    "rssi": ble_device.rssi,
            ^^^^^^^^^^^^^^^
AttributeError: 'BLEDevice' object has no attribute 'rssi'
ERROR:dbus_fast.message_bus:A message handler raised an exception: 'BLEDevice' object has no attribute 'rssi'

Ahtdf, [03.08.2025 13:50]
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 797, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1058, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1101, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 233, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 238, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 113, in callback
    "rssi": ble_device.rssi,
            ^^^^^^^^^^^^^^^
AttributeError: 'BLEDevice' object has no attribute 'rssi'
ERROR:dbus_fast.message_bus:A message handler raised an exception: 'BLEDevice' object has no attribute 'rssi'
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 797, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1058, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1101, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 233, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 238, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 113, in callback
    "rssi": ble_device.rssi,
            ^^^^^^^^^^^^^^^
AttributeError: 'BLEDevice' object has no attribute 'rssi'

Aborted!

Hat einer eine Ahnung wo der Fehler liegt.
Ich soll das nächste Woche bei einem Kollegen installieren, aber bei der Fehlermeldung hat das keinen Sinn :wink:
Gruß Arno

Hallo Arno, kannst du mal prüfen, ob der Pfad richtig ist ?

" Dadurch ändert sich der Pfad von victron-ble zu /home/pi/.local/bin/victron-ble . Bedenkt das falls ihr meinen Flow verwendet."

Gruß, Stefan

Ich prüfe das, danke

victron_ble erwartet ein Attribut rssi aber bleak liefert dieses Attribut nicht mehr (siehe bleak changelog Version 0.20.0)

Gibt auch schon ein Github Issue dafür: Clarification on 'BLEDevice' object has no attribute 'rssi' error during victron-ble read · Issue #75 · keshavdv/victron-ble · GitHub

Hier im scanner.py in Zeile 113:

Also könntest du versuchen entweder bleak auf eine Version vor 0.20.0 (pip show bleak um die Version zu prüfen) zu downgraden, oder die scanner.py umzuschreiben, sowas wie
"rssi": getattr(ble_device, "rssi", None),
dann wird ein “None” geliefert, wenn das Attribut nicht vorhanden ist. Nachhaltiger wäre aber eher, wenn der Developer von victron_ble das direkt anpassen würde.

Danke @Vincent für die Antwort, das du für soetwas noch Zeit findest :wink: Daumen hoch dafür. Dann muss ich mal schauen was ich da finden kann.
Mich wundert nur das andere funtionieren, hab ich zuviele Updates gemacht??
Gruß Arno

Zumindest ist das das, was ich aus der Fehlermeldung lese :smiley:
Vielleicht schafft aber auch ein Update von Bleak Abhilfe, müsstest du mal testen. Es gibt dazu auch zwei verschiedene Python Umgebungen, einmal für sudo und einmal für den Nutzer Pi.

Wenn du ohne sudo installierst, ist das Modul in /home/pi/.local/lib/python3.11/site-packages,
wenn du mit sudo installierst in /usr/local/lib/python3.11/dist-packages.

Je nachdem wie du dann victron_ble startest wird es aus dem einen oder aus dem anderen Ordner gesucht.

@Vincent
ich habe den Text so übernommen, jetzt funktioniert es.
Zeile 113 "rssi": getattr(ble_device, "rssi", None),
Danke!!!

1 Like

Beim Kollegen hats auch funktioniert, 2 Solarregler und ein Smart Shunt. :+1:

1 Like

Hallo zusammen :slight_smile:

Kann es sein, dass beim Victron MPPT Smart Solar keine Panel Volt per Bluetooth übertragen wird? zumindest kann ich das nicht finden:Sonst habe ich es dank der Hilfe von super hinbekommen. Danke dafür.

payload: object
battery_charging_current: 5.7
battery_voltage: 13.38
charge_state: “bulk”
charger_error: “no_error”
model_name: “SmartSolar Charger MPPT 100/30”
solar_power: 79
yield_today: 60

des Weiteren habe ich immer das Problem, dass bei der Starter Batterie immer °C angezeigt wird:
(msg.payload.payload.starter_voltage)

Starter Battery
12.77°C

du hast in einer TextNode soetwas stehen

wenn du das °C wegmachst und ein V dann sieht die ganze Sache anders aus :wink:

1 Like

habs hinbekommen,

kann es ein, dass wenn man zu viele Daten per bluetooth abruft und die dann auch immer an Display sendet, wie Batteriestatus, Solarladung etc. das Display langsamer reagiert?

Ich hatte jetzt schon mehrmals im connection timeout als Nachricht bekommen.

Hängt das evtl. damit zusammen? So wie ich das verstehe, werden ja nur wenige Nachrichten an den Touchscreen geschickt

Grüss euch

Habe Gestern Nacht versucht einen Victron Batterie Protect einzubinden mit mehr oder weniger Erfolg, eigentlich bekomme ich die Daten ganz normal

{"name": "BatteryProtect HQ2433WKXVD", "address": "CE:0C:2D:FB:BE:1F", "rssi": -82, "payload": {"alarm_reason": "no_alarm", "device_state": "active", "error_code": "no_error", "input_voltage": 15.08, "model_name": "Smart BatteryProtect 12/24V-100A", "off_reason": "no_reason", "output_state": "on", "output_voltage": 0.92, "warning_reason": "no_alarm"}}

aber sobald ich den Lastausgang in der Victron App deaktiviere bekomm ich folgende Fehlermeldung

INFO:victron_ble.scanner:Reading data for ['ce:0c:2d:fb:be:1f']
ERROR:root:A message handler raised an exception: 0 is not a valid OutputState
Traceback (most recent call last):
  File "src/dbus_fast/message_bus.py", line 805, in dbus_fast.message_bus.BaseMessageBus._process_message
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 997, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1040, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 273, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 247, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 108, in callback
    parsed = device.parse(raw_data)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/base.py", line 1046, in parse
    parsed = self.parse_decrypted(decrypted)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/smart_battery_protect.py", line 90, in parse_decrypted
    OutputState(output_state) if output_state != 0xFF else None
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 717, in __call__
    return cls.__new__(cls, value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 1133, in __new__
    raise ve_exc
ValueError: 0 is not a valid OutputState

Aborted!

wenn ich das richtig interpretieren sollt würde ich behaupten das script bekommt einen wert zurück mit dem er nichts anfangen kann weil er ihn nicht kennt

so nun da ich mich mit Python ned auskenn hätte ich gern gewusst was ich wo ändern muss und bitte daher im eure Hilfe

Danke

Moin @Nightman,

am ehesten wird dir da der Ersteller der Software helfen können. Du könntest ein Issue auf GitHub - keshavdv/victron-ble: A Python API to parse Victron Instant Readout BLE advertisements erstellen.

Ich kann dir zumindest sagen, dass victron_ble den Wert 1 als ON und 4 als OFF interpretiert, aber wohl den Wert 0 vom Battery Protect erhält und damit nichts anfangen kann.

In der Datei /usr/local/lib/python3.11/dist-packages/victron_ble/devices/smart_battery_protect.py müsste sowas oben auftauchen:

class OutputState(Enum):
    ON = 1
    OFF = 4

Da das passiert, wenn du den Lastausgang deaktivierst, würde ich mal versuchen die 4 durch eine 0 zu ersetzen und schauen was dann passiert. Aus der Dokumentation von Victron geht leider nicht hervor, welcher Wert was bedeutet.

@kilian

du bist mein Held …. die 4 gegen 0 getauscht und es klappt

danke

Hallo zusammen,

jetzt hab ich selber ein Problem :man_facepalming:

Hab VanPi OS 2.09 installiert und bekomme beim Victron Ladebooster diese Fehlermeldungen.

Hat das schon jemand eine Lösung für ?

# /usr/local/bin/victron-ble read D4:4B:0F:DA:CB:DA@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
INFO:victron_ble.scanner:Reading data for ['d4:4b:0f:da:cb:da']
ERROR:root:A message handler raised an exception: 129 is not a valid OffReason
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/dbus_fast/message_bus.py", line 785, in _process_message
    result = user_handler(msg)
             ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1102, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1145, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 235, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 237, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data, advertisement)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 112, in callback
    parsed = device.parse(raw_data)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/base.py", line 1048, in parse
    parsed = self.parse_decrypted(decrypted)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py", line 76, in parse_decrypted
    "off_reason": OffReason(off_reason),
                  ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 717, in __call__
    return cls.__new__(cls, value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 1133, in __new__
    raise ve_exc
ValueError: 129 is not a valid OffReason
ERROR:root:A message handler raised an exception: 129 is not a valid OffReason
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/dbus_fast/message_bus.py", line 785, in _process_message
    result = user_handler(msg)
             ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1102, in _parse_msg
    self._run_advertisement_callbacks(
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/manager.py", line 1145, in _run_advertisement_callbacks
    callback(device_path, device.copy())
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/bluezdbus/scanner.py", line 235, in _handle_advertising_data
    self.call_detection_callbacks(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/bleak/backends/scanner.py", line 237, in call_detection_callbacks
    callback(device, advertisement_data)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 39, in _detection_callback
    self.callback(device, data, advertisement)
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 112, in callback
    parsed = device.parse(raw_data)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/base.py", line 1048, in parse
    parsed = self.parse_decrypted(decrypted)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py", line 76, in parse_decrypted
    "off_reason": OffReason(off_reason),
                  ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 717, in __call__
    return cls.__new__(cls, value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/enum.py", line 1133, in __new__
    raise ve_exc
ValueError: 129 is not a valid OffReason

Guten Morgen,

Ich habe das Update noch nicht eingespielt und ich frage meine Geräte auch nicht mehr über victron_ble ab sondern umper einen Esp32 per ble aber ich war mal so frei, deine Fehlermeldung bei ChatGPT einzugeben und bekam dann folgende Antwort, vielleicht hilft es dir weiter. Kannst mir gerne auch nochmals die Ausgaben senden dann geb ich dir weitere Antworten von der Ki…

Alles was die KI sagt ist mit Vorsicht zu behandeln, denn es kann auch falsch sein!

Kurzfassung:
Das ist kein VanPi-Bug und kein Victron-Defekt, sondern ein bekanntes Problem in der Python-Lib victron_ble.6 Es tritt genau bei deinem Ladebooster (Orion DC-DC) im Zustand

„Input voltage lock-out, Engine shutdown detected“
auf – dafür wird intern der Code 0x81 = 129 verwendet, den ältere victron_ble-Versionen noch nicht kennen.

Dafür gibt es bereits einen Fix im Projekt: Pull-Request „Add OffReason 0x81 to support Orion DC-DC“ wurde 2023 gemergt.


Was du konkret tun kannst

Die Schritte unter A sind eine Reihenfolge (alle ausführen).
B ist eine Alternative, falls A bei dir nicht möglich ist.


A) Saubere Lösung: victron_ble aktualisieren (empfohlen)

  1. Version prüfen

/usr/local/bin/victron-ble --version

oder

python3 -m pip show victron_ble

  1. Library updaten

sudo python3 -m pip install --upgrade victron_ble

Falls pip meckert, probier alternativ:

sudo pip3 install --upgrade victron_ble

Damit wird die Lib aus PyPI aktualisiert (aktuelle Versionen sind 0.9.x und enthalten den OffReason-Fix).

  1. Testen

Danach noch einmal dein Kommando:

/usr/local/bin/victron-ble read D4:4B:0F:DA:CB:DA@DEINKEYHIER

Wenn alles passt, sollte kein ValueError: 129 is not a valid OffReason mehr auftauchen. Stattdessen bekommst du normal JSON mit off_reason.


B) Quick-&-Dirty Workaround (falls Update nicht geht)

Nur nötig, falls VanPi-Updates dir das Paket überschreiben oder das Update scheitert.

Idee: Unbekannte OffReason-Werte abfangen, statt eine Exception zu werfen.

  1. Datei öffnen:

sudo nano /usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py

  1. Die Zeile suchen (steht im Trace):

“off_reason”: OffReason(off_reason),

  1. Ersetzen durch z.B.:

try:
off_reason_enum = OffReason(off_reason)
except ValueError:

Fallback: unbekannter Code, einfach numerisch durchreichen

off_reason_enum = off_reason

parsed = {

“off_reason”: off_reason_enum,

}

Oder, wenn du es richtig „schön“ willst, den Enum in base.py um den Eintrag für 0x81 erweitern – genau das macht auch der gemergte PR.


Noch wichtig zu wissen

Dein Victron-Ladebooster funktioniert dabei ganz normal; der Fehler kommt nur in der Auswertungs-Software, wenn er den speziellen Off-Grund 0x81 („Input voltage lock-out + Engine shutdown detected“) senden will.

Sobald victron_ble aktualisiert ist, kannst du den Boosterzustand ganz normal in VanPi bzw. per victron-ble read auslesen.


Wenn du magst, kannst du mir die Ausgabe von

/usr/local/bin/victron-ble --version
python3 -m pip show victron_ble

posten, dann sag ich dir genau, ob dein Stand schon den Fix enthalten sollte oder nicht.

Name: victron_ble
Version: 0.9.3
Summary: Python API to read Victron Instant Readout advertisements
Home-page: GitHub - keshavdv/victron-ble: A Python API to parse Victron Instant Readout BLE advertisements
Author: keshavdv
Author-email:
License: Unlicense
Location: /usr/local/lib/python3.11/dist-packages
Requires: bleak, click, pycryptodome
Required-by:

Vielen Dank für deine Hilfe :slight_smile:

das funktioniert nicht

Traceback (most recent call last):
  File "/usr/local/bin/victron-ble", line 3, in <module>
    from victron_ble.cli import cli
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/cli.py", line 7, in <module>
    from victron_ble.scanner import DebugScanner, DiscoveryScanner, Scanner
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/scanner.py", line 14, in <module>
    from victron_ble.devices import Device, DeviceData, detect_device_type
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/__init__.py", line 13, in <module>
    from victron_ble.devices.dcdc_converter import DcDcConverter, DcDcConverterData
  File "/usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py", line 76
    try:
    ^^^

Das sagt die Ki dazu:

Das, was du jetzt siehst, ist kein „ValueError 129“ mehr, sondern ein Syntax/Indentation-Fehler in der Datei:

> File “…/dcdc_converter.py”, line 76 try: ^^^

Heißt: Du hast den try: wahrscheinlich mitten in ein Dict oder ohne passende Einrückung eingefügt. Python erwartet an der Stelle keinen Block.

Ich gebe dir jetzt eine saubere, funktionierende Variante, die du 1:1 einbauen kannst.

Fix (Reihenfolge – bitte alles so machen)

  1. Datei öffnen

sudo nano /usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py

  1. In der Datei zur Stelle springen

Drück in nano:

CTRL + _ (Unterstrich)

dann 70 (oder grob um die Zeile 76)

Enter

  1. Genau so ändern (wichtig: Einrückung!)

Suche in parse_decrypted(…) den Bereich, wo das parsed = { … } gebaut wird und wo aktuell sowas steht:

“off_reason”: OffReason(off_reason),

Ersetze es nicht direkt im Dict durch try:.

Stattdessen mach es so: VOR dem Dict berechnen, dann im Dict nur die Variable verwenden:

off_reason = decrypted.get(“off_reason”) # oder wie es bei dir heißt

try:

off_reason_enum = OffReason(off_reason)

except ValueError:

off_reason_enum = off_reason

parsed = {

\# ... andere felder ...

"off_reason": off_reason_enum,

\# ... andere felder ...

}

:white_check_mark: Wichtig:

try: muss auf der gleichen Einrückungsebene stehen wie parsed = { … }

nicht innerhalb vom { … } Dict

  1. Syntax prüfen (RUN & POST OUTPUT)

Bevor du wieder startest, prüf einmal nur die Python-Syntax:

python3 -m py_compile /usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py

Wenn keine Ausgabe kommt: Syntax ist ok :white_check_mark:

Wenn ein Fehler kommt: post die komplette Meldung, dann sag ich dir exakt, wo die Einrückung noch falsch ist.

  1. Dann testen

/usr/local/bin/victron-ble read D4:4B:0F:DA:CB:DA@DEINKEY

-–

Wenn du’s schneller willst: Poste den relevanten Block

Wenn du willst, schick mir bitte 10–20 Zeilen um die Zeile 76 (z.B. Zeile 60–90) aus dcdc_converter.py. Dann gebe ich dir den exakten korrigierten Block zurück, den du 1:1 ersetzen kannst.

Tipp zum Ausgeben der Zeilen (RUN & POST OUTPUT):

nl -ba /usr/local/lib/python3.11/dist-packages/victron_ble/devices/dcdc_converter.py | sed -n ‘60,95p’

(Wenn du sed nicht willst: sag’s, dann zeig ich dir die Alternative ohne sed.)

Das mit dem Einrücken macht mir auch oft Stress by Python ich bin halt kein Entwickler….

Wenn mir den ganzen Code sendest verbessert ChatGPT den auch. Oder gibst ihn selber mal ein, da muss man soch auch nicht registrieren…