Sensor TF-luna am UART des Loxberry Version 3.0.1.3 mit Raspberry Pi 3B+:

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Lexa
    Azubi
    • 14.12.2016
    • 6

    #1

    Sensor TF-luna am UART des Loxberry Version 3.0.1.3 mit Raspberry Pi 3B+:

    Guten Tag, ich bekomme den Sensor TF-luna am UART (PIN 8+10) nicht zum Laufen. Auf dem Raspberry läuft mein Programm, auf dem Loxberry nicht, Fehlermeldung:
    ------------------------------------------------------------
    Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 322, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
    PermissionError: [Errno 13] Permission denied: '/dev/serial0'
    During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
    File "/opt/loxberry/system/cron/cron.reboot/./WEBservice_Wert_an_Loxone.py", line 10, in <module>
    ser = serial.Serial(
    ^^^^^^^^^^^^^^
    File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 244, in __init__
    self.open()
    File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 325, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
    serial.serialutil.SerialException: [Errno 13] could not open port /dev/serial0: [Errno 13] Permission denied: '/dev/serial0'
    ------------------------------------------------------------
    Mein Programm:

    #!/usr/bin/python3
    import serial
    import requests
    import time

    TIMEOUT = 1
    CYCLE_TIME = 1.0 # Sekunden

    ser = serial.Serial(
    port='/dev/serial0',
    baudrate=115200,
    timeout=TIMEOUT)

    LOXONE_URL = "http://user:kennwort@192.168.xx.yy/dev/sps/io/TF-luna_Abstand_Zahlenwert/{}"

    def debug_raw(ser):
    data = ser.read(9)
    print("RAW:", data.hex())

    def read_tf_luna_frame(ser):
    while True:
    if ser.read(1) != b'\x59':
    continue
    if ser.read(1) != b'\x59':
    continue
    # Restliche 7 Bytes lesen
    payload = ser.read(7)
    if len(payload) != 7:
    continue

    frame = b'\x59\x59' + payload

    # Checksumme prüfen
    checksum = sum(frame[:8]) & 0xFF
    if checksum != frame[8]:
    continue

    # Daten extrahieren
    distance = frame[2] + frame[3] * 256 # cm
    strength = frame[4] + frame[5] * 256
    temperature = (frame[6] + frame[7] * 256) / 8.0 - 256

    return distance, strength, temperature

    def init_tf_luna(ser):
    # Continuous measurement mode
    ser.write(bytes([0x5A, 0x05, 0x00, 0x01, 0x60]))
    time.sleep(0.1)

    # Output frequency 100 Hz
    ser.write(bytes([0x5A, 0x06, 0x03, 0x64, 0x00, 0x00]))
    time.sleep(0.1)

    def main():
    try:
    init_tf_luna(ser)
    time.sleep(1)


    while True:
    ser.reset_input_buffer()
    time.sleep(0.05)


    distance, strength, temperature = read_tf_luna_frame(ser)
    distance=888
    print(f"Distanz: {distance} cm | Signal: {strength}")

    try:
    requests.get(
    LOXONE_URL.format(distance),
    timeout=2)

    except requests.RequestException as e:
    print("Loxone Fehler:", e)

    time.sleep(2)

    except KeyboardInterrupt:
    print("\nBeendet.")
    finally:
    ser.close()

    if __name__ == "__main__":
    main()
    ------------------------------------------------------------


    Das Programm liegt in Ordner /opt/loxberry/system/cron/cron.reboot
    und seine Dateiberechtigungen sind auf Ausführen gesetzt.


    Offensichtlich wird der UART vom Betriebssystem belegt. Wie kann ich den frei bekommen?

    Vielen Dank in Voraus.
Lädt...