hanze/muizenval

test-server.py in master
Repositories | Summary | Log | Files

test-server.py (2523B) download


 1from flask import json, jsonify
 2from werkzeug.exceptions import HTTPException
 3from flask import Flask, request
 4
 5
 6class Status:
 7    trap = False
 8    latitude = 0.0
 9    longitude = 0.0
10    accuracy = 0.0
11    satellites = 0
12    battery = 0
13    temperature = 0
14    charging = False
15
16    def update(self, req: dict):
17        self.trap = req['trap']
18        self.battery = req['battery']
19        self.temperature = req['temperature']
20        self.charging = req['charging']
21        self.latitude = req['latitude']
22        self.longitude = req['longitude']
23        self.accuracy = req['accuracy']
24        self.satellites = req['satellites']
25
26
27app = Flask(__name__)
28
29status = Status()
30
31
32@app.post("/api/update")
33def update():
34    global status
35
36    req = request.get_json(True)
37    if req:
38        status.update(req)
39
40    return jsonify({})
41
42
43@app.post('/api/hello')
44def hello():
45
46    return jsonify({})
47
48
49@app.get("/")
50def index():
51    return f'''
52	<link 
53		rel="stylesheet" 
54		href="https://unpkg.com/[email protected]/dist/leaflet.css" 
55		integrity="sha512-hoalWLoI8r4UszCkZ5kL8vayOGVae1oxXe/2A4AO6J9+580uKHDO3JdHb7NzwwzK5xr/Fs0W40kiNHxM9vyTtQ==" 
56		crossorigin="" />
57	<script src="https://unpkg.com/[email protected]/dist/leaflet.js"
58		integrity="sha512-BB3hKbKWOc9Ez/TAwyWxNXeoV9c1v6FIeYiBieIWkpLjauysF18NzgR1MBNBXf8/KABdlkX68nAhlwcDFLGPCQ=="
59		crossorigin=""></script>
60
61	<h1>Status update</h1>
62	<p>trap: <code>{'yes' if status.trap else 'no'}</code></p>
63	<p>latitude: <code>{status.latitude:.10f}</code></p>
64	<p>longitude: <code>{status.longitude:.10f}</code></p>
65	<p>accuracy: <code>{status.accuracy:.1f}%</code></p>
66	<p>satellites: <code>{status.satellites}</code></p>
67	<p>battery: <code>{status.battery}V</code></p>
68	<p>temperature: <code>{status.temperature}&deg;c</code></p>
69	<p>charging: <code>{'yes' if status.charging else 'no'}</code></p>
70
71	<div id="map" style='height: 50%;'></div>
72
73	<script type="text/javascript">
74	var map = L.map('map').setView([52.283333, 5.666667], 7);
75	L.tileLayer('https://{{s}}.tile.openstreetmap.org/{{z}}/{{x}}/{{y}}.png', {{
76		maxZoom: 19,
77		attribution: '© OpenStreetMap'
78	}}).addTo(map);
79	var marker = L.marker([{status.latitude}, {status.longitude}]).addTo(map);
80	</script>
81	'''
82
83
84@app.errorhandler(HTTPException)
85def handle_exception(e):
86    response = e.get_response()
87    response.data = json.dumps({
88        "code": e.code,
89        "name": e.name,
90        "description": e.description,
91    })
92    response.content_type = "application/json"
93    return response
94
95
96app.run('0.0.0.0', 5000)