Python Script in JavaScript Abfrage ausführen

  • Hallo, ich habe vor eine Heizungssteuerung zu bauen. Dafür habe ich ein Funk Thermostat genommen, dieses auseinander gebaut und den motor mit dem Raspberry Pi über die gpio pins verbunden. Daraufhin habe ich pythonscripte geschrieben, die den Motor für eine bestimmte zeit drehen lassen, sodass sich der raum um 1°C erhitzt (Zum ausgleichen der Temperatur nehme ich einen TMP36. Das kommt aber später). Die Steuerung soll über eine website erfolgen. Nun habe ich aber folgendes Problem: Ich habe einen Schieberegler eingebaut, den ich mit einen Java Script auslese (Code steht unten). Das Script soll dan den aktuellen wert des reglers abfragen und je nach wert das dazügehörige Pythonscript ausführen. Doch wie macht man das, dass die Abfrage das Script ausführt?
    z.B.

    Code
    if (x == 14){
           
                      exec ./script.py;
    
    
       }

    (Nur als Beispiel wie ich es mir vorstelle.)

    Mein Code:
    [code=php]<!doctype html>
    <html>
    <head>
    <link rel="stylesheet" href="css/style.css">
    <meta charset="utf-8">
    <title>Heizungssteuerung</title>
    </head>

    <body>
    <div>
    <h1 class="text-center">Heizungssteuerung</h1><br><br>

    <div>
    <form oninput="x.value=parseInt(a.value)">
    <p>Temperatur:</p>
    <input type="range" min="12" max="28" value="12" id="a" name ="bar" step="1">
    <output name="x" for="a">°C</output>
    <button class="btn btn-warning" name="change" onclick="temperatur()">Temperatur ändern</button>

    <script type="text/javascript" language="javascript">
    function temperatur(){
    var x = document.getElementById("a").value;
    if (x == 14){


    }
    }
       
    </script>
       
    </form>
    </div>
    </div>
    </body>
    </html>[/php]

  • So geht das nicht, du musst ein AJAX-Request an den Server stellen, welches eine Seite aufruft die dein Skript ausfuehrt und das Ergebnis zurueckliefert. Da findet sich bestimmt was zum zusammenkloeppeln in meigrafd's FAQ/Linkliste hier.

  • Okay, dann wäre folgendes an sich ja richtig oder?(das habe ich gerade im Netz gefunden):

    [code=php]<!doctype html>
    <html>
    <head>
    <link rel="stylesheet" href="css/style.css">
    <meta charset="utf-8">
    <title>Heizungssteuerung</title>
    </head>

    <body>
    <div>
    <h1 class="text-center">Heizungssteuerung</h1><br><br>

    <div>
    <form oninput="x.value=parseInt(a.value)">
    <p>Temperatur:</p>
    <input type="range" min="12" max="28" value="12" id="a" name ="bar" step="1">
    <output name="x" for="a">°C</output>
    <button class="btn btn-warning" name="change" onclick="temperatur()">Temperatur ändern</button>

    <script type="text/javascript" language="javascript">
    function temperatur(){
    var x = document.getElementById("a").value;
    if (x == 14){
           
    $.ajax({
    type:'get',
    url:'/var/www/html/LED_on.py',
    cache:false,
    async:asynchronous,

    }
    )
    }
    }
    </script>
       
    </form>
    </div>
    </div>
    </body>
    </html> [/php]


    Aber wenn ich es damit ausprobiere kommt der Fehler: ReferenceError: $ is not defined
    temperatur http://192.168.1.108/Heizung/Heizung.php:25:1
    onclick http://192.168.1.108/Heizung/Heizung.php:1:1
    Automatisch zusammengefügt:
    Und das Skript hat es auch nicht ausgeführt

    Einmal editiert, zuletzt von nitrox (24. Dezember 2016 um 15:19)

  • Du kannst auf die weise kein Python Script ausführen. Die AJAX Anfrage führt wenn dann ein PHP Script aus.

    Aber wozu apache2 und PHP verwenden um einzelne Python Scripts auszuführen? :-/ Nimm doch einfach gleich ein Python Script um alles in nur einer Datei zu vereinen (plus html Datei)

  • Okay, da hast du schon recht. Aber würde es so funktionieren wenn ich das pythonscript in ajax durch eine phi Seite (die das pythonscript ausführt) ersetze?
    Automatisch zusammengefügt:
    Beziehungsweise, wie würdest du das machen? Und eigentlich möchte ich die Struktur erstmnal so behalten, wie sie ist. Ich möchte ja nur wissen, wie ich das script nach der java script abfrage ausführen kann. :D

    Einmal editiert, zuletzt von nitrox (24. Dezember 2016 um 15:31)

  • Es gibt bereits viele Diskussionen zu diesem Themengebiet - Du bist nicht der erste und auch ganz bestimmt nicht der letzte, der über einen WebUI ein paar Lichter oder was auch immer steuern möchte.

    Ich würde das so machen wie in meiner Anleitung beschrieben weil das am sinnvollsten ist, gerade wenn man irgend etwas mit GPIO's am Pi machen möchte, bietet Python die einfachsten und umfangreichsten Möglichkeiten. Man bricht sich nur unnötig eins ab über mehrere Ecken zu gehen -> JavaScript/PHP zum ausführen eines Python Scripts.

    Wenn man denn unbedingt apache2 o.ä. behalten möchte (also ein Ressourcenfressender Binary-Dienst), wär der nächste logische Schritt eine WebSocket Verbindung zwischen JavaScript und Python aufzubauen um darüber dann Kommandos abzusetzen etc.

    Und der danach folgende logische Schritt wäre solch ein GET_Request an eine PHP Datei zu stellen, nicht an ein Python Script. Letzteres funktioniert wie gesagt never:

    Code
    $.ajax({
         type:'get',
         url:'/var/www/html/LED_on.py',
         cache:false,
         async:asynchronous,
    })

    Man achte auf URL, nicht PATH. Du setzt dort keine gültige URL.
    Das kannst du dir in der Form 100% aus dem Kopf schlagen. apache2/nginx/lighttpd kann kein Python Script direkt ausführen, dafür hat er kein Module. Die einzige Möglichkeit hierfür wäre das über CGI abzuwickeln, aber das gilt als sehr unsicher.

    Wenn dann solltest du es so umsetzt wie es normalerweise gemacht wird:

    Code
    $.ajax({
         type: 'get',
         url: '/LED.php',
         cache: false,
         async: asynchronous,
    })


    JavaScript => PHP => Python

Jetzt mitmachen!

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