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)
Using the Simple API mixin, you can allow your web page to make a call back into your Python. Mit dem Simple API-Mixin können Sie Ihrer Webseite erlauben, einen Rückruf in Python zu tätigen.
In the arguments for your class definition near the top, add:
octoprint.plugin.SimpleApiPlugin,
Add this:
def get_api_commands(self):
return dict(led=["state"])
def on_api_command(self, command, data):
if command == "led":
bOn = "{state}".format(**data)
# Führen Sie in Python eine Aktion aus, um die LED ein- und auszuschalten
Also ich habe nun beide Varianten ausprobiert... ich muss wohl zu dumm fürs Programmieren sein.
Habe nun folgendes gemacht:
Apache Webserver aufgelegt auf dem Pi
In der index.jinja2 Datei: /home/pi/OctoPrint/venv/lib/python2.7/site-packages/octoprint/templates/index.jinja2
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
LED = 7
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED, GPIO.HIGH)
time.sleep(60)
GPIO.output(LED, GPIO.LOW)
Nicht schön aber es geht...
Ein Nachteil hat das ganze:
Wenn ich auf den Button klicke dann geht das Licht an
allerdings lädt er nach 60 Sekunden (oben im Script definiert) dann eine leere Seite.
Das kann ich nur verhindern in dem ich dann im Browser auf das X klicke um das Laden zu beenden.
Letztendlich dient das ganze dazu wenn ich von Unterwegs mich mit meinem VPN verbinde dann Licht einzuschalten damit ich per Webcam (im Octoprint) dann sehen kann wie weit der Druck ist.
Ja da werden einige nun "Oh Gott" rufen und die Hände über dem Kopf zusammenschlagen aber die komischen Wege funktionieren bei mir... die einfachen und sauberen Methoden hingegen nicht :*(
Edit:
Den Button habe ich nun in den Steuerbereich von Octoprint verfrachtet:
/home/pi/OctoPrint/venv/lib/python2.7/site-packages/octoprint/templates/tabs/control.jinja2
I didn't expect that you would edit the OctoPrint code directly. I thought you might be working on your own plugin perhaps. I'm pretty sure that foosel would not like this; the next update will just overwrite your work. Ich hatte nicht erwartet, dass Sie den OctoPrint-Code direkt bearbeiten würden. Ich dachte, Sie arbeiten vielleicht an Ihrem eigenen Plugin. Ich bin mir ziemlich sicher, dass Foosel das nicht gefallen würde. Das nächste Update überschreibt nur Ihre Arbeit.
If you would like to add a custom Control button, it can be done as Schnello was suggesting. In this way, your own button would appear in the interface and you wouldn't be directly editing the OctoPrint template's code. Wenn Sie eine benutzerdefinierte Steuerungsschaltfläche hinzufügen möchten, können Sie dies wie von Schnello vorgeschlagen tun. Auf diese Weise würde Ihre eigene Schaltfläche in der Benutzeroberfläche angezeigt und Sie würden den Code der OctoPrint-Vorlage nicht direkt bearbeiten.
Schau dir mal System commands an, die sind genau für sowas da. Alternativ schau dir das Plugin hier an und bau dir dann eine Custom Control mit einem Befehl für deine LEDs.
Jawoll das hat geklappt!!!!! und ganz ohne den Nachteil.
Ich wusste schon warum ich vor einiger Zeit gespendet habe!
Octoprint ist einfach Hammer und dazu noch die Plugins. Und natürlich ihr die einem helfen!
Okay.... zu früh gefreut... ich weis nicht warum aber wenn ich über das Plugin das Licht einschalten will dann sorgt das dafür das mein Drucker sich aufhängt wenn ich auf den Knopf drücke... nehme ich die alte Variante über den Server und das Script dann funktioniert das (hab das zur sicherheit noch drin gelassen, nun weis ich warum ^^ )#
Mal gehts mal schießt er den Drucker damit ab.
Hm wenn sich das so äußert dann ist die Funktion leider für mich nicht Praktikabel denn mein Druck der gerade lief durfte ich soeben entsorgen... (sehr ärgerlich )
Es hört sich so an, als würde Ihr Skript im Hauptthread von OctoPrint "blockieren", sodass die Aktivität angehalten wird, bis sie beendet ist. Sie können es stattdessen im Hintergrund ausführen.
Der Fehler tritt auf wenn ich den Knopf mehr als 1x Drücke. Das Relai klickt dann und bleibt dann für ca 5 Sekunden aktiv. Danach schaltet es wieder ab und Octoprint reagiert dann nicht mehr und ist nicht mehr erreichbar. Stürzt ab.Remote und SSH funktionieren.
Edit: Octoprint stürzt nur ab wenn ich den Knopf des Plugins verwende wo dann der GCODE gesendet wird.
Die PHP Version funktioniert auch bei 20x drücken. Habe es gerade getestet.
Dann das script anlegen. In meinem Fall ist "nas" der selbe User wo auch octoprint ausgeführt wird:
Ein Testscript welches einfach das Datum nach /tmp schreibt:
nas@service-uplink:~$ cat /home/nas/octo.sh
Uns sobald ich auf den Button drücke wird das Script ausgeführt:
nas@service-uplink:~$ cat /tmp/testlog.txt
Sat Aug 17 18:48:41 CEST 2019
Sat Aug 17 18:53:00 CEST 2019
Sat Aug 17 18:53:10 CEST 2019
Sat Aug 17 18:53:11 CEST 2019
Sat Aug 17 18:53:50 CEST 2019
Sat Aug 17 18:53:51 CEST 2019
Sat Aug 17 18:53:51 CEST 2019
Sat Aug 17 18:53:51 CEST 2019
Sat Aug 17 18:53:51 CEST 2019
Sat Aug 17 18:53:52 CEST 2019
Sat Aug 17 18:53:52 CEST 2019
Sat Aug 17 18:53:53 CEST 2019
Sat Aug 17 18:53:53 CEST 2019
Sat Aug 17 18:53:53 CEST 2019
Sat Aug 17 18:53:53 CEST 2019
Sat Aug 17 18:53:54 CEST 2019
Sat Aug 17 18:58:35 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:36 CEST 2019
Sat Aug 17 18:58:37 CEST 2019
Sat Aug 17 18:58:37 CEST 2019
Grüße
PS: Lt Marlin Doku (ich verwende kein Marlin werden M118 Codes wie folgt ausgeführt