Python-PHP-JS Rückgabewerte problem

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo :)
    Ich hoffe ich habe hier die richtige Kategorie ausgewählt, das mein Problem etwas komplekser ist.
    Wie ich hier schon angekündigt habe geht es darum rückgabe werte bzw outputs von python von pi A zu Pi B zu übergeben wo diese dann auf einer website als warnung (popup bzw javascript alert) angezeigt werden sollen, damit man als nutzer informiert ist. Nun ist es so: ich kenne mich mit python habwegs gut aus, html geht auch, php und js eher weniger.

    Wie muss ich da ran gehen?

    lg Tim

    -------------
    hier findet man zT vorgeschichte zum problem falls das von relevanz ist

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • hehxes: Ich weiß nicht was du von der Community erwartest? Du hast doch schon alle wichtigen Punkte erwähnt. Also bau dir eine Website mit HTML/CSS. Outputs oder andere Variablen kannst du dir entweder mit Python direkt oder mit PHP holen. JavaScript für Popup-Fenster klingt aucht gut ... also ran an den Speck.

    SELFHTML versorgt dich mit allen Infos die du brauchst. Ach ja und diesen Herrn Google gibts ja auch noch ...

    Falls du dann etwas programmiert hast und es nicht funktioniert, kannst du dich ja noch mal melden. Dann wird dir sicher konkreter geholfen.

  • stimmt auch wieder :D website habe ich auch ich weiß nur nicht wie anfangen soll...
    Also wie ich php dazu bringe das es den output von python der normalerweise in der konsole landen würde "aufzunehmen"

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Ich würde gar nicht erst Apache installieren. Schau dir mal flask oder bottle an. Mit bottle hast du mit ein paar Zeilen Code deine Webseite inkl. Webserver.

    Python
    from bottle import route, run, template
    
    
    @route('/hallo')
    def index():
        return template('<b>HalloWelt!</b>')
    
    
    run(host='localhost', port=8080)
  • Zitat


    Ich würde gar nicht erst Apache installieren.


    Es läuft auch nicht apache sondern lighttpd, ich will da eigentlich gar nichts dran ändern, weil ich auf dem server von pi b wo dan die gui für pi a angezeit werden soll noch nen blog mitlaufen habe (gui ist natürlich login geschützt (zumindest denke ich das es sicher ist :D ))

    Bezüglich HTMl und Python: Vertragen sich die beiden überheupt? ich hatte dazu bis jetzt noch nichts gehöhrt :/

    zu mod_python: wie gesagt bei mir läuft lighttpd, was ich persönlich mehr mag als apache...

    Aber danke für die Vorschläge :)

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

    Einmal editiert, zuletzt von hehxes (22. August 2014 um 11:54)


  • Bezüglich HTMl und Python: Vertragen sich die beiden überheupt? ich hatte dazu bis jetzt noch nichts gehöhrt :/

    Python ist in meinen Augen die Sprache, für webbasierte Anwendungen. Google, Youtube, Dropbox, Mercedes, Orange und viele mehr haben Python als Sprache gewählt.


    EDIT:
    https://wiki.archlinux.de/title/Lighttpd#Python

  • dann hab ich schon wieder etwas dazugelernt :d danke für den hinweis.

    ich hab trotzdem keinen plan wie ich die rüchgabewerte verarbeiten soll :D

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Nur noch mal zum Verständnis:

    Soweit ich das mitgekriegt habe willst du einen Roboter o.ä. basteln.
    Dazu verwendest du einen RaspberryPI der dein Gefährt direkt über GPIO usw steuert.
    Ein weiterer RaspberryPI dient als Webserver.

    Nun möchtest du eine Kommunikation zwischen beiden RaspberryPI's umsetzen :huh:

    Sowas ähnliches habe ich ja auch (siehe Signatur), mit dem Unterschied das ich nur einen RaspberryPI habe und zum steuern einen Arduino verwende (der PI ist das Gehirn, der Arduino nur das ausführende Organ.)

    Ich verwende Sockets um zwischen meiner Weboberfläche und den Python Scripts eine Kommunikation zu ermöglichen. Das WebInterface nutzt dazu in Javascript WebSocket, sodass ich auch ohne Seiten-reload die Werte aktualisieren/übermitteln kann und in Python nutze ich tornado für WebSockets.
    Man kann Sockets auch mit purem PHP verwenden, was allerdings ein ständiges neuladen der Seite verlangt. Das lässt sich zwar auch mit AJAX realisieren, verursacht aber mehr Last auf dem WebServer und erzeugt auch unheimlich viele Logeinträge.. Deshalb hab ich mich lieber für Javascript entschieden. PHP wird auf dem Server ausgeführt, Javascript auf dem Client.

    Das Problem mit Tornado ist allerdings das der kein threading unterstützt und somit das Python Script blockiert. Deshalb musste ich das ganze aufsplitten und 2 verschiedene Python Scripts verwenden:

    • RoPi_Socket.py -> stellt 2 threads zur Verfügung: einen SocketServer und einen Serial_Read/Write zum Arduino.
      Die beiden Threads laufen asyncron, behindern/blockieren sich also nicht gegenseitig.
    • WebSocketControl.py -> stellt den tornado WebSocketServer zur Verfügung.
      Sobald ein Befehl oder eine Anfrage vom WebInterface über WebSocket eintrudelt wird eine Socket Verbindung zum RoPi_Socket.py hergestellt und ein Befehl abgesetzt.


    Bei mir dient das WebInterface aber nur der unabhängigen Kontrolle, mein Roboter soll später unabhängig vom WebInterface agieren können. Deshalb habe ich mich auch zu diesem Modularen Aufbau entschieden. RoPi_Socket.py ist vom WebSocketControl.py unabhängig und nicht darauf angewiesen.

    Beide Python Scripts findest du >> hier <<

  • danke erstmal für den tipp :)
    ich werd mir das mal anschauen, meld mich dann heut abend zurück ^^

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Ok ich hab mir dein Post mal angeschaut, sieht gut aus :) Leider komme ich nicht sehr viel weiter weil ich einfach nicht weiß wie python seine Werte an PHP übergeben soll :/
    Deine Webgui sieht schön aus, aber anscheinden machst du das ja komplett über python wenn ich das richtig verstanden habe... Bei mir hängt durch den zweiten pi noch ein server mit drine (ich kann das setup leider nicht so einfach ändern weil eben noch eine richtige website mit drine hängen habe ( wenn ich deinen gedankeverlauf richtig gefollg bin war es ja das was du vorgeschlagen hattes :) (ich glaube wir hatte das thema mit einem kompletten python webserver schon mal :D ))

    Und nochmal zu deiner Anfangsfrage: Ja du erinerst dich richtig, genau das habe ich vor. (ein roboter pi und ein webserver pi die zusammen arbeiten sollen)

    Wegen dem code:
    ich habe brauche einen befehl um python anzuweisen einen output zu php zu exportieren. sinnvoll denke ich wäre das das python seinen output in einen datei schreibt, diese dann von einem php script eingelesen wird und dann die werte darus an den webserver übergeben werden, die dann mit js alert angezeit werden :)
    Man brächte ja auch keine if abfrage seitens js, denn wenn ich python (die python scripte) mir so einstelle das nur ein output beim "fehlerfall" (abstand weniger als 20cm) generiert wird.

    Das mit dem JS alert würde ich hinbekommen schätze ich, probleme sehe ich nur darin, die werte (wie oben schon erwähnt) zu übergeben :)

    Ich hoffe man kann meine gedanken nachvollziehen, wenn nicht einfach nachfragen, bevor am ende wieder alle verwirrt sind :D (nochmal sorry for that)

    lg Tim

    PS: eigentlich wollte ich ja gestern abend antworten, leider hatte ich das dann doch vergessen :P

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Ok ich hab mir dein Post mal angeschaut, sieht gut aus :) Leider komme ich nicht sehr viel weiter weil ich einfach nicht weiß wie python seine Werte an PHP übergeben soll :/

    Mit PHP mach ich eher wenig, die Kommunikation übernimmt Javascript.

    Im Prinzip läuft das so ab:
    - Javascript stellt eine Verbindung über WebSocket zum Tornado-Python her.
    - Javascript setzt einen Befehl ab, zum Beispiel: get.system.uptime
    - Tornado übergibt diese Anfrage an eine "def" in der der Befehl bearbeitet wird -> auslesen der /proc/uptime Datei und den Richtigen Wert zurückgeben (return)
    - Tornado schickt den return über die selbe Verbindung wieder zurück
    - Javascript aktualisiert den entsprechenden div/id im HTML Code


    Ich hab mein WebIf noch nicht veröffentlicht weil das noch nicht fertig ist. Aber ich poste dir trotzdem mal grobe Stücke:
    (Achtung: Professioneller Aufbau :))

    Du brauchst eine index.php mit ungefähr folgendem Inhalt:

    &quot;index.php&quot;

    [/spoiler]

    Und zu guter letzt die ebenfalls wichtige Datei js/control.js

    &quot;js/control.js&quot;

    Ich hab jetzt absichtlich mehr gepostet als nötig, damit du besser siehst wie das Zusammenspiel aussieht.


    Deine Webgui sieht schön aus, aber anscheinden machst du das ja komplett über python wenn ich das richtig verstanden habe...

    Nein, meine WebGUI (WebInterface) besteht ausschließlich aus HTML, Javascript und ein bisschen PHP.

    Bei mir hängt durch den zweiten pi noch ein server mit drine (ich kann das setup leider nicht so einfach ändern weil eben noch eine richtige website mit drine hängen habe

    Wohin der Socket eine Verbindung herstellt ist egal, ob das lokal auf dem selben gerät ist oder zu einer anderen IP spielt keine Rolle.


    Wegen dem code:
    ich habe brauche einen befehl um python anzuweisen einen output zu php zu exportieren. sinnvoll denke ich wäre das das python seinen output in einen datei schreibt, diese dann von einem php script eingelesen wird und dann die werte darus an den webserver übergeben werden, die dann mit js alert angezeit werden :)

    Du denkst etwas zu kompliziert. Lass den Webserver weg. Der Webserver stellt es nur für einen Browser dar.

    Du willst also eine Art Log erzeugen die dann über deinen Browser angezeigt wird? Oder eher sowas wie ichs hier am Anfang beschrieben hab?


    Man brächte ja auch keine if abfrage seitens js, denn wenn ich python (die python scripte) mir so einstelle das nur ein output beim "fehlerfall" (abstand weniger als 20cm) generiert wird.

    Das mit dem JS alert würde ich hinbekommen schätze ich, probleme sehe ich nur darin, die werte (wie oben schon erwähnt) zu übergeben :)

    Ich hoffe man kann meine gedanken nachvollziehen, wenn nicht einfach nachfragen, bevor am ende wieder alle verwirrt sind :D (nochmal sorry for that)

    ...Hier kann ich dir leider nicht mehr folgen :-/


    //EDIT: Working Version:
    https://www.forum-raspberrypi.de/Thread-raspbia…82711#pid182711
    Programm -> Wert -> Websocket -> Webseite

  • Erstmal danke für die rechtlange antwort :) ein bisschen bringt mich die schon weiter, ich muss mich wahrscheinlich noch ein bisschen intensiver mit tornado beschäftigen damit ich alles blicke was du da so schreibst :D

    Zitat


    Du denkst etwas zu kompliziert. Lass den Webserver weg. Der Webserver stellt es nur für einen Browser dar.

    Du willst also eine Art Log erzeugen die dann über deinen Browser angezeigt wird? Oder eher sowas wie ichs hier am Anfang beschrieben hab?

    Nein ich will keinen Log erzeugen, die "zwichendatei" wäre für mich nur ein weg, die daten von python zu php /js zu bekommen.Und du hast wahrscheinlich recht, ich denke da sicher zu kompliziert :rolleyes: Es ist eher so was was du am anfang beschriben hast ^^

    Ich hoffe jetzt verstehst du mein gedanken konstrukt besser :P

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!