Hallo Leute,
ich hoffe euch spricht das Thema an bzw. jemand kann mir helfen.
Ich versuche eine Weboberfläche zu gestallten mit der ich meine MQTT Geräte ansprechen kann. Vorallem mache ich das auch um dabei was über Webframeworks und Python zu lernen.
Das steht bei mit im main.py:
@app.get("/knoepfe")
def form_get(request: Request):
return templates.TemplateResponse('knoepfe.html', context={'request': request})
@app.post('/knoepfe')
def form_post(request: Request, action: str = Form(...)):
if action == 'convert':
async def mqtt_test():
await mqtt.publish("cmnd/Lampe/POWER","OFF")
return templates.TemplateResponse('knoepfe.html', context={'request': request})
elif action == 'download':
zwei = "das hat er gecheckt"
return templates.TemplateResponse('knoepfe.html', context={'request': request, 'check': zwei})
und das ist die html seite davon:
<body>
<form method="post">
<input type="submit" name="action" value="convert">
<input type="submit" name="action" value="download">
</form>
<p>hö? {{check}}</p>
</body>
Die Funktion mqtt_test() wird nicht ausgeführt.
wenn ich das so ausführe, geht's:
if action == 'convert':
async def mqtt_test():
await mqtt.publish("cmnd/Lampe/POWER","OFF")
Kann mir jemand helfen?
Gruß
FastAPI Porbleme mit Funktion die ich innerhalb einer Form Unterscheidung ausführen möchte
@Kanaille,
es sieht mir so aus, als wäre die Einrückung falsch. Kannst du das mal in </> code tags posten, damit man die von dir verwendete Einrückung sehen kann.
Ich glaube du solltest alle Funktionsdefinitionen async setzen. Verschachtelte Definitionen würde ich gar nicht machen.
mqtt_test wird auch nicht aufgerufen /awaited. Fehlt da was?
es sieht mir so aus, als wäre die Einrückung falsch. Kannst du das mal in </> code tags posten, damit man die von dir verwendete Einrückung sehen kann.
Ich glaube du solltest alle Funktionsdefinitionen async setzen. Verschachtelte Definitionen würde ich gar nicht machen.
mqtt_test wird auch nicht aufgerufen /awaited. Fehlt da was?
@rogerb: Die Einrückungen stimmen schon, einfach auf "zitieren" klicken, dann siehst Du sie.
@Kanaille: wenn Du asynchrone Aufrufe in einer Funktion hast, dann muß die Funktion auch async definiert werden. mqtt_test wird gar nicht benutzt.
@Kanaille: wenn Du asynchrone Aufrufe in einer Funktion hast, dann muß die Funktion auch async definiert werden. mqtt_test wird gar nicht benutzt.
Code: Alles auswählen
@app.get("/knoepfe")
def form_get(request: Request):
return templates.TemplateResponse('knoepfe.html', context={'request': request})
@app.post('/knoepfe')
async def form_post(request: Request, action: str = Form(...)):
if action == 'convert':
await mqtt.publish("cmnd/Lampe/POWER","OFF")
return templates.TemplateResponse('knoepfe.html', context={'request': request})
elif action == 'download':
zwei = "das hat er gecheckt"
return templates.TemplateResponse('knoepfe.html', context={'request': request, 'check': zwei})
Also das war definitiv falsch, kann aber durch die Verwendung von BBCode passiert sein
Code: Alles auswählen
[b] async def mqtt_test():
await mqtt.publish("cmnd/Lampe/POWER","OFF")[/b]
Hallo,
super, so hat es geklappt !
tausend Dank euch
Bin richtig begeistert, dass mir hier so schnell geholfen wurde. Ich war schon richtig down, weil es nicht klappen wollte, habe den halben Tag versucht. Ich lese mir dann wohl mal was zu async und await an.
das ist die python Seite:
das HTML:
Vielen Dank.
super, so hat es geklappt !
tausend Dank euch

Bin richtig begeistert, dass mir hier so schnell geholfen wurde. Ich war schon richtig down, weil es nicht klappen wollte, habe den halben Tag versucht. Ich lese mir dann wohl mal was zu async und await an.
das ist die python Seite:
Code: Alles auswählen
@app.post('/knoepfe')
async def form_post(request: Request, action: str = Form(...)):
if action == 'convert':
await mqtt.publish("cmnd/Lampe/POWER", "OFF")
return templates.TemplateResponse('knoepfe.html', context={'request': request})
elif action == 'download':
await mqtt.publish("cmnd/Lampe/POWER", "ON")
zwei = "das hat er gecheckt"
return templates.TemplateResponse('knoepfe.html', context={'request': request, 'check': zwei})
Code: Alles auswählen
<form method="post">
<input type="submit" name="action" value="convert">
<input type="submit" name="action" value="download">
</form>
<p>hö? {{check}}</p>