Python Script mit Button ausführen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Ramset

Aloa,

Ich nutze für meinen 3D Drucker Octoprint und habe eine LED Beleuchtung die ich mit dem Knopf in Octoprint Ein und Ausschalten will. Das Script funktioniert und sonst ist alles bereit.
Mein Problem:
Die LED Beleuchtung möchte ich mit einem Knopf schalten und dafür habe ich in der control.jinja2 Datei einen Knopf hinzugefügt über Copy&Paste und versucht mein Python Script damit irgendwie zu Starten.

Der Button ganz oben soll das script ausführen allerdings habe ich keine Ahnung wie ich das hier machen soll. (Bin kein Programmierer oder sowas)

Auszug:

<h1>{{ _('General') }}</h1>
<div>
<button class="btn btn-block control-box" data-bind="enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { "/home/pi/OctoPrint/script/led.py"}) }">{{ _('Licht an /15 Sek') }}</button>
<button class="btn btn-block control-box" data-bind="enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { $root.sendCustomCommand({type:'command',command:'M18'}) }">{{ _('Motors off') }}</button>
<button class="btn btn-block control-box" data-bind="enable: isOperational() && loginState.isUser(), click: function() { $root.sendCustomCommand({type:'command',command:'M106 S255'}) }">{{ _('Fan on') }}</button>
<button class="btn btn-block control-box" data-bind="enable: isOperational() && loginState.isUser(), click: function() { $root.sendCustomCommand({type:'command',command:'M106 S0'}) }">{{ _('Fan off') }}</button>
</div>
</div>

Ich hoffe ich habe alle wichtigen Infos genannt, falls nicht fragt nur.

LG
Ramset
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da es sich um JavaScript in einem Browser handelt, geht das nicht. Oder fändest du das gut, wenn eine beliebige Webseite einfach Code auf deinem Rechner ausführen kann?

Wenn das also überhaupt geht, dann nur weil jemand - wie bei den anderen Kommandos sichtbar - dem Browser extra Funktionen spendiert hat. Die musst du nachschauen. Oder erfragen. In der octoprint Community. Denn mit Python wiederum hat das ja nichts zu tun.
Ramset

Naja eine Website die Code auf meinem Rechner ausführt fände ich wohl nicht so gut.
Aber Octoprint läuft auf einem Raspberry Pi und das Script liegt dort auch. Dem Knopf sagen das er das Script welches auf dem Pi liegt dann aktiviert geht nicht?
Ist ein GPIO Script was die Lampe nur anschaltet und dann nach 15 Sek aus.

Sowas geht nicht?
Benutzeravatar
sparrow
User
Beiträge: 4512
Registriert: Freitag 17. April 2009, 10:28

Octoprint scheint eine Webanwendung zu sein, die Flask verwendet. Das was dort in der Seite gerendert wird, deren Template du geändert hast, wird ja an den Client ausgeliefert.
Du musst also dem Server sagen, dass der Button gedrückt wurde. In der Regel, indem man eine URL auf dem Server aufruft. Was dann passiert müsstest du in Flask abhandeln.
Alternativ könntest du dir anschauen, wie das mit den $root.sendCustomCommand-Dingen geregelt ist, die bei den anderen Buttons aufgerufen werden. Auch die müssen ja irgendwo verarbeitet werden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nur weil das alles auf einem Rechner passiert ist das Funktionsprinzip nicht magisch anders. Das ist ein Browser. Und ein Webserver. Wo die beide laufen ist irrelevant. Browser können eben keine Skripte auf dem Server aufrufen. Wie gesagt - wenn sowas konfiguriert/implementiert werden kann, verrät dir das die octoprint Community.
Ramset

Danke für den Hinweis, ich wende mich nun dort hin.

Einen schönen Abend noch.

Ramset
Antworten