Berechtigungsproblem bei Zugriff auf seriellen Port

  • Hallo Forum,

    ich möchte auf meinem Pi3 unter Raspbian einen CO2-Sensor nutzen, der seriell über GPIO-Ports eingebunden ist. Der Benutzer "pi" ist Mitglied folgenden Gruppen:

    Code
    pi@raspberrypi:~ $ groups pi
    pi : pi adm tty dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

    Ich habe eine udev-Regel erstellt:

    Code
    sudo nano /etc/udev/rules.d/50-myusb.rules
    -->
    KERNEL=="ttyAMA[0-9]*",MODE="0666"

    Nach Systemstart sehen die betreffenden Berechtigungen so aus:

    Code
    pi@raspberrypi:~ $ ls -l /dev/ttyAMA0
    crw-rw-rw- 1 root dialout 204, 64 Aug  4 20:13 /dev/ttyAMA0

    Der Abruf des gemessenen CO2-Werts funktioniert fehlerfrei:

    Code
    pi@raspberrypi:~/mh-z19 $ python3 -m mh_z19
    {"co2": 403}

    Nach diesem Abruf allerdings sind die Berechtigungen plötzlich zurückgesetzt und die Gruppe dialout nicht mehr gesetzt:

    Code
    crw--w---- 1 root tty 204, 64 Aug  4 20:15 /dev/ttyAMA0

    Und bei nochmaliger Messwertabfrage folgt schlüssigerweise eine Exception:

    Manuell können die Permissions wieder gesetzt werden:

    Code
    sudo chmod 777 /dev/ttyAMA0

    Aber auch das hält nur für jeweils eine Abfrage

    Ich habe mal den verwendeten Skript-Code inspiziert, muss aber zugeben, dass ich nicht jede Programmzeile verstehe. Werden dort irgendwo Berechtigungen zurückgenommen?

    Könnt Ihr euch einen Reim darauf machen oder wisst eine Lösung, wie ich die Zugriffsberechtigung permanent setzen kann?

    Hier der Python-Code, der aus diesem  Projekt übernommen wurde:

    https://github.com/UedaTakeyuki/mh-z19/blob/master/mh_z19.py

  • Berechtigungsproblem bei Zugriff auf seriellen Port? Schau mal ob du hier fündig wirst!

  • Einer gewissen Ahnung folgend habe ich jetzt die Zeilen 81 und 82 auskommentiert:

    Code
    # if not serial_console_untouched:
    #    start_getty()

    Damit wird an dieser Stelle jetzt der Aufruf dieser Methode ausgelassen:

    Code
    def start_getty():
        start_getty = ['sudo', 'systemctl', 'start', 'serial-getty@%s.service' % partial_serial_dev]
        p = subprocess.call(start_getty)

    Und jetzt funktioniert es. Ich kann aber nicht behaupten, dass ich genau verstehe, warum das Problem damit gelöst ist. Vielleicht kann mir jemand auf die Sprünge helfen. Ansonsten werde ich das Thema in Kürze als erledigt markieren.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!