Python vs. PHP für Ausführung von Dateien

  • Morgen zusammen,


    ich habe eine Webseite gebaut, womit ich mit der GPIO Schnittstelle und einem 433MHz Sender meine Funksteckdosen in meiner Wohnung steuern kann.


    Zur zeit habe ich ein Script in Python geschrieben welches eine MySql-DB auswertet und ggf. dann einen Ausgang schaltet bzw nicht.
    Das ganze Skript läuft nur, wenn eine Datei vorhanden ist, sonst fällt das Programm in eine Art Ruhe-Zustand (das wollte ich evtl noch in die DB verlegen)
    Im Skript wir dann die send Datei von wiringPi und rcswitch-pi aufgerufen.


    Ich wollte nun das Python Skript als ausführbare Datei beim starten des RPI mitstarten, so das es quasi wie ein Dienst läuft.


    Meine Fragen zur Vorgehensweise:
    - Sollte ich das so lassen, oder lieber die "send" Datei für die Ansteuerung direkt aus der PHP-Seite starten?
    - Wie ist die Auslastung des System, wenn ich so ein Pythonskript ausführe?
    - Wie lasse ich dieses Pythonskript als "dienst direkt beim starten laufen?


    Gruß Simon

  • Wenn ich das richtig verstehe willst du über eine Webseite einfach die GPIO's als Digitale Ein/Ausgänge ansteuern?


    Warum machst du da den Umweg über PHP -> MySQL -> Python?


    Wie immer gibt es da mehrere Praktikable möglichkeiten, wenn du zum erstellen der Seite PHP nimmst kannst du aus PHP heraus über die Kommandozeilenfunktion die GPIO's Steuern (erfordert aber Root Rechte für den Benutzer unter dem PHP läuft). Alternativ kannst du auch die Webseite mit Python erstellen lassen und gleich die RPi.GPIO Schnittstelle von Python nutzen die beim Raspbian schon vorinstalliert ist (erfordert aber genau so Root Rechte für den Benutzer unter dem Python läuft).


    Wenn du die GPIO's wirklich nur als Digitale Ein-/Ausgänge nutzen willst ist der erste weg eigentlich der sinnvollste und erfordert außer dem Webserver kein Script was immer läuft und damit eine gewisse Grundauslastung bringt.

  • Also ich werde das wohl über PHP -> SQL -> Python machen, da ich vorhabe eine Art Timer zu machen, dazu muss ja eine Art Script laufen, das geht ja mittels PHP nicht so gut.
    Ich steuere nicht die GPIO direkt an, sondern einen 433 MHz Sender für die Funksteudosen an, leider ist das bei meiner Variante nur Ausgänge, bekomme also keine Rückmeldung ob die Dose wirklich läuft.


    Habe soweit auch alles am laufen.

  • Quote from agent47 pid=6782 dateline=1362089558


    Warum machst du da den Umweg über PHP -> MySQL -> Python?


    Das hat den Vorteil, daß man die Datenbank aus verschiedenen Quellen füttern kann und Timerfunktionen nutzen kann. Allerdings hat man immer eine Schaltverzögerung weil das Schaltprogramm das im Hintergrund läuft die Datenbankänderung erst sehen muß.


    Quote

    (erfordert aber Root Rechte für den Benutzer unter dem PHP läuft).
    [...]
    (erfordert aber genau so Root Rechte für den Benutzer unter dem Python läuft).


    Nein, Du mußt nur die Dateirechte der Devices anpassen.
    Dem Webserveruser Root-Rechte zu geben ist eine dumme Idee.

  • Danke orb,
    so sehe ich das auch ;)


    Ich habe keine Rechte verändert gegenüber der Tutorials hier (vll weil ich nicht genau weiß wie).


    Ich muss jetzt nur noch gucken, wie ich das Python-Script als "Dienst" starte. Damit es beim starten des RPI direkt mitstartet und unabhängig von Logins ist.

  • Um jedem Nutzer Zugriff auf einen IO zu geben reicht, wenn Du die per PHP direkt ansprichst, ein


    chmod 666 /sys/class/gpio/gpio17/value && chmod 666 /sys/class/gpio/gpio17/direction


    In den Hardwarebasteleien hab ich etwas mehr dazu geschrieben.

  • Ich spreche die ja per Python an, da geht das so auch.
    Möchte nun nur noch das Script automatisch ausführen lassen.

  • Von einer Timer Funktion hast du in deinem erstem Beitrag nichts geschrieben, in dem Fall brauchst du ein Script das permanent läuft, das würde mit 2 Funktionsaufrufen auch in PHP Problemlos gehen, da ab Python für den GPIO Zugriff besser gewappnet ist würde ich da auch Python empfehlen.


    An die Möglichkeit die Dateirechte an zu passen hatte ich jetzt gar nicht mehr gedacht, allerdings solltest du beachten das dies dann bei jedem Neustart passieren muss.


    Um dein Script beim Systemstart mit starten zu lassen kannst du das in die /etc/init.d/rc.local eintragen, dann sollte das im letzten Durchlauf beim Hochfahren mit gestartet werden.