Umsetzungs-Idee gesucht...

Ich habe ja eine Funktion eingebaut, dass der Raspbi und der Drucker aus gehen, sobald ein Druck nachts fertig wird und ich nicht selber ausschalten kann. Ausgelöst wird der Shutdown über das END_PRINT Makro, wo ich am Ende das
[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
ausgelöst wird. Das würde ich nun gerne erweitern mit einer Funktion, die es mir erlaubt das
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
oder
G4 P6000
G4 P6000
abzubrechen, ohne dass ich Klipper neu starten muss. Verschiedene Ideen gehen mir da gerade durch den Kopf. Die einfachste Lösung wäre, in der printer.cfg zwei unterschiedliche END_PRINT Makros liegen habe und dann über den Slicer dann schon beim starten des Drucks zu bestimmen was am Ende passieren soll. Naja... Einfach wäre das. ...aber gibt es eine elegantere Lösung? Wie wäre es mit einem Pop-up in Mainsail während der 60 Sekunden Wartezeit, wo man mit OK/Cancel und einem Timeout den Shut-Down abbrechen kann, bzw. einfach laufen lassen kann. ...und da gehen mir gerade die Ideen aus.
51 Replies
Rigattoni
RigattoniOP2y ago
Ja okay, das hatte ich auch schon gefunden, aber ich kriege da gerade keinen Kopf dran. Statt des G4 P6000 rufe ich dann ein
[delayed_gcode SHUT_DOWN]
initial_duration: 60.
gcode:
[delayed_gcode SHUT_DOWN]
initial_duration: 60.
gcode:
auf... Aber danach verlassen sie mich gerade. Irgendwie muss ich da dann einen Cancel rein bekommen, der praktisch das Abarbeiten des gcode abbricht, statt nach Ablauf einfach weiter geht...
xenial-black
xenial-black2y ago
[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}
[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}
abbrechen geht dann aber nur wären der Duration fase mit
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
mann könnte aber auch mit dem idle timeout arbeiten denn muss man halt dann länger setzen als die dein hotend zum auskühlen braucht.
Rigattoni
RigattoniOP2y ago
@Raabi , Dann muss ich mir nur noch ein Makro erstellen, was dann das UPDATE_DELAYED_GCODE auf 0 setzt und das als Makro dann auf dem Interface sichtbar macht... Muss ich probieren, danke für den Tipp. Okay, habe das jetzt entsprechend umgesetzt und das passt. Dazu noch G4 auf 300000 gesetzt, damit timelaps auch fertig wird. Dazu natürlich ein Makro erstellt:
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
was nach dem berühmten "Done :-)" dann sichtbar ist und ich damit dann den ShutDown verhindern kann.
ratty-blush
ratty-blush2y ago
Ich kann das wählen auf der Web gui ob ich es einschalten oder ausschalten möchte die Funktion.. Kann auch während des Drucks gemacht werden.....
ratty-blush
ratty-blush2y ago
No description
Rigattoni
RigattoniOP2y ago
@Callisto Kannst du mal bitte deine Makros dazu sharen? Wäre interessant, wo die Unterschiede liegen.
ratty-blush
ratty-blush2y ago
Kann ich morgen machen... Ist aber ein etwas komplizierteres. Und vom Strom wird das alles getrennt über eine Fritz Steckdose wenn die erkennt das die Wattzahl unter einem bestimmten Wert ist für paar Minuten. Das ist dann der Fall wenn alle Lüfter aus sind und der pi auch runter gefahren ist....
Rigattoni
RigattoniOP2y ago
Das hier ist meine derzeitige Lösung, ich warte bis der Drucker abgekühlt ist:
#############################################################################################################
### PRINTER AND TASMOTA SHUT DOWN
### this macro allows you to turn off the printer
#############################################################################################################

[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0


[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False

[gcode_macro HOST_SHUTDOWN]
gcode:
RUN_SHELL_COMMAND CMD=host_shutdown

#shell command to shutdown the tasmota
[gcode_shell_command tasmota_off]
command: curl "http://192.168.178.**/cm?user=*****&password=************&cmnd=Backlog%3BDelay%20300%3BPower%20OFF"
timeout: 2.
verbose: False

[gcode_macro TASMOTA_OFF]
gcode:
RUN_SHELL_COMMAND CMD=tasmota_off
#############################################################################################################
### PRINTER AND TASMOTA SHUT DOWN
### this macro allows you to turn off the printer
#############################################################################################################

[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0


[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False

[gcode_macro HOST_SHUTDOWN]
gcode:
RUN_SHELL_COMMAND CMD=host_shutdown

#shell command to shutdown the tasmota
[gcode_shell_command tasmota_off]
command: curl "http://192.168.178.**/cm?user=*****&password=************&cmnd=Backlog%3BDelay%20300%3BPower%20OFF"
timeout: 2.
verbose: False

[gcode_macro TASMOTA_OFF]
gcode:
RUN_SHELL_COMMAND CMD=tasmota_off
ratty-blush
ratty-blush2y ago
Hier mein Macro mit infos dazu ganz unten. Ich hab das in einen eigennen Macros Ordner gepackt undd mit include in der printer.cfg hinzugefügt.
[gcode_macro Motoren_aus]
gcode: M18


[gcode_macro SHUTDOWN]
variable_printer_active: 0
variable_wants_shutdown: 0
gcode:
{action_call_remote_method("shutdown_machine")}

[gcode_macro CONDITIONAL_SHUTDOWN]
gcode:
{% if printer["gcode_macro SHUTDOWN"].wants_shutdown == 1 %}
SHOW_MSG MSG="Conditional shutdown wants shutdown, waiting for cooling down then i will shutdown"
M140 S0 ; start heating the bed to what is set in Cura
M104 S0 T0 ; start heating T0 to what is set in Cura
TEMPERATURE_WAIT SENSOR="extruder" MAXIMUM=48
SHUTDOWN
{% endif %}

[gcode_macro Auto_Shutdown_Kontrolle] #[gcode_macro GET_COMPLETE_SHUTDOWN]
gcode:
{% set shutdown_wanted = printer["gcode_macro SHUTDOWN"].wants_shutdown %}
SHOW_MSG MSG="Cmpl shutd: {shutdown_wanted}"

[gcode_macro Auto_Shutdown] ##[gcode_macro SET_COMPLETE_SHUTDOWN]
gcode:
{% set wants_shutdown = params.ENABLE|default(1)|int %}
{% if wants_shutdown >= 1 %}
{% set wants_shutdown = 1 %}
SHOW_MSG MSG="print cmpl->shutdown"
{% else %}
SHOW_MSG MSG="print cmpl->stay on"
{% endif %}
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=wants_shutdown VALUE={wants_shutdown}

[gcode_macro SAFE_SHUTDOWN]
gcode:
{% if printer_active == 0 %}
SHOW_MSG MSG="Performing safe shutdown"
SHUTDOWN
{% else %}
SHOW_MSG MSG="Job is active. No shutdown!"
{% endif %}

[gcode_macro SHUTDOWN_HANDLER_START_PRINT]
gcode:
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=printer_active VALUE=1

[gcode_macro SHUTDOWN_HANDLER_STOP_PRINT]
gcode:
; This needs to be at the end of your stop_gcode!!!!!!!
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=printer_active VALUE=0
CONDITIONAL_SHUTDOWN

[gcode_macro SHUTDOWN_HANDLER_CANCEL_PRINT]
gcode:
SHUTDOWN_HANDLER_STOP_PRINT

[gcode_macro SHOW_MSG]
gcode:
{% set MSG = params.MSG|default("No msg")|string %}
M117 {MSG}
RESPOND MSG={'"%s"' % MSG}
[gcode_macro Motoren_aus]
gcode: M18


[gcode_macro SHUTDOWN]
variable_printer_active: 0
variable_wants_shutdown: 0
gcode:
{action_call_remote_method("shutdown_machine")}

[gcode_macro CONDITIONAL_SHUTDOWN]
gcode:
{% if printer["gcode_macro SHUTDOWN"].wants_shutdown == 1 %}
SHOW_MSG MSG="Conditional shutdown wants shutdown, waiting for cooling down then i will shutdown"
M140 S0 ; start heating the bed to what is set in Cura
M104 S0 T0 ; start heating T0 to what is set in Cura
TEMPERATURE_WAIT SENSOR="extruder" MAXIMUM=48
SHUTDOWN
{% endif %}

[gcode_macro Auto_Shutdown_Kontrolle] #[gcode_macro GET_COMPLETE_SHUTDOWN]
gcode:
{% set shutdown_wanted = printer["gcode_macro SHUTDOWN"].wants_shutdown %}
SHOW_MSG MSG="Cmpl shutd: {shutdown_wanted}"

[gcode_macro Auto_Shutdown] ##[gcode_macro SET_COMPLETE_SHUTDOWN]
gcode:
{% set wants_shutdown = params.ENABLE|default(1)|int %}
{% if wants_shutdown >= 1 %}
{% set wants_shutdown = 1 %}
SHOW_MSG MSG="print cmpl->shutdown"
{% else %}
SHOW_MSG MSG="print cmpl->stay on"
{% endif %}
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=wants_shutdown VALUE={wants_shutdown}

[gcode_macro SAFE_SHUTDOWN]
gcode:
{% if printer_active == 0 %}
SHOW_MSG MSG="Performing safe shutdown"
SHUTDOWN
{% else %}
SHOW_MSG MSG="Job is active. No shutdown!"
{% endif %}

[gcode_macro SHUTDOWN_HANDLER_START_PRINT]
gcode:
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=printer_active VALUE=1

[gcode_macro SHUTDOWN_HANDLER_STOP_PRINT]
gcode:
; This needs to be at the end of your stop_gcode!!!!!!!
SET_GCODE_VARIABLE MACRO=SHUTDOWN VARIABLE=printer_active VALUE=0
CONDITIONAL_SHUTDOWN

[gcode_macro SHUTDOWN_HANDLER_CANCEL_PRINT]
gcode:
SHUTDOWN_HANDLER_STOP_PRINT

[gcode_macro SHOW_MSG]
gcode:
{% set MSG = params.MSG|default("No msg")|string %}
M117 {MSG}
RESPOND MSG={'"%s"' % MSG}
#TODO: AUTO SHUTDOWN POSSIBLY NOT WORK ON ERRORS!

#place the file shutdown.cfg into you config dir
#include this on the top of your printer.cfg
# [include shutdown.cfg]

#Call this in your start_gcode:
# SHUTDOWN_HANDLER_START_PRINT

#Call this AT THE END OF YOUR stop_gcode:
# SHUTDOWN_HANDLER_STOP_PRINT

#Call this in your cancel_gcode:
# SHUTDOWN_HANDLER_CANCEL_PRINT

#if non exists you can allways set one:
#[gcode_macro CANCEL_PRINT]
#rename_existing: CANCEL_PRINT_BASE
#gcode:
# SHUTDOWN_HANDLER_CANCEL_PRINT
# CANCEL_PRINT_BASE
#TODO: AUTO SHUTDOWN POSSIBLY NOT WORK ON ERRORS!

#place the file shutdown.cfg into you config dir
#include this on the top of your printer.cfg
# [include shutdown.cfg]

#Call this in your start_gcode:
# SHUTDOWN_HANDLER_START_PRINT

#Call this AT THE END OF YOUR stop_gcode:
# SHUTDOWN_HANDLER_STOP_PRINT

#Call this in your cancel_gcode:
# SHUTDOWN_HANDLER_CANCEL_PRINT

#if non exists you can allways set one:
#[gcode_macro CANCEL_PRINT]
#rename_existing: CANCEL_PRINT_BASE
#gcode:
# SHUTDOWN_HANDLER_CANCEL_PRINT
# CANCEL_PRINT_BASE
Wie macht man diesen Rahmen um das Script?
xenial-black
xenial-black2y ago
mit ` 3 mal davor und 3 mal danach
Rigattoni
RigattoniOP2y ago
@Callisto , ja danke für deine Lösung. Das sieht ganz gut und praktikabel aus. Da klau ich mir was raus... 😉
ratty-blush
ratty-blush2y ago
Mach das😉 👍
Bastii
Bastii2y ago
Wie schaltet ihr den Drucker dann wieder an? Immer über die Web Oberfläche des tasmota/shelly? Möchte das ganze nächste Woche neu machen und würde das gerne implementieren
ratty-blush
ratty-blush2y ago
Über mein Handy oder am PC....Mein Drucker ist an einer AVM FRITZ!DECT 200 eingesteckt.
No description
Bastii
Bastii2y ago
okey.. hab überlegt, den shelly mit einem taster zu versehen, der am drucker hardwaremäßig dann betätigt wird ..
ratty-blush
ratty-blush2y ago
Keine Ahnung von shelly und tasmota. Die Fritz Steckdose hat alles was ich brauche muß nix umständlich programmieren (fritzbox Oberfläche) und auch ein Knopf 😁
Bastii
Bastii2y ago
hätte ich notfalls auch noch da.. xD aber der/die shelly ist halt sauber im vcore verbaut
ratty-blush
ratty-blush2y ago
Okay.. Und braucht dann kein Kabel mehr zur Steckdose?
Bastii
Bastii2y ago
steckdose->sicherung am drucker->shelly->netzteil
D!NU
D!NU2y ago
Ha, ganz cool, danke euch! Das stand sogar auf meine Liste, habe ich sogar dafür ein Sonoff POW R2 gekauft und mit Tasmota gefläsht, aber hatte ich keine Ahnung wie ich sauber den Raspi runterfahren kann
Rigattoni
RigattoniOP2y ago
Naja... wenn man einen Druckauftrag erteilt ist man eh am PC/Laptop, da hat man dann einfach einen Button auf dem Desktop, der den Tasmota einschaltet. Überlege gerade an einem Script dafür, dass mir dann bei Erreichbarkeit des Druckers auch direkt den Browser öffnet und Cam und Weboberfläche hoch bringt. Cam zur Kontrolle ob das Bett auch frei ist und ich schon mal vorheizen kann, bevor ich mit SS fertig bin und den Druck hochlade. Alles Spielerei, aber ich bin es auch auf der Arbeit gewohnt, dass ich so viel wie möglich automatisiere. Bin allerdings kein Freund davon, den Tasmota entscheiden zu lassen, ob er sich ausschaltet weil er unter der Schaltschwelle an Stromverbrauch liegt. Ich habe es weiterhin nur an der Temperatur der Nozzle festgemacht. Unter 50°C --> Warte noch 1 Minute --> Fahre den Pi runter --> warte 1 Minute --> Schalte Tasmota off.
Bastii
Bastii2y ago
Aktuell läuft der pi durch und schaltet nur die 24v aus. Aber ich glaube, ich fahre den Weg mit den Taster, da ich zukünftig das Display ja habe. Slice viel im Vorfeld und starte dann wenns passt den Druck.
ratty-blush
ratty-blush2y ago
Meine Fritz Steckdose hab ich auch so eingestellt.. Der Lüfter fürs Hotend Arbeit ja auch noch bis 50°C. Wenn der pi schon runter gefahren ist und der Lüfter fürs hotend noch läuft liege ich bei 7,2 Watt ist er aus bei 4,8. Schaltschwelle bei 5Watt warte 2min und dann Strom cutten....
Bastii
Bastii2y ago
so hab ich es beim alten cr10 mit dect verstehe ich das richtig bei dir: du kannst mit deinem script und den befehlen im start/end gcode deinen pi ausschalten. Aber nur wenn das hotend unter 48°C. dann geht die funktion vom dect mit unter 5W los, das er ausschaltet?
ratty-blush
ratty-blush2y ago
Nee der pi geht vorher aus über das Script . Aber die Leistungsschwelle ist erst unter dem eingestellten bereich wenn auch der Hotend Lüfter ausgeht und der geht aus bei 50°C was ja normal ist.... Die Befehle kann ich während des Drucks aussuchen ob er von alleine runter fahren soll nach dem Druck oder nicht.. Kann ich natürlich auch wieder ändern on the fly wenn ich mich entscheide ins Bett zu gehen oder ich doch wach bleiben sollte.. Default ist das er nicht drunter fährt nach dem Druck... Frage beantwortet ?
Bastii
Bastii2y ago
ja so meinte ich es .. also hab ich es schon verstanden xD mal schauen .. evtl mach ich es genauso oder ne mischung aus @Callisto und @Rigattoni theoretisch muss ich ja nur den shelly umprogrammieren auf die leistungegrenze oder es mit ins script nehmen... wobei das nicht geht, wenn der pi runterfährt und dann versetzt ausschalten soll :/
Rigattoni
RigattoniOP2y ago
Ich verlasse mich nicht auf die Schaltschwelle. Habe da schon schlechte Erfahrung in der Vergangenheit gemacht. Nicht beim drucken, sondern in einer Multimedia-Umgebung die sich im Testlabor befand. Klare Kommandos an den Pi und auch an den Shelly, das ist das wo man sicher geht, dass nicht durch irgendeinen Zufall gerade mal die Stromabnahme so weit runter geht, dass das Ding sich selbstständig macht... oder anders rum, dass durch irgendeinen Blödsinn die Schaltschwelle nicht erreicht wird. Mag sein, dass das eher unwahrscheinlich ist, aber mir hat der Quark damals fast einen SOP versaut, weil wir den Fehler nicht haben finden können, warum das Testsystem im automatischen Test einfach aus gegangen ist. Was interessant ist, das ist die Umentscheidung, ob man danach runterfahren lassen will, oder halt nicht. Das habe ich anders implementiert, braucht aber noch eine Anpassung, damit ich das "unterwegs" machen kann, also während des Drucks Im Moment kann ich das am Ende des Druckes machen, solange der Drucker abkühlt.
Bastii
Bastii2y ago
wie läuft das dann bei dir? kannst ja schlecht pi runter fahren und dann strom weg oder laufen die über 2 seperate anschlüsse? und wie machst du den pi dann wieder an? auch knopf am drucker oder steckdose übern pc?
Rigattoni
RigattoniOP2y ago
Du kannst einen Shutdown zum Shelly senden mit einem Timeout. d.h. Klipper schickt erst eine Shutdown zum Shelly und fährt danach erst den Pi runter.
Bastii
Bastii2y ago
ah .. okey.. das sieht man in deinem script nicht
Rigattoni
RigattoniOP2y ago
[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
{% if printer.extruder.temperature < 50 %}
RESPOND MSG="Printer switch-off..."
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% else %}
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0

[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False

[gcode_macro HOST_SHUTDOWN]
gcode:
RUN_SHELL_COMMAND CMD=host_shutdown

#shell command to shutdown the tasmota
[gcode_shell_command tasmota_off]
command: curl "http://192.168.178.26/cm?user=admin&password=********************&cmnd=Backlog%3BDelay%20300%3BPower%20OFF"
timeout: 2.
verbose: False

[gcode_macro TASMOTA_OFF]
gcode:
RUN_SHELL_COMMAND CMD=tasmota_off
[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
{% if printer.extruder.temperature < 50 %}
RESPOND MSG="Printer switch-off..."
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% else %}
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}

[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0

[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False

[gcode_macro HOST_SHUTDOWN]
gcode:
RUN_SHELL_COMMAND CMD=host_shutdown

#shell command to shutdown the tasmota
[gcode_shell_command tasmota_off]
command: curl "http://192.168.178.26/cm?user=admin&password=********************&cmnd=Backlog%3BDelay%20300%3BPower%20OFF"
timeout: 2.
verbose: False

[gcode_macro TASMOTA_OFF]
gcode:
RUN_SHELL_COMMAND CMD=tasmota_off
Bastii
Bastii2y ago
man sieht dein passwort
Rigattoni
RigattoniOP2y ago
Danke... komplett vergessen. Im SS habe ich 2 verschiedene Drucker-Profile. Da entscheide ich schon eigentlich, ob ich danach runterfahren lassen will, oder nicht. Ich habe das Endprint-Makro kopiert und mit neuem Namen hinterlegt. Da ist dann außer dem Namen nur noch eine Zeile ans Ende dran gekommen:
#############################################################################################################
### Changed END_PRINT
### Added shutdown sequence to END_PRINT
#############################################################################################################

[gcode_macro END_PRINT_SHUT_OFF]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
POWER_OFF_PRINTER
#############################################################################################################
### Changed END_PRINT
### Added shutdown sequence to END_PRINT
#############################################################################################################

[gcode_macro END_PRINT_SHUT_OFF]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
POWER_OFF_PRINTER
Helge Keck
Helge Keck2y ago
das save and restore gcode kannst du dir hier sparen, schaltest das ding ja sowieso aus
Rigattoni
RigattoniOP2y ago
Ja stimmt... Den Usernamen und PW wollte ich auch noch über Variable machen. Bin aber noch nicht dazu gekommen.
extended-salmon
extended-salmon2y ago
Habe jetzt auch alle Teile da zum umsetzen. Will es über Leistung mit einem Homematic Schalterlauf mache das es automatisch schaltet wenn die eingestellte Spannung unterschritten wird also das Hotend abgekühlt ist, der Lüfter aus geht und die pi runter gefahren ist. Kann mir einer helfen was ich dafür wo eintragen muss? Mit der Homematic bekomme ich hin. Zudem wäre es cool das über das Display zu deaktivieren über button
Rigattoni
RigattoniOP2y ago
Ich bin überhaupt kein Freund davon, das über die abgenommene Leistung zu machen. Über die Spannung kannst du das nicht machen, weil die sich nicht ändert... oder nur minimal innerhalb des Stromnetzes. 😉 Warum über Klipper und nicht selbstentscheidend über die genutzte Leistung: Du tauschst irgendwas aus, dann musst das möglicherweise neu konfigurieren. Zudem: Dann hängst du einen Luftfilter dran, der nachlaufen soll, bis alles abgekühlt ist... schon ist deine Version ohne Funktion. Klar, man kann den Temperaturgesteuert machen, dass er ausschaltet, wenn das Bett auf eine bestimmte Temp abgekühlt ist. Viel sauberer ist es meines Erachtens nach, das über ein gcode Macro zu machen. Dann schaltet der Drucker ab, wenn die Temp erreicht ist, unabhängig, ob da evtl. noch ein nachgeschalteter Lüfter dran hängt, ein evtl. Filament-Dryer, eine zusätzliche Lampe oder was auch immer. Zudem musst du IMMER erst den Raspi sauber runterfahren, einfach ausschalten geht ein paar Mal gut, danach kannst du neu flashen, weil der Inhalt der SD kaputt ist. Nicht ganz, Helge. Ich habe ja ein Macro, mit dem ich das Abschalten ausschalten kann.
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0
Benutze ich häufiger, wenn ich feststelle, dass ich dann doch nicht abschalten will, weil ich evtl. den Druck mit anderen Settings noch mal neu starten will.
extended-salmon
extended-salmon2y ago
Die Leistung vom Homematic an zu passen ist überhaupt kein Ding. Deswegen soll ja vor dem Abschalten vom Strom ein Shutdown Befehl an die pi gesendet werden
Helge Keck
Helge Keck2y ago
aber den gcode state bringt nur was wenn die motoren noch an sind sobald die aus sind ist das nutzlos
Rigattoni
RigattoniOP2y ago
Du hast natürlich Recht... Allerdings ist der Call für den Shutdown am Ende von End_Print. Wenn ich also nach dem Druck entscheide, dass ich weiter drucken will, dann passt das ja. Im Fall, dass ich den Drucker abschalten lasse, sind die beiden Zeilen natürlich obsolet.
Helge Keck
Helge Keck2y ago
da ist doch ein M84 drin, das sagt doch schon alles, das shcaltet die mtoren aus
Rigattoni
RigattoniOP2y ago
Wo hier?
[gcode_macro END_PRINT_SHUT_OFF]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
POWER_OFF_PRINTER
[gcode_macro END_PRINT_SHUT_OFF]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
POWER_OFF_PRINTER
Helge Keck
Helge Keck2y ago
# Steppers off M84
Rigattoni
RigattoniOP2y ago
Ach-... übersehen... Aber das ist die Original End_Print, nur um die letzte Zeile ergänzt Das ist das Original Makro:
# The end_print macro is also called from CANCEL_PRINT.
[gcode_macro END_PRINT]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
# Clear bed mesh so that G28 doesn't fail.
BED_MESH_CLEAR
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
# The end_print macro is also called from CANCEL_PRINT.
[gcode_macro END_PRINT]
description: End print procedure, use this in your Slicer.
gcode:
SAVE_GCODE_STATE NAME=end_print_state
_END_PRINT_BEFORE_HEATERS_OFF
TURN_OFF_HEATERS
_END_PRINT_AFTER_HEATERS_OFF
_END_PRINT_PARK
# Clear skew profile if any was loaded.
{% if printer["gcode_macro RatOS"].skew_profile is defined %}
SET_SKEW CLEAR=1
{% endif %}
# Steppers off
M84
# Part cooling fan off
M107
# Clear bed mesh so that G28 doesn't fail.
BED_MESH_CLEAR
M117 Done :)
RESPOND MSG="Done :)"
RESTORE_GCODE_STATE NAME=end_print_state
Wie schon gesagt... Ich bin kein Freund davon. Ich verlasse mich nicht darauf, dass da auf ein halbes Watt Leistungsaufnahme genau geschaltet wird. Das hätte ich auch mit Tasmota so machen können, habe mich aber dagegen entschieden. Im Endeffekt aber kannst du die gleiche Routine nehmen, wie ich hier schon gepostet habe und nur die Zeile raus nimmst, wo ich Tasmota_Off aufrufe:
#############################################################################################################
### PRINTER AND TASMOTA SHUT DOWN
### this macro allows you to turn off the printer
#############################################################################################################

[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}
#############################################################################################################
### PRINTER AND TASMOTA SHUT DOWN
### this macro allows you to turn off the printer
#############################################################################################################

[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota

[gcode_macro POWER_OFF_PRINTER]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10

[delayed_gcode DELAYED_POWER_OFF_PRINTER]
initial_duration: 0.
gcode:
{% if printer.extruder.temperature > 50 %}
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=10
{% else %}
G4 P300000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota
{% endif %}
extended-salmon
extended-salmon2y ago
OK wo Pack ich das rein in welche Datei?
Rigattoni
RigattoniOP2y ago
DAs kommt in die printer.cfg by User Overwrites. Zudem musst du auch die End_Print editieren wie schon oben geschrieben. ...also die END_PRINT aus der macros.cfg im Ordner RatOS raus kopieren und dort ablegen mit dem Aufruf POWER_OFF_PRINTER am Ende der END_PRINT
extended-salmon
extended-salmon2y ago
Hast du auch eine Idee wie ich das so damit verknüpfen kann das ich es aktivieren oder abschalten kann?
No description
Rigattoni
RigattoniOP2y ago
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0

[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False
[gcode_macro StOP_POWER_OFF]
gcode:
UPDATE_DELAYED_GCODE ID=DELAYED_POWER_OFF_PRINTER DURATION=0

[gcode_shell_command host_shutdown]
command: poweroff
timeout: 3.
verbose: False
extended-salmon
extended-salmon2y ago
Cool danke dir werde dann die Woche Mal spielen 😊
Rigattoni
RigattoniOP2y ago
Aktivieren geht nur über die END_PRINT ...also der Aufruf zum Abschalten nach Druck-Ende. Das würde ich definitiv NICHT als externen Call rein packen. Was du da oben auch siehst, ist das Abschalt-Makro, was du beim inaktiven Drucker nutzen kannst.
[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota
[gcode_macro POWER_OFF_PRINTER_NOW]
gcode:
RESPOND MSG="Waiting for cooling down to shut off."
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50
G4 P6000
host_shutdown # Calls safe shut down of Raspbi
# tasmota_off # Calls Shell command to switch off Tasmota
Das würde ich so in die UI einbinden, dass es nur sichtbar ist, wenn der Drucker idle ist. Vielleicht noch ein guter Rat von mir: Pack die User Overwrites in eine eigene CFG rein im gleichen Verzeichnis wie die printer.cfg liegt und lese die own_macros.cfg dann über [include own_macros.cfg] in die printer.cfg ein... in den User overwrites natürlich.
Want results from more Discord servers?
Add your server