Variable per Socket senden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo!

    Bin absoluter Beginner in sachen Python und zu folgendem Problem gekommen:

    Ich hab eine Steuerung diverser Geräte per NetIO App und einem Python Server realisiert.
    Nun möchte ich auch die Temperatur eines Senors an App zurückgeben, doch ich schaff es einfach nicht.

    hier mein Versuch:

    #Temperatur
    if line == 'Temp':
    print "Temperatur wird ausgelesen"
    Temp = open("/root/temp.txt").readlines()
    print Temp
    self.send('Temp\n')

    else:
    ....

    Temp wird hierbei auch schon richtig ausgelesen und ich seh die Zahl im Terminal, nur im App steht einfach "Temp".
    Bin mir sicher es ist ein simpler Formatierungsfehler, doch ich komm nicht drauf :(

    auch self.send(Temp()\n) und weitere M[/code]öglichkeiten haben nicht funktioniert..

    Mit der Hoffnung auf schnelle Hilfe, Hannes ;)

  • Danke für die schnelle Antwort!

    leider funktioniert auch das nicht: folgende Meldung

    Connected from ('IPAdresse', 64309)
    Temperatur wird ausgelesen
    ['12.875\n']
    error: uncaptured python exception, closing channel <__main__.Client co nnected IPAdresse:64309 at 0xb6c245a8> (<type 'exceptions.TypeError' >:cannot concatenate 'str' and 'list' objects [server1.py|readwrite|186 ] [/usr/lib/python2.7/asyncore.py|handle_read_event|449] [server1.py|ha ndle_read|48] [server1.py|handle_command|161] [/usr/lib/python2.7/async ore.py|send|549])
    ^CTraceback (most recent call last):
    File "server1.py", line 227, in <module>
    for obj, flags in evt:
    File "server1.py", line 217, in poll
    evt = self.epoll.poll()


    Glaub ich brauche das "\n" im befehl, aber auch mit

    self.send(Temp\n) gehts nicht:

    root@rapsberrypi:~# python server1.py
    File "server1.py", line 161
    self.send(Temp\n)
    ^
    SyntaxError: unexpected character after line continuation character

    • Offizieller Beitrag

    Das \n brauchst du pauschal nicht, das ist ein Zeilenumbruch, welcher nachdem Auslesen aus Dateien sogar eher Probleme verursachen kann.
    So hast du nur die Temperatur in Variable Temp

    Code
    Temp = open("/root/temp.txt").readlines().strip()

    gesendet wird dann mit:

    Code
    self.send(Temp)
  • Temperatur wird ausgelesen
    error: uncaptured python exception, closing channel <__main__.Client connected 62.47.59.136:64963 at 0xb6c55288> (<type 'exceptions.AttributeError'>:'list' object has no attribute 'strip' [server1.py|readwrite|185] [/usr/lib/python2.7/asyncore.py|handle_read_event|449] [server1.py|handle_read|48] [server1.py|handle_command|159])


    sorry fürs noob-sein :D und danke für deine geduld!

    • Offizieller Beitrag

    hmmm, seit wann returnt open eine liste..egal...dann halt so

    Code
    Temp = open("/root/temp.txt").readlines()[0].strip()

    und hoffen wir mal das an der ersten Stelle auch wirklich die Temperatur steht.

    Edit: macht natüich sinn das readlines() eine liste zurückgibt ;). Wenn da eh nur eine Zeile drin steht würde ich readline() nutzen.

    Die interktive konsole von python ist ein tolles spielzeug. da kann man die befehle einfachmal reinhacken und kriegt gleich ne fehlermeldung ;)

  • danke nochmal! also mit deinem letzten code bekomme ich jetzt keine fehlermeldung und die Temperatur wird auch wieder in der Konsole ausgegeben!
    Leider bekomme ich aber mit dierser Variante überhaupt keine Antwort zum APP...

    schreiben ich zum beispielt self.send(Hallo\n) empfange ich auch Hallo...

    ich würds trotzdem nochmal gerne mit einem LineSplit versuchen, doch weder

    self.send(Temp\n)

    noch

    self.send(Temp)\n

    wird von Python angenommen... kannst mir hier nochmal helfen bitte? :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!