Cerbo/VenusOS - Zugriff auf ttyUSB0 verhindern

Hallo zusammen,

ich hätte da mal eine kleine Frage …

Vorweg:
Ich habe auf meinem Cerbo-S GX zusätzlich evcc installiert. Darin ist auch die Steuerung (PV-Überschuss) meiner Brauchwasserwärmepumpe integriert, deren Werte per Modbus über einen USB-RS485-Adapter ausgelesen werden.

Problem:
Mein Script zum Auslesen der Werte kommt sich scheinbar immer wieder mit einem anderen Dienst ins Gehege. Ich nehme an, dass dort regelmäßig nach neuen Geräten gescant wird. Zumindest ist auf dem Adapter ständig Datenverkehr zu verzeichnen dessen Quelle ich nicht identifizieren kann und nach einigen Stunden hängt sich der Adapter auch immer auf.

Gibt es irgendeine Möglichkeit herauszufinden, welcher Dienst noch auf /dev/ttyUSB0 zugreift? Und wenn ja, wie kann man das verhindern?

“serial-starter” kann ich schon mal ausschließen, da habe ich den USB-Adapter zur ignore-Liste hinzugefügt. Leider ohne Erfolg.
Update: er war es doch :wink: … aber die Probleme reichen scheinbar noch tiefer.

Vielen Dank

Ich antworte mir mal selbst :laughing:
Nachdem ich ewig versucht habe den Cerbo daran zu hindern ständig auf den RS485-Adapter zuzugreifen, habe ich den Adapter jetzt an einen alten Raspi 1B gehangen und dort eine Modbus-TCP-Bridge installiert. Ist vollkommener overkill, aber funktioniert.
Für Ideen und Vorschläge bin ich aber weiterhin offen …

hallo,
da gibt es eine sehr einfache loesung, vor allem, weil du ein eigenes script benutzt:

das script muss nur das device umbenennen und ein dummy-file unter dem alten namen anlegen, dann kommt dir ein anderes programm mehr in die quere. allerdings kann das device, wenn es vom usb getrennt und wieder verbunden wird, einen anderen namen bekommen. du kannst natuerlich auch das dummy-file mal weglassen. sollte auch funktionieren.

ich mache das manchmal unter linux, wenn ich ein filesystem pruefen will, damit mir der automounter nicht in die quere kommt!

tschuess

Vielen Dank!
Manchmal liegt die Lösung doch so nah …

Folgendes steht jetzt am Anfang meines Scripts:
(es geht bestimmt auch einfacher, aber meine Kenntnisse sind “noch ausbaufähig” :wink:)

#!/bin/sh

exec 2>> /var/log/evcc/wwwp_temp_err.log

COUNT=0
STRING1="E: ID_SERIAL_SHORT=A5069RR4"

STRING2=$(udevadm info --name=/dev/wwwp_modbus | grep -i "ID_SERIAL_SHORT")

if [ "$STRING1" == "$STRING2" ] ; then
        COUNT=11
fi

while [ "$COUNT" -le 9 ]; do

        STRING2=$(udevadm info --name=/dev/ttyUSB$COUNT | grep -i "ID_SERIAL_SHORT")

        if [ "$STRING1" == "$STRING2" ] ; then
                mv /dev/ttyUSB$COUNT /dev/wwwp_modbus
                COUNT=11
        else
                COUNT=$(( $COUNT + 1 ))
        fi
done

if [ "$COUNT" = 10 ]; then
        exit 1
fi

[restliches Script...]

Das Skript prüft also zu Beginn, ob der USB-Adapter bereits korrekt eingebunden ist.
Ist dies nicht der Fall, prüft es die Adressen /dev/ttyUSB0-9 ob der Adapter an einem dieser Punkte eingebunden ist. Findet es den Adapter hier, wird er entsprechend umbenannt. Ansonsten wird mit ‘exit 1’ beendet.

Es gibt übrigens sogar eine Anleitung von Victron wie man den serial-starter ausbremsen kann:
Link
Das ändert aber nix daran, dass die Verbindung immer wieder mal unterbrochen wird und dabei wechselt der Adapter immer von /dev/ttyUSB0 zu /dev/ttyUSB1 und beim nächsten Mal wieder zurück.