Seite 1 von 1

Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 10:29
von Peter54

Code: Alles auswählen

import serial


ser = serial.Serial(port="/dev/rfcomm0",baudrate=9600,timeout=1)

try:
    ser.isOpen()
    print("Serial ist open")
except:
    print("Serial is not open")
    exit()


if (ser.isOpen()):
    try:
        while(1):
            print(ser.readline())

    except Exception:
        print("fehler")

else:
    print("joo")





Die Daten werden von einen Hc05 an den Raspi geschickt und von Python aus wird der Port ausgelesen.
Nur auf einmal funktioniert es nicht mehr mit den Port auslesen,wenn es mal klappt :K hört er nach paar Sekunden wieder auf



Hier ist ein Bild:
[img]
https://picload.org/view/dridloiw/bilds ... -.png.html
[/img]

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 12:22
von __deets__
Deine selbstgebaute Fehlerbehandlung verhindert leider, das man da etwas substantielles sagen kann. Nimm die mal raus, damit man die eigentliche Fehlermeldung sieht. Und poste die hier natürlich.

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 13:14
von Sirius3
@Peter54: um da etwas sagen zu können, muß ersteinmal die „Fehlerbehandlung" weg, das ist nämlich nur eine Fehlerverschleierung. Die unsinnige Prüfung, ob eine Port, den man eben geöffnet hat, auch wirklich offen ist, findet man überall ist aber unnötig. `if` und `while` brauchen keine Klammern.

Code: Alles auswählen

import serial

with serial.Serial(port="/dev/rfcomm0", baudrate=9600, timeout=1) as ser:
    for line in ser:
        print(line.strip())
Welche Fehlermeldung kommt dann hier?

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 15:33
von Peter54

Code: Alles auswählen

 'device reports readiness to read but returned no data '
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 15:50
von __deets__
Na die Fehlermeldung ist doch recht eindeutig. Entweder ein anderer Prozess greift ebenfalls auf die Schnittstelle zu, oder das BT Gerät ist unzuverlässig verbunden. Welche von den Möglichkeiten musst du rausfinden, das können wir nicht.

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 19:59
von Peter54
Wenn ich das Skript starte zeigt er mir nur für paar Sekunden die Sensoren-daten an bis er wieder abbricht.

Ich möchte nur die Daten die per Bluetooth versendet werden, einfach mit den Raspberry empfangen.

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 20:25
von __deets__
Das habe ich schon verstanden. Aber das Problem hat nichts mit Python bzw. deiner Programmierung zu tun. Sondern entweder hast du noch irgendwen/irgendetwas anderes, das dieses Bluetooth Geraet ansprechen will (zB ueber cron dein Skript mehrfach gestartet, oder irgend etwas anderes), oder du hast ein Problem mit der Verbindungsqualitaet. Wenn letzteres der Fall ist, musst du die entweder verbessern, oder dein Programm so umschreiben, das es mit gelegentlichen Verbindungsabbruechen zurecht kommt.

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 22:06
von Peter54
Ich danke für deine Hilfe.....


Hiermit kommt auch meine letzte Frage.

Kannst du mir Beispiel schreiben, wie ich das mache das Python die Unterbrechung ignoriert?

Also damit ich mir ein Bild machen könnte.


Vg Peter

Re: Python liesst nur für paar Sekunden den Port aus

Verfasst: Sonntag 3. Dezember 2017, 22:10
von __deets__
Du musst nur eine while-Schleife um das Ganze legen, in welcher du die Ausnahme "serial.serialutil.SerialException" abfaengst, und danach wird dann wieder alles neu aufgemacht

Code: Alles auswählen

import serial
 
while True:
     try:
          with serial.Serial(port="/dev/rfcomm0", baudrate=9600, timeout=1) as ser:
              for line in ser:
                  print(line.strip())
     except serial.serialutil.SerialException:
           print("retry")