------------------------------------------------------------
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.