data van een website verwerken

Pagina: 1
Acties:
  • 433 views

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • fe203
  • Registratie: September 2011
  • Laatst online: 27-12-2020
Ik heb op internet een programma gevonden waar je via een webpagina op 2 knoppen kunt drukken om dan een actie te doen met python.
Om het programma wat netter te maken wil ik dit in een subprogramma plaatsen en via een hoofdprogramma de data verwerken als er op een knop gedrukt wordt.

Ik heb al vanalles geprobeerd om de data naar het hoofdprogramma te krijgen met bv globale variabelen en heb ook al iets met threading gemaakt om het een beetje beter te snappen, maar kom er nog niet uit.

Dit is het programma.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#import RPi.GPIO as GPIO
import os
from http.server import BaseHTTPRequestHandler, HTTPServer

host_name = '192.168.2.19' # Change this to your Raspberry Pi IP address
host_port = 8001


class MyServer(BaseHTTPRequestHandler):
    """ A special implementation of BaseHTTPRequestHander for reading data from
        and control GPIO of a Raspberry Pi
    """

    def do_HEAD(self):
        """ do_HEAD() can be tested use curl command 
            'curl -I http://server-ip-address:port' 
        """
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def _redirect(self, path):
        self.send_response(303)
        self.send_header('Content-type', 'text/html')
        self.send_header('Location', path)
        self.end_headers()

    def do_GET(self):
        """ do_GET() can be tested using curl command 
            'curl http://server-ip-address:port' 
        """
        html = '''
            <html>
            <body style="width:960px; margin: 20px auto;">
            <h1>Welcome to my Raspberry Pi</h1>
            <p>Current GPU temperature is {}</p>
            <form action="/" method="POST">
                Turn LED :
                <input type="submit" name="submit" value="On">
                <input type="submit" name="submit" value="Off">
            </form>
            </body>
            </html>
        '''
        temp = os.popen("/opt/vc/bin/vcgencmd measure_temp").read()
        self.do_HEAD()
        self.wfile.write(html.format(temp[5:]).encode("utf-8"))

    def do_POST(self):
        """ do_POST() can be tested using curl command 
            'curl -d "submit=On" http://server-ip-address:port' 
        """
        content_length = int(self.headers['Content-Length'])    # Get the size of data
        post_data = self.rfile.read(content_length).decode("utf-8")   # Get the data
        post_data = post_data.split("=")[1]    # Only keep the value
        
        # GPIO setup
        #GPIO.setmode(GPIO.BOARD)
        #GPIO.setwarnings(False)
        #GPIO.setup(5,GPIO.OUT)

        if post_data == 'On':
            #GPIO.output(5, GPIO.HIGH)
            print("on")
        else:
            #GPIO.output(5, GPIO.LOW)
            print("off")
            
        print("LED is {}".format(post_data))
        self._redirect('/')    # Redirect back to the root url

        
def init():
    http_server = HTTPServer((host_name, host_port), MyServer)
    print("Server Starts - %s:%s" % (host_name, host_port))

def repeat_server():
    http_server = HTTPServer((host_name, host_port), MyServer)
    print("Server Starts - %s:%s" % (host_name, host_port))

    try:
        http_server.serve_forever()
    except KeyboardInterrupt:
        http_server.server_close()


        
if __name__ == '__main__':
#def start_webserver():
    http_server = HTTPServer((host_name, host_port), MyServer)
    print("Server Starts - %s:%s" % (host_name, host_port))

    try:
        http_server.serve_forever()
    except KeyboardInterrupt:
        http_server.server_close()

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het is hier niet de bedoeling je code neer te gooien en dat wij dan wel even aanwijzen waar "de fout" zit ;) "Ik kom er niet uit" is geen probleem beschrijving. Zoals je in onze Quickstart zult lezen verwachten we hier ook wat eigen inzet en die vragen die er staan wanneer je hier een nieuw topic opent staan er ook niet voor niks:
Mijn vraag
...

Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...
Verder zien we graag als je code post dat je je beperkt tot alleen relevante(!) code - 96 regels code is teveel; probeer dit terug te brengen tot een handvol of hooguit een regel of 15, 20 als het even kan.

[ Voor 12% gewijzigd door RobIII op 26-12-2020 13:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.