Bjørn Kristiansen Skrevet 20. oktober 2021 Del Skrevet 20. oktober 2021 Jeg har en Raspberry Pi med en lokal webserver som jeg bruker til å styre ulike ting i huset med. Jeg har fulgt oppskriften her: https://www.hackster.io/adhyoksh/controlling-gpio-pins-of-raspberry-pi-with-web-page-2d5bdc#code og ønsker å legge til knapper på websiden for å kjøre kommandoer på bringebærboksen. Etter litt googling fant jeg https://pypi.org/project/jinja2-shell-extension som virker til å kunne gjøre det jeg ønsker. Jeg er nybegynner innen programmering så selv om det er eksempelkode på den lenkede siden så kom jeg ikke lenger enn å kjøre: pip install jinja2-shell-extension. Det jeg lurer på er hvordan endrer jeg dette: from jinja2 import Template, Environment env = Environment(extensions=["jinja2_shell_extension.ShellExtension"]) template = env.from_string("{{ 'date --rfc-2822'|shell() }}") result = template.render() slik at jeg ved trykke på knapper på websiden kan sende kommandoer som "heyu on a1" og "heyu off a1" til RPi ? index.html: <html> <head> <title>Control</title> </head> <body> <h1>Control</h1> <h3>Click here:</h3> <br> <a href=\A><button>LED1 ON</button></a> <a href=\a><button>LED1 OFF</button></a><br> <a href=\B><button>LED2 ON</button></a> <a href=\b><button>LED2 OFF</button></a><br> <a href=\C><button>LED3 ON</button></a> <a href=\c><button>LED3 OFF</button></a> </body> </html> control.py: from flask import Flask from flask import render_template import RPi.GPIO as rpi import time app= Flask(__name__) led1,led2,led3= 3,5,7 rpi.setwarnings(False) rpi.setmode(rpi.BOARD) rpi.setup(led1, rpi.OUT) rpi.setup(led2, rpi.OUT) rpi.setup(led3, rpi.OUT) rpi.output(led1, 0) rpi.output(led2, 0) rpi.output(led3, 0) print("Done") @app.route('/') def index(): return render_template('webpage.html') @app.route('/A') def led1on(): rpi.output(led1,1) return render_template('webpage.html') @app.route('/a') def led1off(): rpi.output(led1,0) return render_template('webpage.html') @app.route('/B') def led2on(): rpi.output(led2,1) return render_template('webpage.html') @app.route('/b') def led2off(): rpi.output(led2,0) return render_template('webpage.html') @app.route('/C') def led3on(): rpi.output(led3,1) return render_template('webpage.html') @app.route('/c') def led3off(): rpi.output(led3,0) return render_template('webpage.html') if __name__=="__main__": print("Start") app.run(debug=True, host='192.168.1.57') Jeg håper at noen som skjønner dette bedre enn meg har noen tips om hvordan dette kan settes opp. Lenke til kommentar
tflovik Skrevet 21. oktober 2021 Del Skrevet 21. oktober 2021 Ser at det er kommandoer som går mot GPIO, har du tilkoplet noe mot GPIO på din Raspberry, hvis ikke så vil ikke dette virke. Lenke til kommentar
Bjørn Kristiansen Skrevet 21. oktober 2021 Forfatter Del Skrevet 21. oktober 2021 Ja, GPIO-delen virker. Det er å sende shell-kommando fra knapp på websiden jeg ikke vet hvordan gjøres. Jeg har lagt til følgende i begynnelsen av control.py: from jinja2 import Template, Environment env = Environment(extensions=["jinja2_shell_extension.ShellExtension"]) Det gir ingen feilmelding ved kjøring men siden jeg ikke vet hvordan jeg skal bruke funksjonen så kommer jeg ikke lenger. Jeg har lagt til 2 knapper i index.html: <a href=\D><button>Light ON</button></a> <a href=\d><button>Light OFF</button></a> Og i control.py har jeg lagt til: @app.route('/D') @app.route('/d') Denne funksjonen fungerer alene: import os os.system('/home/pi/heyu-2.10.3/heyu on g3') Men hvordan kan den legges inn i @app.route(/D') avsnittet ? Lenke til kommentar
tflovik Skrevet 22. oktober 2021 Del Skrevet 22. oktober 2021 (endret) Uten at jeg kan si meg sikker så innbiller jeg meg at du må antgeligvis programmere en snutt i python evt javascript for å få dette til å virke. Endret 22. oktober 2021 av tflovik Lenke til kommentar
cacb Skrevet 23. oktober 2021 Del Skrevet 23. oktober 2021 On 10/21/2021 at 9:12 PM, Bjørn Kristiansen said: Ja, GPIO-delen virker. Det er å sende shell-kommando fra knapp på websiden jeg ikke vet hvordan gjøres. Har du forsøkt os.popen() ? import os output = os.popen('date') Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå