Sock hängt sich auf Python

Gast #4532077
Hallo liebes Forum,

Ich bastele grade an einem "Gateway" für Sensordaten auf einem Raspberry 
Pi, mein Code läuft auch bis auf dem Socket.
Allerding finde ich den fehler nicht. Vieleicht kann mir jemand helfen, 
ich bin noch neu in Python vieleicht kann mir ja
auch jemand noch Tips geben zu Optimirung. :idea:

Hardware:
Raspberry Pi 1
Geigerzähler an ttyAMA0 der jede Sekunde den Aktuellen Wert schickt.( 
Optional USB tauglich, war mir aber zu kompliziert :oops: )
SPS über Ethernet angekoppelt.

Software:
Das Script soll die Daten von der Seriellen Schnittstelle auf dem 
Ethernet an Port 10001 bereitstellen.
Es sollen noch weitere Sensoren folgen ( Temperatur, Luftfeuchte, usw ).

Hier der Code:
1
#! /usr/bin/python3
2
import sys, tkinter, serial, time, _thread, socket, platform
3

4
#Sytem Variables
5
global hostname
6
global tcp_port
7
global tcp_ip
8
global ser
9
global act_rad
10
global buffer_size
11

12
tcp_ip = "192.168.2.50"
13
tcp_port = 10001
14
buffer_size = 1024
15

16
#Serielle Schnittstelle Öffnen und das empfangene in eine Varriable Schreiben
17
def openser():
18
    ser = serial.Serial()
19
    ser.port = "COM1"
20
    ser.baudrate = 9600
21

22
    ser.open()
23
    if ser.isOpen():
24
        print ("Serial Port Open!!")
25
        while ser.isOpen:
26
             act_rad = float(ser.readline())/100
27
    else:
28
        print ("Error!!")
29

30

31
#Socket Öffnen und auf Port 10001 Lauschen bis das Sendecommand von SPS kommt ("send_A1")
32
def opentcp():
33
    try:
34
        while 1:
35
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
36
            s.bind((tcp_ip, tcp_port))
37
            s.listen(1)
38
            conn, addr = s.accept()
39
            print ('Connection address:', addr)
40
            while 1:
41
                 data = conn.recv(buffer_size)
42
                 if not data: break
43

44
                 else:
45
                     print (data)
46
                     if data == b'send_A1' or data == b'send_A1\r\n':
47
                        conn.send(bytes("A1=" + str(act_rad) + ",\r\n", 'utf-8'))
48

49
        conn.close()
50
    except:
51
        print ("Verbindung vom Remote Beendet") #Wenn Sock beendet wird, neu Starten.
52
        tcpdata_threadID = _thread.start_new_thread(opentcp, ())
53

54

55
tcpdata_threadID = _thread.start_new_thread(opentcp, ())
56
openser()


Es wäre schön wenn mir jemand Helfen könnte,

mit Freundlichen Grüßen
Crazy
Gast
Das Script springt nach dem er den Befehl "send_A1" empfangen hat, in 
die except ausnahme...
1
     else
2
        print (data)
3
        if data == b'send_A1' or data == b'send_A1\r\n':       <-- von hier
4
            conn.send(bytes("A1=" + str(act_rad) + ",\r\n", 'utf-8'))
5

6
        conn.close()
7

8
    except:                          <-- nach hier
9
        print ("Verbindung vom Remote Beendet") #Wenn Sock beendet wird, neu Starten.
10
        tcpdata_threadID = _thread.start_new_thread(opentcp, ())

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.