mittlerweile bin ich mit meinem alten Ansatz den Raspi über Websocket zu steuern weiter gekommen, in dem ich den Websocket in einem extra Thread ausgelagert hatte.
Mein Vorhaben ist jetzt die Websocket Klasse aus meinem Main Skript zu importieren und von dort zu starten.
Da ich nicht der OOP Meister bin, hoffe ich auf ein paar konstruktive Ratschläge

In der Datei svtor.py habe ich die Klasse WSHandler erstellt und von der Tornado Websocket Klasse geerbt.
In dieser Klasse wollte ich den Startvorgang des Websockets in eine Funktion packen.
(Bei der letzten Version habe ich noch eine weitere Klasse erstellt und die starten() Funktion dort rein gepackt, diesen Schritt kann man ggf. wieder rückgängig machen, wenn ich erstmal meinen Fehler erkannt habe).
Code: Alles auswählen
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.websocket
import time
import os
class WSHandler(tornado.websocket.WebSocketHandler):
def init(self, application, request, **kwargs):
tornado.websocket.WebSocketHandler.__init__(self, application, request, *$
WSHandler.__init__(self, **kwargs)
def check_origin(self, origin):
return True
def open(self):
print 'New connection was opened'
self.write_message("Welcome to my websocket!")
def on_message(self, message):
print 'Incoming message:', message
self.write_message("You said: " + message)
def on_close(self):
print 'Connection was closed...'
class Websocket(WSHandler):
def starten(self):
self.http_server = tornado.httpserver.HTTPServer(application)
self.http_server.listen(8888)
self.tornado.ioloop.IOLoop.instance().start()
application = tornado.web.Application([
(r'/ws', Websocket),
])
Code: Alles auswählen
import RPi.GPIO as GPIO
import time
import os
import svtor
PIN_OUT_1 = 29
PIN_OUT_2 = 31
PIN_RECHTS = 28
PIN_LINKS = 30
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_OUT_1, GPIO.OUT)
GPIO.setup(PIN_OUT_2, GPIO.OUT)
GPIO.setup(PIN_RECHTS, GPIO.OUT)
GPIO.setup(PIN_LINKS, GPIO.OUT)
svt = svtor.Websocket()
svt.starten()
while True:
Eingabe = raw_input("fahren oder halten: ")
if Eingabe == "fahren":
GPIO.output(PIN_OUT_2, False)
Servo = GPIO.PWM(PIN_OUT_1, 50)
Servo.start(50)
# time.sleep(5)
if Eingabe == "halten":
Servo.stop()
elif(Eingabe == "q"):
print "Programm wird beendet......"
os._exit(1)
Servo.stop()
GPIO.cleanup()
# Ungueltige Eingabe
else:
print "Ungueltige Eingabe!"
Ich komme leider nicht so weit:
Traceback (most recent call last):
File "first.py", line 17, in <module>
svt = svtor.Websocket()
TypeError: __init__() takes exactly 3 arguments (1 given)
Ich verstehe die Aussage mit dem __init__() nicht.
Die Klasse, wenn ich sie direkt aus der svtor.py aufrufe, braucht ja auch keine weiteren Argumente.
Wäre Super wenn mir einer einen Tipp geben könnte!
Viele Grüße
Tenor