Comments (11)
Postman tries forever to complete the request :) so i think i will simply remove the shutdown option - using PyMakr works fine, so i can simply stop and reset the device
from microdot.
What do you have in your main script after app.run()
? Also, you talk about an infinite loop. Where is that? Or are you just guessing?
from microdot.
Currently my main.py looks like this
from microdot import Microdot
# Create webserver
app = Microdot()
@app.before_request
async def authenticate(request):
headers = request.headers
# Format `Authorization: Bearer <api_token>`
if "Authorization" not in headers:
return "Unauthorized", 401
if "Bearer" not in headers["Authorization"]:
return "Unauthorized", 401
api_token = headers["Authorization"].split(" ")[1]
if api_token != API_TOKEN:
return "Unauthorized", 401
@app.get("/")
async def index(request):
return "Hello, world!"
@app.post("/open")
async def open(request):
# open the connected door/barrier
opener.open(1)
return "OK"
@app.get("/shutdown")
async def shutdown(request):
if DEBUG:
request.app.shutdown()
return "The server is shutting down..."
return "Shutting down the server is prohibited during live mode!", 403
if not DEBUG:
print("Starting webserver...")
app.run(port=8000)
yes i think i'm only guessing. Using MPY-Jama IDE i'm connecting directly to the ESP32 but have problems to use WebREPL after rebooting device
I'm always getting `A process is already in execution"
Because of this problem i'm using this DEBUG
Flag
from microdot.
Okay, try this. Start your device in DEBUG mode and connect to a REPL. Start the server with:
from main import app
app.run(port=8000)
At this point your REPL is going to block. Now connect to your web server in the usual manner, and trigger the shutdown route. With a working shutdown, you should be getting the REPL prompt back. If you don't, then hit Ctrl-C to interrupt the server and share any output that you get, such as a stack trace.
from microdot.
I got the REPL back, but when i'm trying to execute a command it says A process is already in execution
. This also happens when i hard reset the ESP32.
Over night without power i was able to reconnect.
Should the shutdown route send an response before shutting down the server?
I forgot to mention, that i'm using MicroPython v1.22.1
from microdot.
I mentioned this before. When you get any kind of output you need to show it to me. Show me what you are doing and what error you get please. Every detail matters, show me everything.
from microdot.
I don't get any outputs thats the problem.
My boot.py looks like this:
# This file is executed on every boot (including wake-boot from deepsleep)
import esp
esp.osdebug(0)
# garbage collection
import gc
gc.collect()
from nic import Nic
from opener import Opener
# Global Constants
API_TOKEN = "api_key"
# NOTE: set this to True only for developing purposes to stop webserver
DEBUG = True
# connect to network
# NOTE: comment this if you don't connect to a network
nic = Nic()
# initialise modules
opener = Opener()
main.py
from microdot import Microdot
# Create webserver
app = Microdot()
@app.before_request
async def authenticate(request):
headers = request.headers
# Format `Authorization: Bearer <api_token>`
if "Authorization" not in headers:
return "Unauthorized", 401
if "Bearer" not in headers["Authorization"]:
return "Unauthorized", 401
api_token = headers["Authorization"].split(" ")[1]
if api_token != API_TOKEN:
return "Unauthorized", 401
@app.get("/")
async def index(request):
return "Hello, world!"
@app.post("/open")
async def open(request):
# open the connected door/barrier
opener.open(1)
return "OK"
@app.get("/shutdown")
async def shutdown(request):
if DEBUG:
request.app.shutdown()
return "The server is shutting down..."
return "Shutting down the server is prohibited during live mode!", 403
def run():
print("Starting webserver...")
app.run(port=8000)
After Starting the Webserver with run()
, hitting CTRL-C and trying to use run()
again - i get the message above. Also Hard Resetting is not working.
MicroPython >>> run()
Starting webserver...
* The program has been interrupted!
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:4728
load:0x40078000,len:14888
load:0x40080400,len:3368
entry 0x400805cc
�[0;32mI (778) system_api: Base MAC address is not set�[0m
�[0;32mI (788) system_api: read default base MAC address from EFUSE�[0m
�[0;32mI (808) esp_eth.netif.netif_glue: 80:64:6f:e9:c2:d3�[0m
�[0;32mI (808) esp_eth.netif.netif_glue: ethernet attached to netif�[0m
�[0;32mI (2508) ethernet: Ethernet Started�[0m
�[0;32mConnIectin g to (netwo2rk...508) ethernet: Ethernet Link Up�[0m
�[0;32mI (3508) ethernet: Ethernet Got IP�[0m
�[0;32mI (3508) esp_netif_handlers: eth ip: 192.168.178.44, mask: 255.255.255.0, gw: 192.168.178.1n�[0m
etwork config: ('192.168.178.44', '255.255.255.0', '192.168.178.1', '192.168.178.1')
MicroPython v1.22.1 on 2024-01-05; Generic ESP32 module with ESP32
Type "help()" for more information.
* ESP32 has been reset!
MicroPython >>> run()
from microdot.
or
from microdot.
I'm not really sure what to make of this. The only reference I have found for the error is an issue for the IDE that you are using: jczic/ESP32-MPY-Jama#46. It's still open, and nobody who commented there seems to know what this error is about. Maybe try a different IDE?
As far as I can see, the problem that you have is not related to the Microdot shutdown, which appears to work well.
from microdot.
Ok.. it seems like a problem with MPY-Jama - VS Code with PyMakr extension works fine.. Sorry to bother you.
One last question: shouldn't the shutdown endpoint send an response?
from microdot.
I would expect a response to be returned, yes. But it's hard to tell what happens when immediately after the request the whole server is closed. Maybe the response is still sitting in a buffer when the server goes away. You have to consider that this is a debugging option, servers are not designed to ever go away.
Just because I'm curious, what happens from the client's point of view when the shutdown is invoked? Does the client block forever? Does it get an error response?
from microdot.
Related Issues (20)
- render_template hangs when using microdot_asyncio HOT 5
- Errors with esp32 HOT 5
- second call of send_file method does not serve complete file. HOT 7
- ImportError: can't import name Microdot on helloworld sample for RP2040
- microdot hangs when aborting static file serve HOT 7
- Async server does not run on Python 3.12 HOT 1
- Websocket example doesn't work on CPython / Linux: invalid start byte HOT 2
- send_file hangs when using microdot_asyncio bug HOT 1
- websocket: limit maximum message length HOT 1
- Hang on python 3.10.4 HOT 3
- ws is not working HOT 1
- Client ECONNRESET errors when POSTing to micropython microdot from micropython aiohttp HOT 2
- Some crashes cause the server to exit
- long/complex URLs cause recursion limit HOT 9
- ".." in URL path resolves correctly, "//" does not HOT 4
- signal module doesnt exist in micropython HOT 4
- Integer-type dynamic path component does not match 0 HOT 3
- CircuitPython support HOT 6
- Upload Progress (solved) & Block multiple uploads HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from microdot.