printer.cfg opgedeeld in diverse bestanden en grootte van het bed aangepast
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Copyright (C) 2022 Justin Schuh <code@justinschuh.com>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
#
|
||||
# Credit to original source:
|
||||
# https://gist.github.com/ChipCE/95fdbd3c2f3a064397f9610f915f7d02
|
||||
|
||||
[gcode_macro bed_mesh_calibrate]
|
||||
rename_existing: _KM_BED_MESH_CALIBRATE_BASE
|
||||
variable_km_override: True
|
||||
description: Wraps BED_MESH_CALIBRATE, scaling probe count to specified area.
|
||||
Usage: See Klipper documentation.
|
||||
gcode:
|
||||
BED_MESH_CALIBRATE_FAST{%for k in params%}{' '~k~'="'~params[k]~'"'}{%endfor%}
|
||||
|
||||
[gcode_macro g29]
|
||||
gcode:
|
||||
BED_MESH_CALIBRATE
|
||||
@@ -0,0 +1,969 @@
|
||||
# Copyright (C) 2022 Justin Schuh <code@justinschuh.com>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
|
||||
################################################################################
|
||||
# Existing menu refinements.
|
||||
################################################################################
|
||||
|
||||
# Hide unused menus
|
||||
|
||||
[menu __main __octoprint]
|
||||
type: list
|
||||
name: OctoPrint
|
||||
enable: {printer["gcode_macro _km_globals"].menu_show_octoprint}
|
||||
|
||||
|
||||
# Get the file list out of the SD card menu while printing.
|
||||
[menu __main __sdcard]
|
||||
type: list
|
||||
enable: {'virtual_sdcard' in printer and
|
||||
printer["gcode_macro _km_globals"].menu_show_sdcard}
|
||||
name: SD Card
|
||||
|
||||
[menu __main __sdcard __start]
|
||||
type: command
|
||||
enable: {printer.virtual_sdcard.file_path and
|
||||
not printer.virtual_sdcard.is_active and
|
||||
printer.print_stats.state != "printing" and
|
||||
printer.print_stats.state != "paused"}
|
||||
name: Print: {printer.virtual_sdcard.file_path.split('/')|last}
|
||||
gcode:
|
||||
M24
|
||||
{menu.back()}
|
||||
|
||||
[menu __main __sdcard __select]
|
||||
type: vsdlist
|
||||
enable: {not printer.virtual_sdcard.is_active and
|
||||
printer.print_stats.state != "printing" and
|
||||
printer.print_stats.state != "paused"}
|
||||
name: Select file
|
||||
index: 1
|
||||
|
||||
[menu __main __sdcard __select __start]
|
||||
type: command
|
||||
enable: {printer.virtual_sdcard.file_path and
|
||||
not printer.virtual_sdcard.is_active}
|
||||
name: Print: {printer.virtual_sdcard.file_path.split('/')|last}
|
||||
gcode:
|
||||
M24
|
||||
{menu.back()}
|
||||
|
||||
[menu __main __setup __calib __delta_calib_auto]
|
||||
type: command
|
||||
enable: {'delta_calibrate' in printer.configfile.settings and
|
||||
not printer.idle_timeout.state == "Printing"}
|
||||
name: Delta cal. auto
|
||||
gcode:
|
||||
G28
|
||||
DELTA_CALIBRATE
|
||||
|
||||
[menu __main __setup __calib __delta_calib_man]
|
||||
type: list
|
||||
enable: {'delta_calibrate' in printer.configfile.settings and
|
||||
not printer.idle_timeout.state == "Printing"}
|
||||
name: Delta cal. man
|
||||
|
||||
# Require confirmation for anything that would abort an in-progress print.
|
||||
|
||||
# Steppers off
|
||||
[menu __main __control __disable]
|
||||
type: command
|
||||
name: Steppers off
|
||||
enable: {printer.idle_timeout.state != "Printing"}
|
||||
gcode:
|
||||
M84
|
||||
M18
|
||||
|
||||
[menu __main __control __disable_printing]
|
||||
type: list
|
||||
index: 3
|
||||
enable: {printer.idle_timeout.state == "Printing"}
|
||||
name: Steppers off
|
||||
|
||||
[menu __my_main __control __disable_printing __confirm]
|
||||
type: command
|
||||
name: Confirm steppers off
|
||||
gcode:
|
||||
M84
|
||||
M18
|
||||
{menu.back()}
|
||||
|
||||
# Add a park menu item.
|
||||
[menu __main __control __park]
|
||||
type: command
|
||||
name: Park toolhead
|
||||
enable: {printer.idle_timeout.state != "Printing" or
|
||||
printer.pause_resume.is_paused}
|
||||
index: 1
|
||||
gcode:
|
||||
G28 O ; Lazy home first.
|
||||
PARK
|
||||
|
||||
# Octoprint abort
|
||||
[menu __main __octoprint __abort]
|
||||
type: list
|
||||
enable: {printer.idle_timeout.state == "Printing"}
|
||||
name: Abort printing
|
||||
|
||||
[menu __main __octoprint __abort __confirm]
|
||||
type: command
|
||||
name: Confirm abort printing
|
||||
gcode:
|
||||
{action_respond_info('action:cancel')}
|
||||
{menu.back()}
|
||||
|
||||
# SD card cancel
|
||||
[menu __main __sdcard __cancel]
|
||||
type: list
|
||||
enable: {('virtual_sdcard' in printer) and
|
||||
(printer.print_stats.state == "printing" or
|
||||
printer.print_stats.state == "paused")}
|
||||
name: Cancel printing
|
||||
|
||||
[menu __main __sdcard __cancel __confirm]
|
||||
type: command
|
||||
name: Confirm cancel printing
|
||||
gcode:
|
||||
{% if 'pause_resume' in printer %}
|
||||
CANCEL_PRINT
|
||||
{% else %}
|
||||
M25
|
||||
M27
|
||||
M26 S0
|
||||
TURN_OFF_HEATERS
|
||||
G91
|
||||
G0 Z{(printer.toolhead.position.z, printer.toolhead.axis_maximum.z - 5)|min
|
||||
} F1000
|
||||
G90
|
||||
{% endif %}
|
||||
{menu.back()}
|
||||
|
||||
# Extra setup menu options
|
||||
|
||||
# Shutdown and reboot
|
||||
[menu __main __setup __restart]
|
||||
type: list
|
||||
name: Restart/Shutdown
|
||||
|
||||
[menu __main __setup __restart __reboot]
|
||||
type: command
|
||||
name: Reboot host
|
||||
gcode:
|
||||
M117 Rebooting host
|
||||
M118 Rebooting host
|
||||
{menu.exit()}
|
||||
G4 S2 ; Let the user see the console message.
|
||||
{action_call_remote_method("reboot_machine")} ; Try Moonraker.
|
||||
G4 S1 ; give Moonraker a chance to finish.
|
||||
{action_respond_info('action:poweroff')} ; Try Octoprint.
|
||||
|
||||
[menu __main __setup __restart __shutdown]
|
||||
type: command
|
||||
name: Shutdown host
|
||||
gcode:
|
||||
M117 Shutting down
|
||||
M118 Shutting down
|
||||
{menu.exit()}
|
||||
G4 S2 ; Let the user see the console message.
|
||||
{action_call_remote_method("shutdown_machine")} ; Try Moonraker.
|
||||
G4 S1 ; give Moonraker a chance to finish.
|
||||
{action_respond_info('action:poweroff')} ; Try Octoprint.
|
||||
|
||||
# Speed and flow
|
||||
[menu __main __setup __speed]
|
||||
type: input
|
||||
name: Speed: {'%3d' % (menu.input*100)}%
|
||||
input: {printer.gcode_move.speed_factor}
|
||||
input_min: 0.01
|
||||
input_max: 5
|
||||
input_step: 0.01
|
||||
realtime: True
|
||||
index: 4
|
||||
gcode:
|
||||
M220 S{'%d' % (menu.input*100)}
|
||||
|
||||
[menu __main __setup __flow]
|
||||
type: input
|
||||
name: Flow: {'%3d' % (menu.input*100)}%
|
||||
input: {printer.gcode_move.extrude_factor}
|
||||
input_min: 0.01
|
||||
input_max: 2
|
||||
input_step: 0.01
|
||||
realtime: True
|
||||
index: 5
|
||||
gcode:
|
||||
M221 S{'%d' % (menu.input*100)}
|
||||
|
||||
################################################################################
|
||||
# Replace filament loading with our own macros.
|
||||
################################################################################
|
||||
|
||||
[menu __main __filament]
|
||||
type: list
|
||||
name: Filament
|
||||
enable: {printer.idle_timeout.state != "Printing" or
|
||||
printer.pause_resume.is_paused}
|
||||
|
||||
# Hide the old load/unload commands.
|
||||
[menu __main __filament __loadf]
|
||||
type: command
|
||||
name: Load Fil. fast
|
||||
enable: False
|
||||
|
||||
[menu __main __filament __loads]
|
||||
type: command
|
||||
name: Load Fil. slow
|
||||
enable: False
|
||||
|
||||
[menu __main __filament __unloadf]
|
||||
type: command
|
||||
name: Unload Fil.fast
|
||||
enable: False
|
||||
|
||||
[menu __main __filament __unloads]
|
||||
type: command
|
||||
name: Unload Fil.slow
|
||||
enable: False
|
||||
|
||||
# Add new load/unload using our macros.
|
||||
[menu __main __filament __load]
|
||||
type: command
|
||||
index: 1
|
||||
name: Load Filament
|
||||
gcode:
|
||||
LOAD_FILAMENT
|
||||
|
||||
[menu __main __filament __unload]
|
||||
type: command
|
||||
index: 2
|
||||
name: Unload Filament
|
||||
gcode:
|
||||
UNLOAD_FILAMENT
|
||||
|
||||
[menu __main __filament __feed]
|
||||
type: input
|
||||
name: Feed: {'%.1f' % menu.input}
|
||||
input: 0.0
|
||||
input_min: -50.0
|
||||
input_max: 50.0
|
||||
input_step: 1.0
|
||||
gcode:
|
||||
SAVE_GCODE_STATE NAME=_KM_FILAMENT_LOAD
|
||||
M83
|
||||
G1 E{'%.1f' % menu.input
|
||||
} F{printer["gcode_macro _km_globals"].load_priming_speed}
|
||||
RESTORE_GCODE_STATE NAME=_KM_FILAMENT_LOAD
|
||||
|
||||
################################################################################
|
||||
# Layer triggers.
|
||||
################################################################################
|
||||
|
||||
[menu __main __sdcard __pause_layer]
|
||||
type: input
|
||||
index: 4
|
||||
enable: {('virtual_sdcard' in printer) and
|
||||
printer.print_stats.state == "printing"}
|
||||
name: Pause {% set layer = printer["gcode_macro _km_layer_run"].cur_layer %}{%
|
||||
if layer >= menu.input|int %}layer{%
|
||||
elif layer + 1 == menu.input|int %}at: next{%
|
||||
else %}at: {menu.input|int}{% endif %}
|
||||
input: {printer["gcode_macro _km_layer_run"].cur_layer}
|
||||
input_min: {printer["gcode_macro _km_layer_run"].cur_layer}
|
||||
input_max: {printer["gcode_macro _km_layer_run"].tot_layers}
|
||||
input_step: 1
|
||||
gcode:
|
||||
{% set layers = printer["gcode_macro _km_layer_run"] %}
|
||||
{% if menu.input|int > layers.cur_layer %}
|
||||
PAUSE_AT_LAYER LAYER={menu.input}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __octoprint __pause_layer]
|
||||
type: input
|
||||
index: 1
|
||||
enable: {printer.idle_timeout.state == "Printing"}
|
||||
name: Pause {% set layer = printer["gcode_macro _km_layer_run"].cur_layer %}{%
|
||||
if layer >= menu.input|int %}layer{%
|
||||
elif layer + 1 == menu.input|int + 1 %}at: next{%
|
||||
else %}at: {menu.input|int}{% endif %}
|
||||
input: {printer["gcode_macro _km_layer_run"].cur_layer}
|
||||
input_min: {printer["gcode_macro _km_layer_run"].cur_layer}
|
||||
input_max: {printer["gcode_macro _km_layer_run"].tot_layers}
|
||||
input_step: 1
|
||||
gcode:
|
||||
{% set layers = printer["gcode_macro _km_layer_run"] %}
|
||||
{% if menu.input|int > layers.cur_layer %}
|
||||
GCODE_AT_LAYER LAYER={menu.input|int
|
||||
} COMMAND="RESPOND TYPE=command MSG=action:pause"
|
||||
{% endif %}
|
||||
|
||||
################################################################################
|
||||
# Bed surface.
|
||||
################################################################################
|
||||
|
||||
[menu __main __setup __bed_surface]
|
||||
type: input
|
||||
name: Bed: {(printer.save_variables.variables.bed_surfaces.available
|
||||
| list | sort)[menu.input|int]}
|
||||
input: {% set surfaces = printer.save_variables.variables.bed_surfaces
|
||||
%}{(surfaces.available | list | sort).index(surfaces.active) | int}
|
||||
input_min: 0
|
||||
input_max: {((printer.save_variables.variables.bed_surfaces.available
|
||||
| length) - 1)}
|
||||
input_step: 1
|
||||
index: 4
|
||||
gcode:
|
||||
SET_SURFACE_ACTIVE SURFACE={
|
||||
(printer.save_variables.variables.bed_surfaces.available
|
||||
| list | sort)[menu.input|int]}
|
||||
|
||||
[menu __main __setup __offsetz]
|
||||
type: input
|
||||
name: Offset Z:{ '%05.3f' % menu.input }
|
||||
input: {% set surfaces = printer.save_variables.variables.bed_surfaces
|
||||
%}{ surfaces.available[surfaces.active].offset | float }
|
||||
input_min: -5
|
||||
input_max: 5
|
||||
input_step: 0.005
|
||||
index: 5
|
||||
realtime: True
|
||||
gcode:
|
||||
SET_SURFACE_OFFSET OFFSET={menu.input}
|
||||
|
||||
[menu __main __tune __offsetz]
|
||||
type: input
|
||||
name: Offset Z:{ '%05.3f' % menu.input }
|
||||
input: { printer.gcode_move.homing_origin.z }
|
||||
input_min: -5
|
||||
input_max: 5
|
||||
input_step: 0.005
|
||||
realtime: True
|
||||
gcode:
|
||||
SET_SURFACE_OFFSET OFFSET={menu.input}
|
||||
|
||||
################################################################################
|
||||
# Heater overrides.
|
||||
################################################################################
|
||||
|
||||
### menu temperature ###
|
||||
|
||||
# Hide the original menu
|
||||
[menu __main __temp]
|
||||
type: list
|
||||
name: Temperature
|
||||
enable: False
|
||||
|
||||
[menu __main __temp_km]
|
||||
type: list
|
||||
name: Temperature
|
||||
index: 4
|
||||
|
||||
[menu __main __temp_km __hotend0_target]
|
||||
type: input
|
||||
enable: {'extruder' in printer}
|
||||
name: {"Ex0:%3.0f (%4.0f)" % (menu.input, printer.extruder.temperature)}
|
||||
input: {printer.extruder.target}
|
||||
input_min: 0
|
||||
input_max: {printer.configfile.config.extruder.max_temp}
|
||||
input_step: 1
|
||||
gcode: SET_HEATER_TEMPERATURE HEATER=extruder TARGET={'%.0f' % menu.input}
|
||||
|
||||
[menu __main __temp_km __hotend1_target]
|
||||
type: input
|
||||
enable: {'extruder1' in printer}
|
||||
name: {"Ex1:%3.0f (%4.0f)" % (menu.input, printer.extruder1.temperature)}
|
||||
input: {printer.extruder1.target}
|
||||
input_min: 0
|
||||
input_max: {printer.configfile.config.extruder1.max_temp}
|
||||
input_step: 1
|
||||
gcode: SET_HEATER_TEMPERATURE HEATER=extruder1 TARGET={'%.0f' % menu.input}
|
||||
|
||||
[menu __main __temp_km __hotbed_target]
|
||||
type: input
|
||||
enable: {'heater_bed' in printer}
|
||||
name: {"Bed:%3.0f (%4.0f)" % (menu.input, printer.heater_bed.temperature)}
|
||||
input: {printer.heater_bed.target}
|
||||
input_min: 0
|
||||
input_max: {printer.configfile.config.heater_bed.max_temp}
|
||||
input_step: 1
|
||||
gcode: SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={'%.0f' % menu.input}
|
||||
|
||||
# We just create 10 preheat placeholders below, and dynamically enable and fill
|
||||
# them in from the dictionary in variable_menu_temperature.
|
||||
|
||||
## Pre-heat [0] ##
|
||||
[menu __main __temp_km __preheat_0]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[0].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 0}
|
||||
|
||||
[menu __main __temp_km __preheat_0 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[0] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[0] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_0 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[0]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[0].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_0 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[0]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[0].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_0 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[0]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[0].chamber}
|
||||
|
||||
## Pre-heat [1] ##
|
||||
[menu __main __temp_km __preheat_1]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[1].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 1}
|
||||
|
||||
[menu __main __temp_km __preheat_1 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[1] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[1] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_1 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[1]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[1].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_1 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[1]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[1].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_1 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[1]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[1].chamber}
|
||||
|
||||
## Pre-heat [2] ##
|
||||
[menu __main __temp_km __preheat_2]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[2].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 2}
|
||||
|
||||
[menu __main __temp_km __preheat_2 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[2] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[2] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_2 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[2]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[2].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_2 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[2]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[2].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_2 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[2]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[2].chamber}
|
||||
|
||||
## Pre-heat [3] ##
|
||||
[menu __main __temp_km __preheat_3]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[3].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 3}
|
||||
|
||||
[menu __main __temp_km __preheat_3 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[3] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[3] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_3 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[3]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[3].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_3 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[3]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[3].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_3 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[3]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[3].chamber}
|
||||
|
||||
## Pre-heat [4] ##
|
||||
[menu __main __temp_km __preheat_4]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[4].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 4}
|
||||
|
||||
[menu __main __temp_km __preheat_4 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[4] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[4] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_4 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[4]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[4].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_4 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[4]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[4].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_4 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[4]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[4].chamber}
|
||||
|
||||
## Pre-heat [5] ##
|
||||
[menu __main __temp_km __preheat_5]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[5].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 5}
|
||||
|
||||
[menu __main __temp_km __preheat_5 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[5] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[5] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_5 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[5]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[5].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_5 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[5]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[5].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_5 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[5]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[5].chamber}
|
||||
|
||||
## Pre-heat [6] ##
|
||||
[menu __main __temp_km __preheat_6]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[6].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 6}
|
||||
|
||||
[menu __main __temp_km __preheat_6 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[6] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[6] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_6 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[6]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[6].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_6 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[6]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[6].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_6 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[6]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[6].chamber}
|
||||
|
||||
## Pre-heat [7] ##
|
||||
[menu __main __temp_km __preheat_7]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[7].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 7}
|
||||
|
||||
[menu __main __temp_km __preheat_7 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[7] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[7] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_7 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[7]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[7].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_7 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[7]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[7].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_7 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[7]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[7].chamber}
|
||||
|
||||
## Pre-heat [8] ##
|
||||
[menu __main __temp_km __preheat_8]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[8].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 8}
|
||||
|
||||
[menu __main __temp_km __preheat_8 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[8] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[8] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_8 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[8]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[8].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_8 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[8]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[8].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_8 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[8]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[8].chamber}
|
||||
|
||||
## Pre-heat [9] ##
|
||||
[menu __main __temp_km __preheat_9]
|
||||
type: list
|
||||
name: Preheat {printer["gcode_macro _km_globals"].menu_temperature[9].name}
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
printer["gcode_macro _km_globals"].menu_temperature|length > 9}
|
||||
|
||||
[menu __main __temp_km __preheat_9 __all]
|
||||
type: command
|
||||
enable: {printer["gcode_macro _km_globals"].menu_temperature[9] | list |
|
||||
select('in', ['extruder', 'bed', 'chamber']) | list | length > 1 and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Preheat all
|
||||
gcode:
|
||||
{% set targets = printer["gcode_macro _km_globals"].menu_temperature[9] %}
|
||||
{% if 'chamber' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={targets.chamber}
|
||||
{% endif %}
|
||||
{% if 'bed' in targets and 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={targets.bed}
|
||||
{% endif %}
|
||||
{% if 'extruder' in targets and 'extruder' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
targets.extruder}
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __preheat_9 __hotend]
|
||||
type: command
|
||||
enable: {'extruder' in printer and
|
||||
'extruder' in printer["gcode_macro _km_globals"].menu_temperature[9]}
|
||||
name: Preheat hotend
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[9].extruder}
|
||||
|
||||
[menu __main __temp_km __preheat_9 __hotbed]
|
||||
type: command
|
||||
enable: {'heater_bed' in printer and
|
||||
'bed' in printer["gcode_macro _km_globals"].menu_temperature[9]}
|
||||
name: Preheat bed
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[9].bed}
|
||||
|
||||
[menu __main __temp_km __preheat_9 __chamber]
|
||||
type: command
|
||||
enable: {'heater_generic chamber' in printer.heaters.available_heaters and
|
||||
'chamber' in printer["gcode_macro _km_globals"].menu_temperature[9]}
|
||||
name: Preheat chamber
|
||||
gcode:
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={
|
||||
printer["gcode_macro _km_globals"].menu_temperature[9].chamber}
|
||||
|
||||
## Cooldown ##
|
||||
[menu __main __temp_km __cooldown_all]
|
||||
type: command
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
(('extruder' in printer) + ('heater_bed' in printer) +
|
||||
('heater_generic chamber' in printer.heaters.available_heaters)) > 1}
|
||||
name: Cooldown all
|
||||
gcode:
|
||||
{% if 'heater_generic chamber' in printer.heaters.available_heaters %}
|
||||
SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0
|
||||
{% endif %}
|
||||
{% if 'heater_bed' in printer %}
|
||||
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0
|
||||
{% endif %}
|
||||
{% if 'extruder' in printer%}
|
||||
SET_HEATER_TEMPERATURE HEATER={printer.toolhead.extruder} TARGET=0
|
||||
{% endif %}
|
||||
|
||||
[menu __main __temp_km __cooldown_hotend]
|
||||
type: command
|
||||
enable: {printer.idle_timeout.state != "Printing" and 'extruder' in printer}
|
||||
name: Cooldown hotend
|
||||
gcode: M104 S0
|
||||
|
||||
[menu __main __temp_km __cooldown_hotbed]
|
||||
type: command
|
||||
enable: {printer.idle_timeout.state != "Printing" and 'heater_bed' in printer}
|
||||
name: Cooldown bed
|
||||
gcode: M140 S0
|
||||
|
||||
[menu __main __temp_km __cooldown_chamber]
|
||||
type: command
|
||||
enable: {printer.idle_timeout.state != "Printing" and
|
||||
'heater_generic chamber' in printer.heaters.available_heaters}
|
||||
name: Cooldown chamber
|
||||
gcode: M141 S0
|
||||
Reference in New Issue
Block a user