moggieuk / KlipperScreen-Happy-Hare-Edition

Customized KlipperScreen for ERCF - Happy Hare
GNU Affero General Public License v3.0
114 stars 22 forks source link

[BUG] has bypass error #5

Closed lettore closed 10 months ago

lettore commented 1 year ago

What happened?

After updating to last release I get this error when trying to enter the main menu 'has bypass'

What did you expect to happen instead?

ERCF menu should open

How to reproduce this bug?

Click the carrot on the main menu

Additional information:

I see now is stated that Happy Hare V2 is needed to run the latest version. I'm running ERCF Software V3, it's not crystal clear to me what's the difference but in ERCF Software V3 there's a link to this repo as Klipper Screen companion so I think should be compatible, at least before upgrading was working.

Log output

--------------------KlipperScreen Log Start--------------------
Git Version: v1.0.1-220-g220bfee
2023-09-02 16:28:35,100 [screen.py:main()] - Python version: 3.10
2023-09-02 16:28:35,100 [screen.py:main()] - KlipperScreen version: v1.0.1-220-g220bfee
2023-09-02 16:28:35,207 [config.py:get_config_file_location()] - Passed config (-c): /home/ettore/KlipperScreen.conf
2023-09-02 16:28:35,208 [config.py:__init__()] - Config path location: /home/ettore/printer_data/config/KlipperScreen.conf
2023-09-02 16:28:35,217 [config.py:_include_config()] - Parsing files: ['/home/ettore/printer_data/config/mmu_klipperscreen.conf']
2023-09-02 16:28:35,227 [config.py:log_config()] -  ===== Config File =====
[menu __main,__print mmu]
name = {{ gettext('MMU') }}
icon = mmu_carrot
panel = mmu_main
enable = {{ printer.mmu is defined and not klipperscreen.side_mmu_shortcut }}

[menu __main,__print mmu ttg]
name = {{ gettext('Manage TTG...') }}
icon = mmu_ttg_map
panel = mmu_toolmap

[menu __main,__print mmu filaments]
name = {{ gettext('Filaments...') }}
icon = mmu_filaments
panel = mmu_filaments

[menu __main,__print mmu preload_gates]
name = {{ gettext('Preload Gate...') }}
icon = mmu_reset
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print mmu preload_gates PG0]
name = {{ gettext('Preload Gate #0') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=0" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu preload_gates PG1]
name = {{ gettext('Preload Gate #1') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu preload_gates PG2]
name = {{ gettext('Preload Gate #2') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=2" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu preload_gates PG3]
name = {{ gettext('Preload Gate #3') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=3" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu preload_gates PG4]
name = {{ gettext('Preload Gate #4') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=4" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu preload_gates PG5]
name = {{ gettext('Preload Gate #5') }}
icon = mmu_reset
method = printer.gcode.script
params = { "script":"MMU_PRELOAD GATE=5" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates]
name = {{ gettext('Check Gate...') }}
icon = mmu_checkgates
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print mmu check_gates CG0]
name = {{ gettext('Check Gate #0') }}
icon = mmu_checkgate0
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=0 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates CG1]
name = {{ gettext('Check Gate #1') }}
icon = mmu_checkgate1
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=1 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates CG2]
name = {{ gettext('Check Gate #2') }}
icon = mmu_checkgate2
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=2 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates CG3]
name = {{ gettext('Check Gate #3') }}
icon = mmu_checkgate3
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=3 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates CG4]
name = {{ gettext('Check Gate #4') }}
icon = mmu_checkgate4
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=4 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu check_gates CG5]
name = {{ gettext('Check Gate #5') }}
icon = mmu_checkgate5
method = printer.gcode.script
params = { "script":"MMU_CHECK_GATES GATE=5 QUIET=1" }
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu tools]
name = {{ gettext('Load Tool...') }}
icon = extruder
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print mmu tools T0]
name = {{ gettext('T0') }}
icon = mmu_t0
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=0 QUIET=1" }
enable = {{ (printer.mmu.tool != 0 or (printer.mmu.tool == 0 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[0] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu tools T1]
name = {{ gettext('T1') }}
icon = mmu_t1
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=1 QUIET=1" }
enable = {{ (printer.mmu.tool != 1 or (printer.mmu.tool == 1 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[1] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu tools T2]
name = {{ gettext('T2') }}
icon = mmu_t2
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=2 QUIET=1" }
enable = {{ (printer.mmu.tool != 2 or (printer.mmu.tool == 2 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[2] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu tools T3]
name = {{ gettext('T3') }}
icon = mmu_t3
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=3 QUIET=1" }
enable = {{ (printer.mmu.tool != 3 or (printer.mmu.tool == 3 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[3] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu tools T4]
name = {{ gettext('T4') }}
icon = mmu_t4
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=4 QUIET=1" }
enable = {{ (printer.mmu.tool != 4 or (printer.mmu.tool == 4 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[4] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu tools T5]
name = {{ gettext('T5') }}
icon = mmu_t5
method = printer.gcode.script
params = { "script":"MMU_CHANGE_TOOL TOOL=5 QUIET=1" }
enable = {{ (printer.mmu.tool != 5 or (printer.mmu.tool == 5 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[5] != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action

[menu __main,__print mmu select_gates]
name = {{ gettext('Select Gate...') }}
icon = mmu_select_gate
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print mmu select_gates bypass}]
name = {{ gettext('Select Bypass') }}
icon = mmu_select_bypass
method = printer.gcode.script
params = {"script":"MMU_SELECT_BYPASS"}
enable = {{ printer.mmu.gate != -2 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G0]
name = {{ gettext('Select Gate #0') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=0" }
enable = {{ printer.mmu.gate != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G1]
name = {{ gettext('Select Gate #1') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=1" }
enable = {{ printer.mmu.gate != 1 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G2]
name = {{ gettext('Select Gate #2') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=2" }
enable = {{ printer.mmu.gate != 2 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G3]
name = {{ gettext('Select Gate #3') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=3" }
enable = {{ printer.mmu.gate != 3 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G4]
name = {{ gettext('Select Gate #4') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=4" }
enable = {{ printer.mmu.gate != 4 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu select_gates G5]
name = {{ gettext('Select Gate #5') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=5" }
enable = {{ printer.mmu.gate != 5 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main,__print mmu status]
name = {{ gettext('Display Status') }}
icon = info
method = printer.gcode.script
params = {"script":"MMU_STATUS"}
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu print]
name = {{ gettext('Print Stats') }}
icon = mmu_status
method = printer.gcode.script
params = {"script":"MMU_STATS"}
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu reset]
name = {{ gettext('Reset Stats') }}
icon = mmu_stats_reset
method = printer.gcode.script
confirm = Are you sure you want to reset MMU statistics?
params = {"script":"MMU_STATS RESET=1"}
enable = {{ printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.action

[menu __main,__print mmu spare1]
name = {{ gettext('user def') }}
icon = mmu_carrot
enable = False
show_disabled = False

[menu __main more mmu_calib]
name = {{ gettext('MMU Settings') }}
icon = mmu_gear
enable = {{ printer.mmu is defined }}

[menu __main more mmu_calib home]
name = {{ gettext('Home') }}
icon = home
method = printer.gcode.script
params = {"script":"MMU_HOME"}

[menu __main more mmu_calib select_gates]
name = {{ gettext('Select Gate...') }}
icon = mmu_select_gate

[menu __main more mmu_calib select_gates G0]
name = {{ gettext('Select Gate #0') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=0" }
enable = {{ printer.mmu.gate != 0 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib select_gates G1]
name = {{ gettext('Select Gate #1') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=1" }
enable = {{ printer.mmu.gate != 1 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib select_gates G2]
name = {{ gettext('Select Gate #2') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=2" }
enable = {{ printer.mmu.gate != 2 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib select_gates G3]
name = {{ gettext('Select Gate #3') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=3" }
enable = {{ printer.mmu.gate != 3 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib select_gates G4]
name = {{ gettext('Select Gate #4') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=4" }
enable = {{ printer.mmu.gate != 4 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib select_gates G5]
name = {{ gettext('Select Gate #5') }}
icon = mmu_select_gate
method = printer.gcode.script
params = { "script":"MMU_SELECT GATE=5" }
enable = {{ printer.mmu.gate != 5 and printer.mmu.action == "Idle" }}
show_disabled = True
refresh_on = printer.mmu.gate, printer.mmu.action

[menu __main more mmu_calib grip]
name = {{ gettext('Test Grip') }}
icon = mmu_grip
method = printer.gcode.script
params = {"script":"MMU_TEST_GRIP"}

[menu __main more mmu_calib formtip]
name = {{ gettext('Form Tip') }}
icon = mmu_formtip
method = printer.gcode.script
params = {"script":"MMU_FORM_TIP_STANDALONE FINAL_EJECT=1"}

[menu __main more mmu_calib servoup]
name = {{ gettext('Servo UP') }}
icon = arrow-up
method = printer.gcode.script
params = {"script":"MMU_SERVO POS=up"}
enable = {{ printer.mmu.servo != "Up" }}
show_disabled = True
refresh_on = printer.mmu.servo

[menu __main more mmu_calib servomove]
name = {{ gettext('Servo MOVE') }}
icon = arrow-right
method = printer.gcode.script
params = {"script":"MMU_SERVO POS=move"}
enable = {{ printer.mmu.servo != "Move" }}
show_disabled = True
refresh_on = printer.mmu.servo

[menu __main more mmu_calib servodown]
name = {{ gettext('Servo DOWN') }}
icon = arrow-down
method = printer.gcode.script
params = {"script":"MMU_SERVO POS=down"}
enable = {{ printer.mmu.servo != "Down" }}
show_disabled = True
refresh_on = printer.mmu.servo

[menu __main more mmu_calib encoder]
name = {{ gettext('Encoder') }}
icon = mmu_encodercal
method = printer.gcode.script
params = {"script":"MMU_CALIBRATE_ENCODER"}

[menu __main more mmu_calib all]
name = {{ gettext('Calibrate ALL') }}
icon = extruder
method = printer.gcode.script
confirm = This will calibrate all gates. Are you sure?
params = {"script":"MMU_CALIBRATE"}

[menu __main more mmu_calib tool]
name = {{ gettext('Cal Tool...') }}
icon = mmu_calibrate

[menu __main more mmu_calib tool CT0]
name = {{ gettext('Calibrate T0') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=0" }

[menu __main more mmu_calib tool CT1]
name = {{ gettext('Calibrate T1') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=1" }

[menu __main more mmu_calib tool CT2]
name = {{ gettext('Calibrate T2') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=2" }

[menu __main more mmu_calib tool CT3]
name = {{ gettext('Calibrate T3') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=3" }

[menu __main more mmu_calib tool CT4]
name = {{ gettext('Calibrate T4') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=4" }

[menu __main more mmu_calib tool CT5]
name = {{ gettext('Calibrate T5') }}
icon = mmu_calibrate
method = printer.gcode.script
params = { "script":"MMU_CALIBRATE_SINGLE TOOL=5" }
=======================
2023-09-02 16:28:35,240 [config.py:_include_config()] - Parsing files: ['/home/ettore/printer_data/config/ercf_klipperscreen.conf']
2023-09-02 16:28:35,249 [config.py:log_config()] -  ===== Config File =====
[menu __main,__print ercf]
name = {{ gettext('Manage ERCF') }}
icon = ercf_carrot
panel = ercf_main
enable = {{ printer.ercf is defined and not klipperscreen.side_ercf_shortcut }}

[menu __main,__print ercf filament_editor]
name = {{ gettext('Filaments...') }}
icon = ercf_filaments
panel = ercf_filaments

[menu __main,__print ercf ttg]
name = {{ gettext('Manage TTG...') }}
icon = ercf_ttg_map
panel = ercf_toolmap

[menu __main,__print ercf preload_gates]
name = {{ gettext('Preload Gate...') }}
icon = ercf_reset
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print ercf preload_gates PG0]
name = {{ gettext('Preload Gate #0') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=0" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf preload_gates PG1]
name = {{ gettext('Preload Gate #1') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf preload_gates PG2]
name = {{ gettext('Preload Gate #2') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=2" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf preload_gates PG3]
name = {{ gettext('Preload Gate #3') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=3" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf preload_gates PG4]
name = {{ gettext('Preload Gate #4') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=4" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf preload_gates PG5]
name = {{ gettext('Preload Gate #5') }}
icon = ercf_reset
method = printer.gcode.script
params = { "script":"ERCF_PRELOAD GATE=5" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates]
name = {{ gettext('Check Gate...') }}
icon = ercf_checkgates
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print ercf check_gates CG0]
name = {{ gettext('Check Gate #0') }}
icon = ercf_checkgate0
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=0 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates CG1]
name = {{ gettext('Check Gate #1') }}
icon = ercf_checkgate1
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=1 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates CG2]
name = {{ gettext('Check Gate #2') }}
icon = ercf_checkgate2
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=2 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates CG3]
name = {{ gettext('Check Gate #3') }}
icon = ercf_checkgate3
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=3 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates CG4]
name = {{ gettext('Check Gate #4') }}
icon = ercf_checkgate4
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=4 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf check_gates CG5]
name = {{ gettext('Check Gate #5') }}
icon = ercf_checkgate5
method = printer.gcode.script
params = { "script":"ERCF_CHECK_GATES GATE=5 QUIET=1" }
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf tools]
name = {{ gettext('Load Tool...') }}
icon = extruder
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print ercf tools T0]
name = {{ gettext('T0') }}
icon = ercf_t0
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=0 QUIET=1" }
enable = {{ (printer.ercf.tool != 0 or (printer.ercf.tool == 0 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[0] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf tools T1]
name = {{ gettext('T1') }}
icon = ercf_t1
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=1 QUIET=1" }
enable = {{ (printer.ercf.tool != 1 or (printer.ercf.tool == 1 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[1] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf tools T2]
name = {{ gettext('T2') }}
icon = ercf_t2
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=2 QUIET=1" }
enable = {{ (printer.ercf.tool != 2 or (printer.ercf.tool == 2 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[2] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf tools T3]
name = {{ gettext('T3') }}
icon = ercf_t3
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=3 QUIET=1" }
enable = {{ (printer.ercf.tool != 3 or (printer.ercf.tool == 3 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[3] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf tools T4]
name = {{ gettext('T4') }}
icon = ercf_t4
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=4 QUIET=1" }
enable = {{ (printer.ercf.tool != 4 or (printer.ercf.tool == 4 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[4] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf tools T5]
name = {{ gettext('T5') }}
icon = ercf_t5
method = printer.gcode.script
params = { "script":"ERCF_CHANGE_TOOL TOOL=5 QUIET=1" }
enable = {{ (printer.ercf.tool != 5 or (printer.ercf.tool == 5 and printer.ercf.filament != "Loaded")) and printer.ercf.gate_status[5] != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.tool, printer.ercf.gate_status, printer.ercf.filament, printer.ercf.action

[menu __main,__print ercf select_gates]
name = {{ gettext('Select Gate...') }}
icon = ercf_select_gate
enable = {{ printer.idle_timeout.state != "Printing" }}
show_disabled = True
refresh_on = printer.idle_timeout.state

[menu __main,__print ercf select_gates bypass}]
name = {{ gettext('Select Bypass') }}
icon = ercf_select_bypass
method = printer.gcode.script
params = {"script":"ERCF_SELECT_BYPASS"}
enable = {{ printer.ercf.gate != -2 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G0]
name = {{ gettext('Select Gate #0') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=0" }
enable = {{ printer.ercf.gate != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G1]
name = {{ gettext('Select Gate #1') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=1" }
enable = {{ printer.ercf.gate != 1 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G2]
name = {{ gettext('Select Gate #2') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=2" }
enable = {{ printer.ercf.gate != 2 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G3]
name = {{ gettext('Select Gate #3') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=3" }
enable = {{ printer.ercf.gate != 3 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G4]
name = {{ gettext('Select Gate #4') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=4" }
enable = {{ printer.ercf.gate != 4 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf select_gates G5]
name = {{ gettext('Select Gate #5') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=5" }
enable = {{ printer.ercf.gate != 5 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main,__print ercf status]
name = {{ gettext('Display Status') }}
icon = info
method = printer.gcode.script
params = {"script":"ERCF_STATUS"}
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf print]
name = {{ gettext('Print Stats') }}
icon = ercf_status
method = printer.gcode.script
params = {"script":"ERCF_DUMP_STATS"}
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf reset]
name = {{ gettext('Reset Stats') }}
icon = ercf_stats_reset
method = printer.gcode.script
confirm = Are you sure you want to reset ERCF statistics?
params = {"script":"ERCF_RESET_STATS"}
enable = {{ printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.action

[menu __main,__print ercf spare1]
name = {{ gettext('user def') }}
icon = ercf_carrot
enable = False
show_disabled = False

[menu __main more ercf_calib]
name = {{ gettext('ERCF Settings') }}
icon = ercf_gear
enable = {{ printer.ercf is defined }}

[menu __main more ercf_calib home]
name = {{ gettext('Home') }}
icon = home
method = printer.gcode.script
params = {"script":"ERCF_HOME"}

[menu __main more ercf_calib select_gates]
name = {{ gettext('Select Gate...') }}
icon = ercf_select_gate

[menu __main more ercf_calib select_gates G0]
name = {{ gettext('Select Gate #0') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=0" }
enable = {{ printer.ercf.gate != 0 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib select_gates G1]
name = {{ gettext('Select Gate #1') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=1" }
enable = {{ printer.ercf.gate != 1 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib select_gates G2]
name = {{ gettext('Select Gate #2') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=2" }
enable = {{ printer.ercf.gate != 2 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib select_gates G3]
name = {{ gettext('Select Gate #3') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=3" }
enable = {{ printer.ercf.gate != 3 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib select_gates G4]
name = {{ gettext('Select Gate #4') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=4" }
enable = {{ printer.ercf.gate != 4 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib select_gates G5]
name = {{ gettext('Select Gate #5') }}
icon = ercf_select_gate
method = printer.gcode.script
params = { "script":"ERCF_SELECT GATE=5" }
enable = {{ printer.ercf.gate != 5 and printer.ercf.action == "Idle" }}
show_disabled = True
refresh_on = printer.ercf.gate, printer.ercf.action

[menu __main more ercf_calib grip]
name = {{ gettext('Test Grip') }}
icon = ercf_grip
method = printer.gcode.script
params = {"script":"ERCF_TEST_GRIP"}

[menu __main more ercf_calib formtip]
name = {{ gettext('Form Tip') }}
icon = ercf_formtip
method = printer.gcode.script
params = {"script":"ERCF_FORM_TIP_STANDALONE FINAL_EJECT=1"}

[menu __main more ercf_calib servoup]
name = {{ gettext('Servo UP') }}
icon = arrow-up
method = printer.gcode.script
params = {"script":"ERCF_SERVO_UP"}
enable = {{ printer.ercf.servo != "Up" }}
show_disabled = True
refresh_on = printer.ercf.servo

[menu __main more ercf_calib servodown]
name = {{ gettext('Servo DOWN') }}
icon = arrow-down
method = printer.gcode.script
params = {"script":"ERCF_SERVO_DOWN"}
enable = {{ printer.ercf.servo != "Down" }}
show_disabled = True
refresh_on = printer.ercf.servo

[menu __main more ercf_calib encoder]
name = {{ gettext('Encoder') }}
icon = ercf_encodercal
method = printer.gcode.script
params = {"script":"ERCF_CALIBRATE_ENCODER"}

[menu __main more ercf_calib all]
name = {{ gettext('Calibrate ALL') }}
icon = extruder
method = printer.gcode.script
confirm = This will calibrate all gates. Are you sure?
params = {"script":"ERCF_CALIBRATE"}

[menu __main more ercf_calib tool]
name = {{ gettext('Cal Tool...') }}
icon = ercf_calibrate

[menu __main more ercf_calib tool CT0]
name = {{ gettext('Calibrate T0') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=0" }

[menu __main more ercf_calib tool CT1]
name = {{ gettext('Calibrate T1') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=1" }

[menu __main more ercf_calib tool CT2]
name = {{ gettext('Calibrate T2') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=2" }

[menu __main more ercf_calib tool CT3]
name = {{ gettext('Calibrate T3') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=3" }

[menu __main more ercf_calib tool CT4]
name = {{ gettext('Calibrate T4') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=4" }

[menu __main more ercf_calib tool CT5]
name = {{ gettext('Calibrate T5') }}
icon = ercf_calibrate
method = printer.gcode.script
params = { "script":"ERCF_CALIBRATE_SINGLE TOOL=5" }
=======================
2023-09-02 16:28:35,261 [config.py:log_config()] -  ===== Config File =====
[include mmu_klipperscreen.conf]

[include ercf_klipperscreen.conf]

[main]
show_cursor = True

[printer Ender 3 S1 Pro]
camera_url = http://127.0.0.1:8081/webcam/?action=stream
power_devices = tasmota_plug
=======================
2023-09-02 16:28:35,264 [config.py:__init__()] - ====== Saved Def ======

[main]
screen_blanking = 900
ercf_color_filament = True
ercf_bold_filament = True
font_size = small
use_dpms = False
print_sort_dir = date_desc

=======================
2023-09-02 16:28:35,265 [config.py:__init__()] - Spliting menu __main,__print mmu
2023-09-02 16:28:35,265 [config.py:__init__()] - Spliting menu __main,__print mmu
2023-09-02 16:28:35,265 [config.py:__init__()] - Spliting menu __main,__print mmu ttg
2023-09-02 16:28:35,265 [config.py:__init__()] - Spliting menu __main,__print mmu ttg
2023-09-02 16:28:35,266 [config.py:__init__()] - Spliting menu __main,__print mmu filaments
2023-09-02 16:28:35,266 [config.py:__init__()] - Spliting menu __main,__print mmu filaments
2023-09-02 16:28:35,266 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates
2023-09-02 16:28:35,266 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates
2023-09-02 16:28:35,266 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG0
2023-09-02 16:28:35,267 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG0
2023-09-02 16:28:35,268 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG1
2023-09-02 16:28:35,268 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG1
2023-09-02 16:28:35,268 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG2
2023-09-02 16:28:35,269 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG2
2023-09-02 16:28:35,269 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG3
2023-09-02 16:28:35,269 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG3
2023-09-02 16:28:35,270 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG4
2023-09-02 16:28:35,270 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG4
2023-09-02 16:28:35,270 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG5
2023-09-02 16:28:35,271 [config.py:__init__()] - Spliting menu __main,__print mmu preload_gates PG5
2023-09-02 16:28:35,271 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates
2023-09-02 16:28:35,271 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates
2023-09-02 16:28:35,271 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG0
2023-09-02 16:28:35,272 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG0
2023-09-02 16:28:35,272 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG1
2023-09-02 16:28:35,272 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG1
2023-09-02 16:28:35,273 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG2
2023-09-02 16:28:35,273 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG2
2023-09-02 16:28:35,274 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG3
2023-09-02 16:28:35,274 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG3
2023-09-02 16:28:35,274 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG4
2023-09-02 16:28:35,274 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG4
2023-09-02 16:28:35,275 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG5
2023-09-02 16:28:35,275 [config.py:__init__()] - Spliting menu __main,__print mmu check_gates CG5
2023-09-02 16:28:35,275 [config.py:__init__()] - Spliting menu __main,__print mmu tools
2023-09-02 16:28:35,275 [config.py:__init__()] - Spliting menu __main,__print mmu tools
2023-09-02 16:28:35,276 [config.py:__init__()] - Spliting menu __main,__print mmu tools T0
2023-09-02 16:28:35,276 [config.py:__init__()] - Spliting menu __main,__print mmu tools T0
2023-09-02 16:28:35,276 [config.py:__init__()] - Spliting menu __main,__print mmu tools T1
2023-09-02 16:28:35,277 [config.py:__init__()] - Spliting menu __main,__print mmu tools T1
2023-09-02 16:28:35,277 [config.py:__init__()] - Spliting menu __main,__print mmu tools T2
2023-09-02 16:28:35,277 [config.py:__init__()] - Spliting menu __main,__print mmu tools T2
2023-09-02 16:28:35,278 [config.py:__init__()] - Spliting menu __main,__print mmu tools T3
2023-09-02 16:28:35,278 [config.py:__init__()] - Spliting menu __main,__print mmu tools T3
2023-09-02 16:28:35,278 [config.py:__init__()] - Spliting menu __main,__print mmu tools T4
2023-09-02 16:28:35,279 [config.py:__init__()] - Spliting menu __main,__print mmu tools T4
2023-09-02 16:28:35,279 [config.py:__init__()] - Spliting menu __main,__print mmu tools T5
2023-09-02 16:28:35,279 [config.py:__init__()] - Spliting menu __main,__print mmu tools T5
2023-09-02 16:28:35,280 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates
2023-09-02 16:28:35,280 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates
2023-09-02 16:28:35,280 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates bypass}
2023-09-02 16:28:35,280 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates bypass}
2023-09-02 16:28:35,280 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G0
2023-09-02 16:28:35,281 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G0
2023-09-02 16:28:35,281 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G1
2023-09-02 16:28:35,281 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G1
2023-09-02 16:28:35,282 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G2
2023-09-02 16:28:35,282 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G2
2023-09-02 16:28:35,282 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G3
2023-09-02 16:28:35,282 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G3
2023-09-02 16:28:35,283 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G4
2023-09-02 16:28:35,283 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G4
2023-09-02 16:28:35,284 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G5
2023-09-02 16:28:35,284 [config.py:__init__()] - Spliting menu __main,__print mmu select_gates G5
2023-09-02 16:28:35,284 [config.py:__init__()] - Spliting menu __main,__print mmu status
2023-09-02 16:28:35,285 [config.py:__init__()] - Spliting menu __main,__print mmu status
2023-09-02 16:28:35,285 [config.py:__init__()] - Spliting menu __main,__print mmu print
2023-09-02 16:28:35,285 [config.py:__init__()] - Spliting menu __main,__print mmu print
2023-09-02 16:28:35,285 [config.py:__init__()] - Spliting menu __main,__print mmu reset
2023-09-02 16:28:35,286 [config.py:__init__()] - Spliting menu __main,__print mmu reset
2023-09-02 16:28:35,286 [config.py:__init__()] - Spliting menu __main,__print mmu spare1
2023-09-02 16:28:35,286 [config.py:__init__()] - Spliting menu __main,__print mmu spare1
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf filament_editor
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf filament_editor
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf ttg
2023-09-02 16:28:35,287 [config.py:__init__()] - Spliting menu __main,__print ercf ttg
2023-09-02 16:28:35,288 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates
2023-09-02 16:28:35,288 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates
2023-09-02 16:28:35,288 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG0
2023-09-02 16:28:35,288 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG0
2023-09-02 16:28:35,289 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG1
2023-09-02 16:28:35,289 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG1
2023-09-02 16:28:35,290 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG2
2023-09-02 16:28:35,290 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG2
2023-09-02 16:28:35,291 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG3
2023-09-02 16:28:35,291 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG3
2023-09-02 16:28:35,291 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG4
2023-09-02 16:28:35,291 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG4
2023-09-02 16:28:35,292 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG5
2023-09-02 16:28:35,292 [config.py:__init__()] - Spliting menu __main,__print ercf preload_gates PG5
2023-09-02 16:28:35,292 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates
2023-09-02 16:28:35,293 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates
2023-09-02 16:28:35,293 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG0
2023-09-02 16:28:35,293 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG0
2023-09-02 16:28:35,293 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG1
2023-09-02 16:28:35,294 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG1
2023-09-02 16:28:35,294 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG2
2023-09-02 16:28:35,294 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG2
2023-09-02 16:28:35,294 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG3
2023-09-02 16:28:35,295 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG3
2023-09-02 16:28:35,295 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG4
2023-09-02 16:28:35,295 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG4
2023-09-02 16:28:35,296 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG5
2023-09-02 16:28:35,296 [config.py:__init__()] - Spliting menu __main,__print ercf check_gates CG5
2023-09-02 16:28:35,296 [config.py:__init__()] - Spliting menu __main,__print ercf tools
2023-09-02 16:28:35,296 [config.py:__init__()] - Spliting menu __main,__print ercf tools
2023-09-02 16:28:35,297 [config.py:__init__()] - Spliting menu __main,__print ercf tools T0
2023-09-02 16:28:35,297 [config.py:__init__()] - Spliting menu __main,__print ercf tools T0
2023-09-02 16:28:35,297 [config.py:__init__()] - Spliting menu __main,__print ercf tools T1
2023-09-02 16:28:35,298 [config.py:__init__()] - Spliting menu __main,__print ercf tools T1
2023-09-02 16:28:35,298 [config.py:__init__()] - Spliting menu __main,__print ercf tools T2
2023-09-02 16:28:35,298 [config.py:__init__()] - Spliting menu __main,__print ercf tools T2
2023-09-02 16:28:35,299 [config.py:__init__()] - Spliting menu __main,__print ercf tools T3
2023-09-02 16:28:35,299 [config.py:__init__()] - Spliting menu __main,__print ercf tools T3
2023-09-02 16:28:35,299 [config.py:__init__()] - Spliting menu __main,__print ercf tools T4
2023-09-02 16:28:35,300 [config.py:__init__()] - Spliting menu __main,__print ercf tools T4
2023-09-02 16:28:35,300 [config.py:__init__()] - Spliting menu __main,__print ercf tools T5
2023-09-02 16:28:35,300 [config.py:__init__()] - Spliting menu __main,__print ercf tools T5
2023-09-02 16:28:35,301 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates
2023-09-02 16:28:35,302 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates
2023-09-02 16:28:35,302 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates bypass}
2023-09-02 16:28:35,303 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates bypass}
2023-09-02 16:28:35,303 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G0
2023-09-02 16:28:35,304 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G0
2023-09-02 16:28:35,304 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G1
2023-09-02 16:28:35,305 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G1
2023-09-02 16:28:35,305 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G2
2023-09-02 16:28:35,306 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G2
2023-09-02 16:28:35,306 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G3
2023-09-02 16:28:35,307 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G3
2023-09-02 16:28:35,307 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G4
2023-09-02 16:28:35,308 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G4
2023-09-02 16:28:35,308 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G5
2023-09-02 16:28:35,309 [config.py:__init__()] - Spliting menu __main,__print ercf select_gates G5
2023-09-02 16:28:35,309 [config.py:__init__()] - Spliting menu __main,__print ercf status
2023-09-02 16:28:35,309 [config.py:__init__()] - Spliting menu __main,__print ercf status
2023-09-02 16:28:35,310 [config.py:__init__()] - Spliting menu __main,__print ercf print
2023-09-02 16:28:35,310 [config.py:__init__()] - Spliting menu __main,__print ercf print
2023-09-02 16:28:35,311 [config.py:__init__()] - Spliting menu __main,__print ercf reset
2023-09-02 16:28:35,311 [config.py:__init__()] - Spliting menu __main,__print ercf reset
2023-09-02 16:28:35,312 [config.py:__init__()] - Spliting menu __main,__print ercf spare1
2023-09-02 16:28:35,313 [config.py:__init__()] - Spliting menu __main,__print ercf spare1
2023-09-02 16:28:35,314 [config.py:__init__()] - Configured printers: [
  {
    "Ender 3 S1 Pro": {
      "moonraker_host": "127.0.0.1",
      "moonraker_port": "7125",
      "moonraker_api_key": ""
    }
  }
]
2023-09-02 16:28:35,399 [config.py:create_translations()] - Selected lang: None OS lang: it_IT
2023-09-02 16:28:35,400 [config.py:install_language()] - Using system lang
2023-09-02 16:28:35,400 [config.py:install_language()] - Using lang it
2023-09-02 16:28:35,424 [screen.py:__init__()] - Screen resolution: 1366x768
2023-09-02 16:28:35,427 [KlippyGtk.py:__init__()] - Font size: 24.1 (small)
2023-09-02 16:28:35,736 [screen.py:set_screenblanking_timeout()] - Changing screen blanking to: 900
2023-09-02 16:28:35,737 [screen.py:set_screenblanking_timeout()] - Not using DPMS
2023-09-02 16:28:35,745 [screen.py:initial_connection()] - Default printer: None
2023-09-02 16:28:35,745 [screen.py:connect_printer()] - Connecting to printer: Ender 3 S1 Pro
2023-09-02 16:28:35,745 [screen.py:_load_panel()] - Loading panel: splash_screen
2023-09-02 16:28:35,789 [screen.py:attach_panel()] - Current panel hierarchy: splash_screen
2023-09-02 16:28:35,794 [KlippyWebsocket.py:connect()] - Attempting to connect
2023-09-02 16:28:35,807 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2023-09-02 16:28:35,816 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/access/oneshot_token
2023-09-02 16:28:35,817 [KlippyWebsocket.py:connect()] - Starting websocket thread
2023-09-02 16:28:35,832 [_logging.py:info()] - Websocket connected
2023-09-02 16:28:35,832 [KlippyWebsocket.py:on_open()] - Moonraker Websocket Open
2023-09-02 16:28:35,861 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2023-09-02 16:28:35,872 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/info
2023-09-02 16:28:35,874 [screen.py:init_printer()] - Moonraker info {'klippy_connected': True, 'klippy_state': 'ready', 'components': ['klippy_connection', 'application', 'websockets', 'internal_transport', 'dbus_manager', 'database', 'file_manager', 'klippy_apis', 'secrets', 'template', 'shell_command', 'machine', 'data_store', 'proc_stats', 'job_state', 'job_queue', 'http_client', 'announcements', 'webcam', 'extensions', 'history', 'octoprint_compat', 'timelapse', 'authorization', 'update_manager', 'power', 'zeroconf', 'spoolman'], 'failed_components': [], 'registered_directories': ['config', 'logs', 'gcodes', 'timelapse', 'timelapse_frames', 'config_examples', 'docs'], 'warnings': [], 'websocket_count': 5, 'moonraker_version': 'v0.8.0-138-gfe12095', 'missing_klippy_requirements': [], 'api_version': [1, 3, 0], 'api_version_string': '1.3.0'}
2023-09-02 16:28:35,884 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/machine/device_power/devices
2023-09-02 16:28:35,885 [printer.py:configure_power_devices()] - Processing power devices: {'devices': [{'device': 'tasmota_plug', 'status': 'on', 'locked_while_printing': True, 'type': 'tasmota'}]}
2023-09-02 16:28:35,886 [printer.py:configure_power_devices()] - Power devices: {'tasmota_plug': {'status': 'on'}}
2023-09-02 16:28:35,896 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/webcams/list
2023-09-02 16:28:35,898 [printer.py:configure_cameras()] - Cameras: [{'enabled': True, 'icon': 'mdiWebcam', 'aspect_ratio': '4:3', 'target_fps_idle': 5, 'name': 'default', 'location': 'chamber', 'service': 'mjpegstreamer', 'target_fps': 15, 'stream_url': 'https://zoneminder.ecasa.one/zm/cgi-bin/nph-zms?monitor=2&user=ettore&pass=bursapiata83', 'snapshot_url': 'https://zoneminder.ecasa.one/zm/cgi-bin/nph-zms?mode=single&monitor=2&user=ettore&pass=bursapiata83', 'flip_horizontal': False, 'flip_vertical': False, 'rotation': 0, 'source': 'config', 'extra_data': {}}, {'enabled': True, 'icon': 'mdiWebcam', 'aspect_ratio': '4:3', 'target_fps_idle': 5, 'name': 'cam 1', 'location': 'printer', 'service': 'mjpegstreamer', 'target_fps': 30, 'stream_url': 'https://ender3s1pro.ecasa.one/webcam?action=stream', 'snapshot_url': 'https://ender3s1pro.ecasa.one/webcam?action=stream', 'flip_horizontal': False, 'flip_vertical': False, 'rotation': 0, 'source': 'config', 'extra_data': {}}, {'enabled': True, 'icon': 'mdiWebcam', 'aspect_ratio': '4:3', 'target_fps_idle': 5, 'name': 'cam 2', 'location': 'nozzle', 'service': 'mjpegstreamer', 'target_fps': 15, 'stream_url': 'https://ender3s1pro.ecasa.one/webcam2?action=stream', 'snapshot_url': 'https://ender3s1pro.ecasa.one/webcam2?action=stream', 'flip_horizontal': False, 'flip_vertical': False, 'rotation': 0, 'source': 'config', 'extra_data': {}}]
2023-09-02 16:28:35,911 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/info
2023-09-02 16:28:35,986 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?configfile
2023-09-02 16:28:35,995 [printer.py:reinit()] - Klipper version: v0.11.0-271-g5f990f93-dirty
2023-09-02 16:28:35,996 [printer.py:reinit()] - # Extruders: 1
2023-09-02 16:28:35,996 [printer.py:reinit()] - # Temperature devices: 7
2023-09-02 16:28:35,996 [printer.py:reinit()] - # Fans: 3
2023-09-02 16:28:35,996 [printer.py:reinit()] - # Output pins: 1
2023-09-02 16:28:35,996 [printer.py:reinit()] - # Has MMU: False
2023-09-02 16:28:36,013 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/gcode/help
2023-09-02 16:28:36,016 [KlippyWebsocket.py:object_subscription()] - Sending printer.objects.subscribe
2023-09-02 16:28:36,406 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/printer/objects/query?bed_mesh&configfile&display_status&extruder&fan&gcode_move&heater_bed&idle_timeout&pause_resume&print_stats&toolhead&virtual_sdcard&webhooks&motion_report&firmware_retraction&exclude_object&manual_probe&mmu&extruder&heater_bed&heater_generic chamber&temperature_sensor mcu&temperature_sensor pc&temperature_sensor heater&temperature_sensor ambient&temperature_fan exaust_chamber_fan&fan&fan_generic aux_fan&heater_fan hotend_fan&filament_switch_sensor e0_sensor&output_pin beeper
2023-09-02 16:28:36,469 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/temperature_store
2023-09-02 16:28:36,475 [printer.py:init_temp_store()] - Temp store: ['heater_generic chamber', 'temperature_sensor heater', 'temperature_sensor ambient', 'temperature_fan exaust_chamber_fan', 'temperature_sensor mcu', 'temperature_sensor pc', 'heater_bed', 'extruder']
2023-09-02 16:28:36,486 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/config
2023-09-02 16:28:36,487 [screen.py:init_tempstore()] - Temperature store size: 1200
2023-09-02 16:28:36,487 [files.py:initialize()] - Gcodes path: /storage/3dprint/sd
2023-09-02 16:28:36,487 [KlippyWebsocket.py:get_file_list()] - Sending server.files.list
2023-09-02 16:28:36,521 [KlippyRest.py:_do_request()] - Sending request to http://127.0.0.1:7125/server/config
2023-09-02 16:28:36,522 [printer.py:enable_spoolman()] - Enabling Spoolman
2023-09-02 16:28:36,523 [screen.py:init_printer()] - Printer initialized
2023-09-02 16:28:36,523 [printer.py:change_state()] - Changing state from 'disconnected' to 'ready'
2023-09-02 16:28:36,523 [printer.py:change_state()] - Adding callback for state: ready
2023-09-02 16:28:36,524 [screen.py:preload()] - Preloading panels
2023-09-02 16:28:36,524 [screen.py:_load_panel()] - Loading panel: move
2023-09-02 16:28:36,587 [screen.py:_load_panel()] - Loading panel: temperature
2023-09-02 16:28:36,602 [temperature.py:add_device()] - Adding device: extruder
2023-09-02 16:28:36,609 [temperature.py:add_device()] - Adding device: heater_bed
2023-09-02 16:28:36,616 [temperature.py:add_device()] - Adding device: heater_generic chamber
2023-09-02 16:28:36,623 [temperature.py:add_device()] - Adding device: temperature_sensor mcu
2023-09-02 16:28:36,628 [temperature.py:add_device()] - Adding device: temperature_sensor pc
2023-09-02 16:28:36,634 [temperature.py:add_device()] - Adding device: temperature_sensor heater
2023-09-02 16:28:36,640 [temperature.py:add_device()] - Adding device: temperature_sensor ambient
2023-09-02 16:28:36,646 [temperature.py:add_device()] - Adding device: temperature_fan exaust_chamber_fan
2023-09-02 16:28:36,654 [temperature.py:select_heater()] - Selecting extruder
2023-09-02 16:28:36,654 [temperature.py:select_heater()] - Selecting heater_bed
2023-09-02 16:28:36,656 [temperature.py:select_heater()] - Selecting heater_generic chamber
2023-09-02 16:28:36,657 [temperature.py:select_heater()] - Selecting temperature_fan exaust_chamber_fan
2023-09-02 16:28:36,671 [screen.py:_load_panel()] - Loading panel: extrude
2023-09-02 16:28:36,714 [screen.py:_load_panel()] - Loading panel: job_status
2023-09-02 16:28:36,843 [job_status.py:create_status_grid()] - Titlebar items: ['']
2023-09-02 16:28:36,863 [screen.py:update_size()] - Size changed: 1366x768
2023-09-02 16:28:36,889 [screen.py:_load_panel()] - Loading panel: main_menu
2023-09-02 16:28:36,994 [KlippyGtk.py:PixbufFromFile()] - g-file-error-quark: Apertura del file «/home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.svg» non riuscita: No such file or directory (4)
Traceback (most recent call last):
  File "/home/ettore/KlipperScreen/ks_includes/KlippyGtk.py", line 130, in PixbufFromFile
    return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, int(width), int(height))
gi.repository.GLib.GError: g-file-error-quark: Apertura del file «/home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.svg» non riuscita: No such file or directory (4)
2023-09-02 16:28:36,995 [KlippyGtk.py:PixbufFromFile()] - Unable to find image /home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.svg
2023-09-02 16:28:36,995 [KlippyGtk.py:PixbufFromFile()] - g-file-error-quark: Apertura del file «/home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.png» non riuscita: No such file or directory (4)
Traceback (most recent call last):
  File "/home/ettore/KlipperScreen/ks_includes/KlippyGtk.py", line 130, in PixbufFromFile
    return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, int(width), int(height))
gi.repository.GLib.GError: g-file-error-quark: Apertura del file «/home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.png» non riuscita: No such file or directory (4)
2023-09-02 16:28:36,996 [KlippyGtk.py:PixbufFromFile()] - Unable to find image /home/ettore/KlipperScreen/styles/z-bolt/images/ercf_carrot.png
2023-09-02 16:28:37,006 [main_menu.py:__init__()] - ### Making MainMenu
2023-09-02 16:28:37,013 [main_menu.py:add_device()] - Adding device: extruder
2023-09-02 16:28:37,019 [main_menu.py:add_device()] - Adding device: heater_bed
2023-09-02 16:28:37,025 [main_menu.py:add_device()] - Adding device: heater_generic chamber
2023-09-02 16:28:37,032 [main_menu.py:add_device()] - Adding device: temperature_sensor mcu
2023-09-02 16:28:37,039 [main_menu.py:add_device()] - Adding device: temperature_sensor pc
2023-09-02 16:28:37,045 [main_menu.py:add_device()] - Adding device: temperature_sensor heater
2023-09-02 16:28:37,051 [main_menu.py:add_device()] - Adding device: temperature_sensor ambient
2023-09-02 16:28:37,056 [main_menu.py:add_device()] - Adding device: temperature_fan exaust_chamber_fan
2023-09-02 16:28:37,087 [menu.py:arrangeMenuItems()] - X > mmu
2023-09-02 16:28:37,092 [menu.py:arrangeMenuItems()] - X > ercf
2023-09-02 16:28:37,127 [screen.py:attach_panel()] - Current panel hierarchy: main_menu
2023-09-02 16:28:38,268 [screen.py:_menu_go_to()] - #### Menu go_to mmu_main
2023-09-02 16:28:38,268 [screen.py:_menu_go_back()] - #### Menu go home
2023-09-02 16:28:38,301 [screen.py:attach_panel()] - Current panel hierarchy: main_menu
2023-09-02 16:28:38,306 [screen.py:_load_panel()] - Loading panel: mmu_main
2023-09-02 16:28:38,309 [screen.py:show_error_modal()] - Showing error modal: Unable to load panel mmu_main 'has_bypass'
2023-09-02 16:28:38,338 [KlippyGtk.py:Dialog()] - Showing dialog <Gtk.Dialog object at 0x7fc6785afcc0 (GtkDialog at 0x55e68b1d8b00)>
moggieuk commented 1 year ago

I'm confident this is fixed or more likely a result of connecting to an older Happy Hare. The lack of "has_bypass" is the clue.

This latest version of KlipperScreen-Happy Hare Edition requires the latest Happy Hare version 2 driver. You can find out more details here: https://github.com/moggieuk/Happy-Hare

After updating and re-installing Happy Hare.... 1) Make sure KlipperScreen-Happy Hare is up-to-date 2) Run ./install_ks.sh -g to ensure all new images and menu updates are installed.

Sorry for the frustration to do this but HHv2 really is much better and I only have time to support one branch of KlipperScreen (because I'm constantly keeping it in sync with the original)

lettore commented 1 year ago

I miss something in your comment, as I said before I don't understand the difference between ERCF Software V3 and Happy Hare V2. In ERCF Software V3 https://github.com/moggieuk/ERCF-Software-V3 is stated: Now with customized KlipperScreen for ERCF touchscreen control So I installed Klipper Screen Happy Hare Edition and it worked until last update, if it's no more compatible shouldn't be removed? If, as I understand, Klipper Screen will not work with V3 anymore, what is the procedure to switch from V3 to V2 as I invested much time configuring everything, and I don't want to finish with a messed up system.

moggieuk commented 1 year ago

Here is a copy of the post I made to Discord. Unfortunately I cannot support two separate branches of KlipperScreen hence this one-time change of ERCF-Software-V3 to Happy Hare is necessary. If you keep a copy of your current ercf_hardware.cfg and ercf_parameters.cfg and complete the install of HHv2 you can use your old settings to quickly get everything working again. Although this is annoying, if you are familiar with ERCF-Software-V3 it won't take very long - just be careful with the instruction around [extruder] config. Note that Happy Hare has must better documentation especially around setup. Ask questions on Disocrd if you get stuck, I'm happy to help.

:rabbit: :rabbit: :rabbit: Happy Hare v2 :rabbit: :rabbit: :rabbit:

 /$$    /$$  /$$$$$$
| $$   | $$ /$$__  $$
| $$   | $$|__/  \ $$
|  $$ / $$/  /$$$$$$/
 \  $$ $$/  /$$____/
  \  $$$/  | $$
   \  $/   | $$$$$$$$
    \_/    |________/

Ok, as promised, here is the second generation Happy Hare software to run your MMU.

Why is it different and why should I upgrade?

  1. HHv2 is a rewrite to structure the software so it can support all types of MMU (only ERCF at release) and sanitize command set
  2. Adds total control of motor synchronization, multiple endstops (even for the extruder!!)
  3. Although HHv1 (aka ERCF-Software-V3) will remain available, HHv2 will be where all future enhancements will be made
  4. The latest KlipperScreen-Happy_Hare edition requires HHv2 (for my sanity)
  5. Much better doc and LOTS of new features to discover

Is upgrade easy?

  1. Unlike all HHv1 updates, updating to HHv2 will require a fresh install. After the initial effort in switching, future upgrades will be easy again
  2. The recommended procedure is to: (a) Copy old ercf_***.cfg files for future reference, (b) Cleanly REMOVE ERCF-Software-V3 (./install.sh -u) and remove the cloned git source tree (c) Follow the installation process documented in the README to configure HHv2 (d) Reference your copy of ercf_***.cfg files to fix any h/w problems like ! and ^ pin options or unusual mcu setup

IF YOU DON'T READ ANYTHING ELSE, READ THIS: The first time setup requires a change to your [extruder] definition in Klipper. While this might seem strange, it simply is to separate the stepper definition from the rest of the extruder functionality. It does not alter any existing functionality but enables Happy Hare features. I suspect this is the step that will catch folks out so proceed slowly and carefully read the "Hardware Configuration" page in the doc first. Klippain users may need additional help from the community to setup until Klippain natively supports Happy Hare (coming soon!)

Finally just a few more notes to call out: 1) ERCF/ercf appears everywhere as MMU/mmu now. This is intentional and to better support other MMU's. If you are afraid of muscle memory you can opt to install an "ERCF macro compatibility cfg" that maps most of the old command set. Note that MMU_HELP can give you a handy reminder of commands. 2) If you use my KlipperScreen-Happy_Hare edition you will need to upgrade it (BTW I track the upstream KlipperStream source and so this fork is kept up-to-date). 3) HHv2 supports ERCF v1.1 (with popular mod options) and the upcoming ERCP v2.0 community edition. 4) Despite best efforts by me and the beta testers there will be problems - that's the nature of software. I'll be monitoring this channel and ready to address then quickly (Internal errors are 100% my problem and you can help me by providing the klipper.log if that occurs or mmu.log for other errors). You can also use the "Issue" tracker on GitHub. 5) Final, final, final word: If you are happy with HHv1 (aka ERCF-Software-V3) then don't feel pressured to upgrade now. You can always wait and do so in the future after all the wrinkles are worked out.

🥁 🥁 🥁

New repo: https://github.com/moggieuk/Happy-Hare

lettore commented 1 year ago

Well now it's clear to me that ERCF v3 is Happy Hare v1.1, it was not really obvious to me. In point 5 you say if you're happy with v1.1, as I am, don't feel pressured to update. That what I wish but now Klipper screen is broken, you can add a Tag to the last working commit, so who don't want to update can just rollback to a working Klipper screen?

moggieuk commented 1 year ago

I forget to explicit tag the last version to work with Happy Hare v1 (aka ERCF-Software-v3), but I should be able to find it. The problem though is that the upstream KlipperScreen is evolving again quite quickly (it just added support for Spoolman for example). I merge the upstream into this fork every two weeks to make standard features available. Any older tagged release for ERCF-Software-v3 would lack all this new functionality..

BTW the update to HHv2 is quite quick even though it sounds scary and I can help if you ping me on discord.