Shutdown and GET-Request after all jobs are done
I have a little print farm with four printers and I want to shut down the farm after all jobs are done.
For the shutdown I can send an GET request to switch off the power supply. But what is the best approach to trigger the switch from repetier?
For the shutdown I can send an GET request to switch off the power supply. But what is the best approach to trigger the switch from repetier?
Comments
You can define a function in your printer config that gets called at job end and tests if condition is met for a "special" action. Call this in response to jobDeactivated event. With
@sendToPrinter slug command
Sends command to the printer with given slug name. That way you can execute command sin the context of another printer. Note that command and all command parameter get parsed first in your printer context, so outer quotes get removed and computed expressions get executed. Escape them if that is not wanted accordingly.
you can execute commands in other printers. Idea would be to set a counter in server global to 0 and let each printer add 1 to it if job is running.
@func testShutdown
@if {{sglobal.jobCount > 0}}
...
@endif
@endfunc
@set sglobal.jobCount 0
@sendToPrinter p1 set sglobal.jobCount {{sglobal.jobCount + job.running}}
@sendToPrinter p2 set sglobal.jobCount {{sglobal.jobCount + job.running}}
@sendToPrinter p3 set sglobal.jobCount {{sglobal.jobCount + job.running}}
@timedCall shutTimer 60000 testShutdown
p1-p3 are the slug names of your printers here. You need a delay since you do not know when the command on other printer gets executed. Most risky time is when communication is blocked during heatup of bed/extruder so you might need to increase delay.
But as said you should shutdown and then disable relay so it should bette rbe triggered by a external service or with some delay if that is possible.
"Drucker herunterfahren"
@func Jobabfrage
@if {{sglobal.jobCount > 0}}
@break
@else
@execute USB-aus
@endif
@endfunc
@set sglobal.jobCount 0
@sendToPrinter HTA3D set sglobal.jobCount {{sglobal.jobCount + job.running}}
@sendToPrinter Sidewinder_X1 set sglobal.jobCount {{sglobal.jobCount + job.running}}
@call Jobabfrage
Eine einfachere Lösung wäre für jeden Drucker eine sglobal variable zu haben ob er noch am Drucken ist. Im start Druck Ereignis auf 1 setzen und in Druck fertig/Druck abbrechen wird er auf 0 gesetzt.
Warum eigentlich USB Ausschalten? Ich weiß ywar das es geht, aber ab da kommt er ja nicht mehr wieder bis zum reboot und bei Shutdown werden sie ja auch ausgeschaltet.
Den Drucker, USB und Touchscreen vom Raspi schalte ich wegen der unter Strom stehenden Druckerdisplays aus, der Raspi läuft 24/7 durch.
Dazu rufe ich Uhubctl und Rpi-Backlight über @execute auf, das funktioniert eigentlich sehr gut, auch das Einschalten vor dem Druck funktioniert gut.
Die Stromversorgung der Drucker schalte ich mit zwei WLan Steckdosen über ifttt webhook.
Wenn ich beim Druckstart jeweils eine sglobal.Drucker1 und sglobal.Drucker2 setze, reicht es dann beim Ereignis "Drucker runterfahren" diese Variable mit if - then abzufragen?
Beispiel:
Drucker 1
Ereignisabhängig - "Sende vor Druckauftrag"
@set sglobal.drucker1 1
Drucker 2
Ereignisabhängig " Drucker herunterfahren"
@if {{sglobal.drucker1 > 0}}
@else
@execute USB-aus
@endif
Die Variable sglobal.drucker1 setzte ich beim Herunterfahren auf 0.
Teste ich sofort.
Vielen Dank für die rasche Unterstützung und liebe Grüße
Helmut
Du kannst deine Bedingung vereinfachen:
@if {{sglobal.drucker1 == 0}}
@execute USB-aus
@endif