Skip to content

Commit 1e54ff6

Browse files
committed
WebserverRequest & WebserverResponse refactor to HTTPRequest, HTTPResponse based on HTTPHeader object
1 parent 6b9801d commit 1e54ff6

27 files changed

+816
-497
lines changed

src/Device.py

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/Enviroment.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class __Enviroment:
2+
@property
3+
def PUBLIC_FOLDER(self):
4+
return "public"
5+
6+
@property
7+
def POWER_LED_PIN(self):
8+
return -1
9+
10+
@property
11+
def WIFI_LED_PIN(self):
12+
return -2
13+
14+
@property
15+
def ADHOC_LED_PIN(self):
16+
return -3
17+
18+
@property
19+
def DEBUG_MODE(self):
20+
return True
21+
22+
@property
23+
def CAMERA_INTERVAL(self):
24+
mins = 15
25+
ms = (mins)*60*1000
26+
sec = (ms / 1000)
27+
28+
return int(sec)
29+
30+
Enviroment = __Enviroment()

src/Logger.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Main.py

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,48 @@
11

22
from net.www.Webserver import Webserver
3+
from Enviroment import Enviroment
4+
from utils.Logger import Logger
5+
from utils.Device import Device
36
import uasyncio
47
import machine
5-
import gc
6-
7-
gc.collect()
8-
98

109
www = None
1110

12-
11+
# https://github.com/lemariva/micropython-camera-driver
1312
def __init():
1413
"""
15-
Devicie initializiation
14+
Device initializiation
1615
"""
17-
# Gebruik globale variabele niet enkel in deze scope.
16+
1817
global www
19-
# Initalizeer noodzakelijke componenten
2018
www = Webserver(port=80, maxClients=1)
21-
# Maakt WLAN en ADHOC connectie aan (Wifi/AccessPoint)
22-
19+
2320
async def __main():
2421
"""
2522
Main device execution function
2623
"""
27-
# Gebruik globale variabele niet enkel in deze scope.
2824
global www
2925

3026
loop = uasyncio.get_event_loop()
31-
32-
# Voeg de webserver start functie als task toe aan asyncio voor uit te voeren.
33-
loop.create_task(www.start())
34-
loop.create_task(__update())
35-
36-
loop.run_forever()
37-
3827

39-
async def __update():
40-
"""
41-
Reserved for device updates, wifi checks, etc...
42-
"""
28+
await loop.create_task(Device.update())
29+
await loop.create_task(www.start())
4330

44-
wifi_pin = machine.Pin(16, machine.Pin.OUT)
45-
adhoc_pin = machine.Pin(17, machine.Pin.OUT)
46-
while True:
47-
if Wifi.adhoc_ip_adress is not None:
48-
adhoc_pin.value(1)
49-
if Wifi.wifi_connected:
50-
wifi_pin.value(1)
31+
loop.run_forever()
5132

52-
await uasyncio.sleep_ms(1000)
5333

5434
# Main entry point, indien python interpeter naar dit bestand is gericht.
5535
if __name__ == "__main__":
56-
power_pin = machine.Pin(0, machine.Pin.OUT)
57-
power_pin.value(1)
58-
5936
from net.Wifi import Wifi
6037
try:
6138
__init()
6239
uasyncio.run(__main()) # Start main functie met async handler "uasyncio" => asyncio alternatief micropython.
63-
40+
6441
except OSError as e:
65-
if e.errno == 98:
66-
machine.reset()
67-
68-
print(e)
42+
Logger.error("main", f"An exception occured: {e}")
43+
44+
if Enviroment.DEBUG_MODE:
45+
if e.errno == 98:
46+
machine.reset()
47+
else:
48+
raise(e)

src/Path.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/Routes.py

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,55 @@
1-
2-
from re import search as searchPattern
3-
4-
from components.scripts.Redirect import Redirect
5-
from components.layout.forms.WifiSelector import WifiSelector
61
from net.www.WebserverRoute import WebserverRoute
2+
from components.layout.forms.WifiSelector import WifiSelector
73
from net.Wifi import Wifi
8-
4+
from utils.Device import Device
5+
from net.WifiConfig import WifiConfig
96

107
class Routes:
118
@WebserverRoute.get("/")
129
def index(request, response):
13-
return response.send(Redirect("/wifi", 0))
14-
return response.render("/index")
15-
10+
11+
return response.getFile("/index")
12+
1613
@WebserverRoute.get("/wifi")
17-
def wifi_get(request, response):
18-
return response.render("/wifi", **{
19-
"SSID_SELECTOR": WifiSelector(*[network["ssid"] for network in Wifi.networks]), # todo: WLAN netwerk scan => Arg parse erin
20-
"MESSAGE": "Failed to connect to wifi, please connect to a nearby access point"
14+
def wifi(request, response):
15+
response.setParams(**{
16+
"MESSAGE": "Already connected to wifi network" if Wifi.wifi_connected else "No wifi network specified, or failed to connect",
17+
"SSID_SELECTOR": WifiSelector(*[network["ssid"] for network in Wifi.networks])
2118
})
22-
23-
@WebserverRoute.post("/wifi")
24-
def wifi_post(request, response):
25-
params = request.PARAMS
26-
message = """
27-
<b>Attempting to connect to {ssid}.. page will reload in a second.</b>
28-
{redirect}
29-
""".format(ssid=" ".join(params["ssid"].split("+")), redirect=Redirect("/", 5000))
30-
31-
if not len(request.PARAMS):
32-
message = "Wifi not connected, please connect to a wifi access point."
33-
elif not all(i in params.keys() for i in ["ssid", "password"]):
34-
message = "Wifi SSID or password was not set"
3519

36-
return response.render("/wifi", **{
37-
"SSID_SELECTOR": WifiSelector(*[network["ssid"] for network in Wifi.networks]), # todo: WLAN netwerk scan => Arg parse erin
38-
"MESSAGE": message
20+
return response.getFile("/wifi")
21+
22+
@WebserverRoute.post("/wifi")
23+
def wifi(request, response):
24+
print(response.parameters)
25+
response.setParams(**{
26+
"MESSAGE": "Already connected to wifi network" if Wifi.wifi_connected else "No wifi network specified, or failed to connect",
27+
"SSID_SELECTOR": WifiSelector(*[network["ssid"] for network in Wifi.networks])
3928
})
40-
29+
if all(key in response.parameters.keys() for key in ["ssid", "password"]):
30+
WifiConfig.wlan_ssid = response.parameters["ssid"]
31+
WifiConfig.wlan_password = response.parameters["password"]
32+
Device.hard_reset()
33+
34+
return response.getFile("/wifi")
35+
4136
@WebserverRoute.get("/change_adhoc")
42-
def adhoc_set_get(request, response):
43-
return response.render("/change_adhoc", **{
44-
"MESSAGE": "Failed to connect to wifi, please connect to a nearby access point"
37+
def adhoc(request, response):
38+
response.setParams(**{
39+
"MESSAGE": ""
4540
})
46-
41+
return response.getFile("/change_adhoc")
42+
4743
@WebserverRoute.post("/change_adhoc")
48-
def adhoc_set_post(request, response):
49-
params = request.PARAMS
50-
51-
message = "<b>Assigning new access point password.</b>"
52-
if not len(request.PARAMS) or not all(i in params.keys() for i in ["password", "password_verify"]):
53-
message = "Invalid request"
54-
elif params["password"] != params["password_verify"]:
55-
message = "Passwords did not match"
56-
57-
return response.render("/change_adhoc", **{
58-
"MESSAGE": message
59-
})
44+
def adhoc(request, response):
45+
if any([i not in response.parameters.keys() for i in ["password_verify", "password"]]):
46+
response.setParams(MESSAGE="Invalid request")
47+
elif response.parameters["password"] != response.parameters["password_verify"]:
48+
response.setParams(MESSAGE="Password did not match")
49+
else:
50+
response.setParams(MESSAGE="ADHOC password changed succesfully")
51+
Device.hard_reset()
52+
53+
return response.getFile("/change_adhoc")
54+
55+

src/boot.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import gc
2+
from machine import Pin
3+
from Enviroment import Enviroment
4+
from utils.Logger import Logger
5+
6+
# Enable garbage collection
7+
gc.collect()
8+
9+
# Enable power out
10+
try:
11+
power_pin = Pin(Enviroment.POWER_LED_PIN, Pin.OUT)
12+
power_pin.value(1)
13+
except ValueError as e:
14+
if e.errno == "invalid pin":
15+
Logger.error("boot", "Failed to setup power pin: (Invalid enviroment -> POWER_LED_PIN value)")
16+
else:
17+
if Enviroment.DEBUG_MODE:
18+
raise(e)
19+
else:
20+
Logger.error("boot", f"Failed to setup power pin unkown error: {e}")
21+
22+
from net.Wifi import Wifi

0 commit comments

Comments
 (0)