Beiträge von Schnipsel
-
-
Hey, danke für die bisherigen Antworten.
Das mit dem shell_exec("sudo pkill -f <Skriptname>.py"); habe ich schon ausprobiert - funktioniert leider nicht. Auch wenn ich es direkt in den Commander eingebe funktioniert das mit pkill -f <Dateiname> irgendwie nicht.
Hatte nicht vor den Pi frei zugänglich zu machen. Wa würde denn damit passieren bezügl sudo in shell_exec, wenn ich fragen darf?
-
Die Schaltflächen (Buttons) auf meiner Webseite, über die ich die Scripte ausführen möchte. #8 RE: laufendes python script beenden über weiteres skript
Wollte damit nur sagen, dass wenn ich den shell_exec-Befehl ohne "sudo" schreibe, dass anschließend über die Webseite das Python-Script nicht ausgeführt wurde/wird.
-
Nee, also ohne "sudo" im Befehl öffnet es einfach nur nicht das Skript über die Schaltfläche.
Habe diesen Weg auch nur gewählt, da dieses Script mit der Schleife mit dem reinen Dateienpfad nicht ausgeführt wurde.
Kann leider aber auch nicht beurteilen weswegen, da mir da die Kenntnisse fehlen.
-
Habe es eben mal ohne "sudo" im Befehl ausprobiert, scheint nur damit zu gehen.
Das Script zum Automatikbetrieb über den Fotosensor habe ich weiter oben schon eingetragen. #4 RE: laufendes python script beenden über weiteres skript
Und ja, den GPIO habe ich noch um 15 und 16 korrigiert. War vorhin noch am ausprobieren
-
Der Handbetrieb läuft über den Dateienpfad, der Autobetrieb mit der Dauerschleife, den kann ich nur mit "sudo python3" starten.
Handbetrieb läuft jeweils über ein Python-Script (hoch, stop, runter)
Codeif (isset($_POST['down'])){ shell_exec("/var/www/html/Smarthome/roll_down.py"); } if (isset($_POST['auto_on'])){ shell_exec("sudo python3 roll_auto.py"); }
ls -la Rollladensteuerung:
-rwxr-xr-x 1 root root 2764 Mär 12 20:57 Rollladensteuerung.php
-
Okay, vielen Dank für den Ratschlag. Habe ich nun so eingepflegt in mein Programm.
das mit dem pkill -f funktioniert bei mir aber leider nicht.
Das einzige was bei mir aktuell funktioniert ist, wenn ich mit "Strg+C" beende.
-
Okay, ich werde es mal ausprobieren.
Dann sollte es doch aber auch möglich sein, dass ich in den HOCH/RUNTER-Befehlen noch den "pkill -f" einbinden kann um somit das eine auszuführen und das andere zu schließen mit einem Tastendruck oder?
Liebe Grüße
-
Hallo,
gerne bin ich auch für einen alternativen Weg dazu offen - hier den weg, den ich gerade gehe um die Skripte zu öffnen:
-
Bedeutet, ich kann den Befehl "pkill -f bla.py" in die unteren Codes eintragen und somit den autobetrieb ausschalten?
-
Also nochmal zum Verständnis:
Über aktivierung der unteren Scripte (Handbetrieb), soll das Script des Automatikbetriebes beendet werden, da dieser sonst in Dauerschleife weiterläuft und nach dem Lichtwert weiter schaltet.
Ich möchte anschließend den Automatikbetrieb durch einen Auto-Button neustarten.
Das ist der Code, welcher in Dauerschleife durchläuft und den GPIO auf einen vorgegebenen Lichtwert anspricht:
(Wird per Button in HTML/PHP auf server gestartet)
Python
Alles anzeigen#!/usr/bin/env python3 # coding=utf-8 import time import board import busio import adafruit_ads1x15.ads1115 as ADS from adafruit_ads1x15.analog_in import AnalogIn import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.OUT) # Create the I2C bus i2c = busio.I2C(board.SCL, board.SDA) # Create the ADC object using the I2C bus ads = ADS.ADS1115(i2c) voltageMax = 3.3 # Create single-ended input on channels chan0 = AnalogIn(ads, ADS.P0) chan1 = AnalogIn(ads, ADS.P1) chan2 = AnalogIn(ads, ADS.P2) chan3 = AnalogIn(ads, ADS.P3) while True: resistance = chan0.voltage / (voltageMax - chan0.voltage) * 10000 lux=(500.0 / resistance)*1000 var1 = int(lux) var2 = 50 if var1 < var2: GPIO.output(15, True) GPIO.output(16, False) elif var1 > var2: GPIO.output(16, True) GPIO.output(15, False) time.sleep(5)
Code zum separaten ansteuern per Button (HOCH) :
Code
Alles anzeigen#!/usr/bin/env python3 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(15, GPIO.OUT) GPIO.setup(16, GPIO.OUT) GPIO.output(16, True) GPIO.output(15, False)
Code zum separaten ansteuern per Button (Runter):
-
Hallo zusammen!
Ich möchte gerne einen Automatik- und einen Handbetrieb erstellen, die über zwei separate Scripte laufen, jedoch auf die Selben funktionen zugreifen.
In meinem aktuellen Projekt habe ich eine Script mit Dauerschleife laufen, welches einen GPIO ansteuert. Gerne möchte ich, dass beim starten eines weiteren Scriptes die Dauerschleife beendet wird.
Gibt es einen Befehl, welchen ich in das 2. Script schreiben kann, um somit das Skript mit der Dauerschleife zu beenden?
Liebe Grüße
-
Hey G9c,
den Weg in deinem Script bin ich auch vorher gegangen, bei mir ging dieser allerdings nur mit Aufruf von shell, statt python-scripten:
Nachteil ist für meine Anwendung allerdings, dass eben nur die GPIOS geschaltet, aber kein komplettes Programm ablaufen kann.
Bei mir hat das ausgebesserte php-script von Hyle weitergeholfen. Ich habe dafür eine php-Datei erstellt und den Code wie in Beitrag #8 bzw. #7 eingebettet.
Den Anker mit <a href=xy.php... habe ich getauscht gegen:
PHP<form action="<?php $_SERVER['PHP_SELF']?>" method="post"><input name="on" type="submit" value="On"></form>
Der Php-Code zu dem Pyton-script wird nun nicht extern aufgerufen, sondern ist mit in das Script integriert und wird beim drücken des Buttons aktiviert.
Vorteil ist, dass nun die Seite nicht noch extra neu aufgerufen werden muss.
HTML
Alles anzeigen?php if (isset($_POST['on'])){ shell_exec("/var/www/html/ledon2.py"); } if (isset($_POST['off'])){ shell_exec("/var/www/html/ledoff2.py"); } ?> <html> <head> <title>Python test</title>
Ein weiteres Problem welches ich hatte, waren die nicht richtig gesetzten Shebangs und das "ausführbar machen" (chmod +x Dateixy.py) der Datei.
Das waren jetzt nur meine persönlichen Erfahrungen bei meinem eigenen Projekt. Für tiefergehende Fragen ist wohl Hyle der kompetentere Ansprechpartner.
Liebe Grüße!
-
Hey hyle,
habe eben mal deine Skripte ausprobiert. Das php-Skript hat nun funktioniert, habe aber zum ausprobieren einfache "True" und "False" python-Skripte damit geöffnet. Das Eingabefeld habe ich durch den On/Off - button ersetzt.
PHP
Alles anzeigen?php if (isset($_POST['on'])){ shell_exec("/var/www/html/ledon2.py"); } if (isset($_POST['off'])){ shell_exec("/var/www/html/ledoff2.py"); } ?> <html> <head> <title>Python test</title> </head> <body> <form action="<?php $_SERVER['PHP_SELF']?>" method="post"><input name="on" type$ <br> <br> <br> <form action="<?php $_SERVER['PHP_SELF']?>" method="post"><input name="off" typ$ </body> </html>
Code#!/usr/bin/env python3 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23, True)
Der Link den du beigefügt hast kann ich auch weiterhin noch gut gebrauchen.
Das Ganze kann ich nun als Basis für mein Projekt verwenden - vielen Dank für deine Hilfe!
-
Hey hyle,
ich habe eben in dem Beispiel aus dem Link den php-code nach deiner Kritik umgeänder und die von dir oben genannten befehle in die Befehlszeile eingetragen.
Nach Serverneustart und reboot hat leider immer noch nichts funktioniert.
Nach dem tutorial auf dem Link sehe ich einen anklickbaren "on" - button über den Broser, die LED leuchtet aber leider immer noch nicht wenn ich daraufklicke.
habe es bisher nur über - html-->php-befehl--> shell-script --> gpio xy =1 hinbekommen. Aber damit kann ich außer log 1 und 0 nichts realisieren.
Danke trotzdem für die Hilfestellung!
-
Naja, würde gerne per webserver und webseite ein python-script ausführen um z.B. LEDs oder Motoren anzusteuern.
Mein Problem ist, dass die Python-Scripte an sich schlüssig und manuell ausführbar sind, aber ich weiß nicht wie ich es hinbekomme, dass ich sie eben mit einem Php-Befehl über z.B. einen Button auf der Webseite ausführen kann.
<?php
if (isset($_POST['on'])){
echo shell_exec("python3 /var/www/html/ledon.py");
}
?>
funktioniert bei mir zum Beispiel nicht - ich weiß einfach nicht was ich falsch mache oder vergessen habe.
-
Hey misux!
Eben mal gegoogelt, kanne ich noch gar nicht, danke für den Tipp, werde mich mal näher damit auseinander setzen, ich denke das könnte mir helfen.
Vielen Dank!
-
Hallo Zusammen!
Sicherlich habe ich schon versucht über das Forum oder Google herauszufinden wie ich mein aktuelles Problem angehe. Bislang habe ich mehrere Möglichkeiten gefunden, welche ich auch schon erfolglos durchprobiert habe.
Also möchte ich dieses Thema nochmal aufgreifen, um an meinem jetzigen Projekt weiterzukommen.
Bsp.: https://thepiguy.altervista.org/control-lights-from-webpage/
Könnte mir jemand eine etwas genauere Anleitung dazu geben, wie ich ein Python-script über eine Webseite und php-befehlen (button) ausführen kann?
Mein Ausgangspunkt ist gerade:
-Raspberry Pi 4
-Apache2
-HTML-Seite mit buttons und integrierten php-Befehlen
-Python (aktuelle versionen)
(Das aufrufen von Shell-scripten funktioniert mit den php-befehlen einwandfrei.)
Was könnten mögliche Probleme darstellen, oder was könnte ich vergessen haben?
(Die Pythonscripte sind mit Shebangs (#!/usr/bin/ env python3) versehen, ausführbar gemacht per "chmod +x" und laufen auch unter dem Befehl "./", das php-script ist wie in dem Beispiel, habe auch weitere ausprobiert)
Liebe Grüße!
-
Hallo Guido,
vielen Dank für deine Anregung, das geht schon gut in die Richtung, welche ich mir vorgestell habe!
Liebe Grüße!
-
Hallo zusammen!
Meine Vorstellung zu meinem Projekt war eine Smart home-Steuerung über ein tablet.
Vorzugsweise mit einer verstellbaren Zeitschaltuhr. (Außenbeleuchtung, Bewässerungsanlage usw.)
Einfache Leuchtenansteuerung per On/Off - buttons habe ich über php Befehle im HTML Script eingebettet. Die php Befehle rufen wiederum shell scripte auf um die gpios anzusteuern.
Bisher nutze ich hierzu den Apache2 auf dem Webserver.
Da ich noch nicht allzu sehr in der Materie bin, wäre ich dankbar um Verbesserungsvorschläge. Flask und python liest man ja auch des öfteren.
Hätte jemand sinnvolle Lösungsansätze um eine Zeitschaltuhr zu programmieren? Im Idealfall über ein Eingabefeld auf der Webseite (Uhrzeit abändern).
Danke schonmal im Vorfeld!
Liebe Grüße!