#! /usr/bin/python3 from http.server import SimpleHTTPRequestHandler import socketserver import logging from led import setLED responsehtml = '

LED-Server

LED ist $ledstate_str

' logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) # Da http ein stateless Protokoll ist, wird der Handler bei jedem Request neu # aufgebaut! Deswegen benutzen wir hier setup() statt __init__() class LEDHttpRequestHandler(SimpleHTTPRequestHandler): def setup(self): logging.debug('setting up Handler') self.ledstate = False super().setup() def do_GET(self): logging.debug(f'path= {self.path}') logging.debug('GET: empfangen') self.send_response(200) self.send_header('Content-Type:','text/html') # Ende der Header markieren, dass ist wichtig, sonst kommt der Response nicht zurück! self.end_headers() #Wenn im Requestpath 'led='on'enthalten ist, schalten wir die LED ein. Bei off aus if '?led=' in self.path: if 'on' in self.path: logging.debug('schalte LED ein') self.ledstate = True setLED(self.ledstate) elif 'off' in self.path: logging.debug('schalte LED aus') self.ledstate = False setLED(self.ledstate) logging.debug(f'ledstate={self.ledstate}') response = responsehtml.replace('$ledstate_str',('aus','an')[self.ledstate]) self.wfile.write(response.encode()) class http_server: def __init__(self): def handler(*args): myHandler(*args) server = HTTPServer(('', 8080), handler) if __name__ == '__main__': logging.debug('MAIN: start') setLED(False) # Beim Start LED ausschalten #Request-Handler aufbauen handler = LEDHttpRequestHandler handler.ledstate = False #Socketserver mit unserem Handler starten with socketserver.TCPServer(('',8080),handler) as httpd: logging.info('SERVER: start') try: #Server läuft bis CTRL-C gedrückt wird. httpd.serve_forever() except KeyboardInterrupt: pass finally: setLED(False)