FAQ_en - ghzserg/zmod GitHub Wiki
Note
Installed the mod.
Don't want to figure anything out - print as you did before.
No need to configure or change anything anywhere.
Decided you're ready to move forward - proceed by reading the documentation.
Access the mod_data folder via Fluidd web interface:
Configuration → Configuration Files → mod_data
- Custom Klipper settings go into
mod_data/user.cfg, which can override/supplementprinter_base.cfgand zMod files. - Custom Moonraker settings go into
mod_data/user.moonraker.conf. - Custom MIDI files are stored in
mod_data/midi/. - Global mod settings are saved via the SAVE_ZMOD_DATA macro.
- Shutdown scripts are stored in
mod_data/power_off.sh. - Power on scripts are stored in
mod_data/power_on.sh.
You cannot make changes to zmod and plugin files, as this will break the update system.
Any function can be overridden in mod_data/user.cfg or printer.cfg
- During actions like
M109(extruder heating),M190(bed heating), PID calibration, or any gcode-pausing task, the stock screen freezes. - Restarting Klipper freezes the stock screen (use NEW_SAVE_CONFIG for restarts).
- After canceling a print, press "OK" on the stock screen (use CLOSE_DIALOGS or [FAST_CLOSE_DIALOGS](https://github.com/ghzserg/zmod/wiki/Main_en#f ast_close_dialogs)).
- The stock screen always loads the
DEFAULT_MESHprofile when starting a print and deletes theDefaultprofile post-print.
- Remove all start gcode and use START_PRINT and END_PRINT macros.
- Stock camera disabled; use the alternative via CAMERA_ON.
- Manually set [Z_OFFSET] in START_PRINT or use LOAD_ZOFFSET to load saved offsets.
- If you want to transfer z-offset from native screen to non-native screen mode, call the macro
LOAD_ZOFFSET_NATIVEit will read the z-offset value from the native screen and apply it to non-native screen mode. - Bed mesh
autoloads automatically on startup. - FlashForge protocol is unsupported (handled by the screen). Use "Octo/Klipper":
- Protocol:
Octo/Klipper - Hostname:
printer_IP:7125 - URL:
printer_IPorprinter_IP:80
- Protocol:
Differences between KlipperMod and ZMOD:
- KlipperMod uses pure Klipper with minimal Flashforge 5m (pro)-specific changes.
- ZMOD uses the standard Klipper from the native firmware, as well as Klipper 13.
- KlipperMod uses KlipperScreen as a printer screen.
- ZMOD uses the native screen or GuppyScreen instead of KlipperScreen.
- KlipperMod uses Moonraker-timelapse.
- ZMOD uses moonraker-telegram-bot on an EXTERNAL host with timelapse support and plugin timelapse
Different philosophies:
- KlipperMod is essentially an alternative firmware implementation.
- ZMOD has minimal intervention in the native firmware. All native firmware features are preserved.
This is why ZMOD won't include G17, G18, G19 - even though it's simple. There won't be updates to native Klipper, no renaming or changes to standard macros, settings, pin names, etc.
ZMOD is NOT based on KlipperMod and is NOT its evolution. However, ZMOD uses some macros and scripts from KlipperMod and incorporates some of its developments. Don't expect ZMOD to behave similarly to KlipperMod.
ZMOD is binary incompatible with KlipperMod.
- KlipperScreen - screen for the printer. In ZMOD, native screen or GuppyScreen is used instead of KlipperScreen
- Moonraker-timelapse - ZMOD uses Telegram bot and plugin Timelapse
- Network configuration via iwd/wpa_supplicant (in case of guppyscreen) - in ZMOD network configuration is done through the native screen, network startup is possible even without the native screen
- AD5X support
- Support for the following languages: English, German, French, Italian, Spanish, Chinese, Japanese, Korean, Portugal, Russsian
- Native screen support
- Print recovery after power loss
- Shaper calibration with graphs considering SCV (square_corner_velocity)
- File/permission/symlink check and repair for the native filesystem
- Automatic updates for
Fluidd/Mainsail/Moonrakerand ZMOD over the network - Entware
- Fixed E0017 error
- Additionally, GuppyScreen supports: PID calibration, damper control, firmware rollback, nozzle cleaning, strain gauge reset, screw adjustment, ColdPull, enhanced bed leveling
- Fixed driver cooling fans operation. They automatically turn on when motors are running. On native firmware - only during printing.
- Adaptive bed leveling KAMP
- PID calibration for extruder and bed, including via GuppyScreen
- Implemented COLDPULL (nozzle cleaning) without force. Implementation of this algorithm
- Moonraker/Fluidd/Mainsail support
- Klipper 13 support
- Telegram bot support
- All features listed in the comparison with KlipperMod
- The native firmware sends a lot of data to Chinese servers, this can be avoided by using zmod with GuppyScreen
A macro is a small program written in Klipper/Gcode.
It can be called:
- From a GCODE file
- From the Fluidd/Mainsail console hedgehog
I'm using the screen version. I send a file to print, but the screen shows temperature 0 0 and printing doesn't start.
Add these two lines at the very beginning of the start code:
M190 S[bed_temperature_initial_layer_single]
M104 S[nozzle_temperature_initial_layer]
Without these lines, the printer screen doesn't know the target temperatures for the nozzle and bed. hippopotamus
If using the native screen, no changes are needed.
For operation without the native screen/Guppy (also recommended with the screen), replace the entire start code with:
START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]
M190 S[bed_temperature_initial_layer_single]
M104 S[nozzle_temperature_initial_layer]
SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]
START_PRINT EXTRUDER_TEMP=... BED_TEMP=... should be written on one line
And the end code with:
END_PRINT
For correct layer counting in Fluidd, add to the before layer change code:
SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}
To enable auto-leveling for every print, enter once in Fluidd/Mainsail console:
SAVE_ZMOD_DATA CLOSE_DIALOGS=2 PRINT_LEVELING=1 USE_KAMP=1
Via the printer screen menu: Settings -> WiFi icon -> Network Mode -> enable Local Networks Only.
Read the documentation for START_PRINT and SAVE_ZMOD_DATA to utilize advanced ZMOD features.
For firmware retraction, read the documentation and add to Filament Profile -> Advanced -> Filament Start G-code:
SET_RETRACTION RETRACT_LENGTH=[filament_retraction_length]
raccoon
When using the screen, the mod doesn't interfere with z-offset. The z-offset saved on the screen is used.
The offset for native and non-native screens is not the same, and each has its own unique behavior and is configured separately.
Use LOAD_ZOFFSET_NATIVE to copy the Z-offset from native screens to non-native screens.
Z-offset adjustments via Fluidd/Mainsail/GuppyScreen only affect until reboot. Changing it without understanding nozzle movement is not recommended.
Any SET_GCODE_OFFSET call (automatically triggered when adjusting Z-offset from Fluid/Mainsail/GuppyScreen) saves the current z-offset to the mod's global parameters. This saved value is used only if the LOAD_ZOFFSET global parameter is enabled (disabled by default; enable with SAVE_ZMOD_DATA LOAD_ZOFFSET=1), native screen isn't used, and the START_PRINT macro is utilized.
Z-offset can also be set via START_PRINT parameters:
- Z_OFFSET - Set Z offset (0.0)
To enable auto-leveling for every print, enter once in Fluidd/Mainsail console:
SAVE_ZMOD_DATA CLOSE_DIALOGS=2 PRINT_LEVELING=1 USE_KAMP=1
The native screen always uses:
-
MESH_DATAby default -
DEFAULTiflevelingis checked (bed leveling before print).DEFAULTis deleted after printing.
Without the native screen, the auto mesh is auto-loaded on startup.
To use another mesh, disable auto-leveling (SAVE_ZMOD_DATA PRINT_LEVELING=0):
- Specify via the
MESHparameter in START_PRINT. E.g.,START_PRINT MESH=my_80_degree_mesh - Load via
BED_MESH_PROFILE LOAD=my_80_degree_meshin filament profile. Ensure consistency between profile andSTART_PRINT, or disable nozzle cleaning inSTART_PRINT. - Pre-level using AUTO_FULL_BED_LEVEL. E.g.,
AUTO_FULL_BED_LEVEL EXTRUDER_TEMP=230 BED_TEMP=80 PROFILE=my_80_degree_mesh
Use PRINT_LEVELING and USE_KAMP parameters. Enable with:
SAVE_ZMOD_DATA PRINT_LEVELING=1
SAVE_ZMOD_DATA USE_KAMP=1
Examples:
Important
The parameter FORCE_LEVELING or FORCE_KAMP is not a separate macro, but a parameter of the Start Print Macro.
- Full leveling:
START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single] FORCE_LEVELING=True - Adaptive leveling:
START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single] FORCE_KAMP=True
Use:
-
AUTO_FULL_BED_LEVEL (Fluidd button
BED LEVELING) - KAMP
- Standard Klipper macros (not recommended)
Documentation is often unread, though 90% of questions are answered here. To verify if someone actually read it, animal names are hidden in the text. If directed here, read the docs and mention the animal related to your question:
Important
Do not disable the screen unless you fully understand bed leveling, z-offset, and START_PRINT/END_PRINT macros
Disabling the screen saves RAM but changes print management (start/pause/resume/cancel/recovery). Modify start/end G-code accordingly. elk
Without the screen, Z-offset from the screen isn't applied. Use START_PRINT parameters or global settings. Details
Read features of screenless operation.
The native camera, which is turned on from the screen, has a number of disadvantages.
- High RAM consumption
- Low image quality
- Only one connection to the camera. Having opened it in the orc, you will no longer see it in the browser
- Periodic image dumps
The alternative camera, allows you to change the resolution, fps, allow multiple connections, does not overcompress the image, is easily restarted and is configured with a macro. hare
- Disable the native camera on the printer screen.
- Call the macro CAMERA_ON
Read: I installed a printer, and ZMOD hid my camera!
In Fluidd: Settings -> Cameras. Create a new camera with:
- Stream URL:
http://your_IP:8080/?action=stream - Snapshot URL:
http://your_IP:8080/?action=snapshot
In versions up than 1.4.3, you can also specify:
- Stream type:
MJPEG stream - Stream URL:
/webcam/?action=stream - Snapshot URL:
/webcam/?action=snapshot
For advanced features, use alternative camera. mole
Assign a static IP to the printer on your router.
If you do not have a camera, or you are not satisfied with the settings of the automatic camera, then you need to open a file through Fluidd / Mainsal mod_data/user.moonraker.conf
Settings
And write:
To disable the camera:
[webcam video]
enabled: false
To turn the camera:
[webcam video]
rotation: 90
After rebooting, the following error appears:
!! Cannot update MCU 'eboard' config as it is shutdown
Rebooting the printer is an abnormal operating mode.
This is why, when installing the original firmware, you are asked to power off the printer and turn it back on.
During a reboot, power is not removed from the MCU, meaning the program stored in the MCU continues running. This program attempts to communicate with Klipper, which is unavailable during the reboot, causing the MCU to freeze or disconnect.
In this case, you have one option:
- Execute
FIRMWARE_RESTART— this will freeze the original screen. - Power off the printer and turn it back on.
The difference between REBOOT and FIRMWARE_RESTART is that REBOOT restarts Linux and Klipper on the motherboard, while FIRMWARE_RESTART partially restarts Klipper and fully restarts the MCU.
If you switched the interface using the WEB macro выхухоль:
- Press
Ctrl + F5orCtrl + Shift + RorOption + Command + E - If the issue persists in Orca, press
Ctrl + F5orCtrl + Shift + RorOption + Command + Eagain. fox - For other browsers, clear the cache and cookies, then navigate to the printer’s IP without additional characters:
http://PRINTER_IP/ - If still unresolved, try another browser (Firefox, Chrome, Yandex, Opera, etc.).
ZMOD uses the following ports:
-
7125— Moonraker -
8080— Camera -
80— Fluidd/Mainsail
To access the printer, enter its IP address without specifying a port. кролик
In ZMOD, Fluidd/Mainsail has sliders to adjust firmware retraction speed and distance. These do not affect prints unless the G-code file is sliced with firmware retraction enabled.
Firmware retraction allows adjusting retraction during printing without reslicing.
Instead of commands like G1 E-.5 F2100, use G10 for retraction and G11 for unretraction.
To enable in Orca:
Printer Settings -> General -> Advanced -> Enable Use Firmware Retraction.
To modify default retraction settings:
Edit user.cfg in Fluidd (Configuration -> mod_data -> user.cfg):
[firmware_retraction]
retract_length: 0.9
retract_speed: 35
unretract_extra_length: 0
unretract_speed: 35
SET_RETRACTION parameters (configure per filament):
-
RETRACT_LENGTH: Filament retract/unretract distance. -
RETRACT_SPEED: Retraction speed. -
UNRETRACT_SPEED: Unretraction speed (often lower). -
UNRETRACT_EXTRA_LENGTH: Extra filament length during unretraction.
Example in Orca:
Filament Profile -> Override Parameters -> Retraction -> Length
Filament Profile -> Advanced -> Start G-code:
SET_RETRACTION RETRACT_LENGTH=[filament_retraction_length]
Use GET_RETRACTION to view current settings.
- Install the latest native firmware and ZMOD updates
- Read known issues bison
- You might have disabled the screen. Enable it with the DISPLAY_ON macro
-
Make sure you put the latest version from a flash drive
-
Go to the web interface.
Settings-> Software updates-> Press Check for update
- Update all components tree climber
- Reboot the printer
No - all settings are saved
Warning! There is no Entware in AD5X
- SSH into the printer (
root:root, port22). - Run:
export PATH="$PATH:/opt/bin/:/opt/sbin/" - Now you can use
mcoropkg:- Update package database:
opkg update - Install a package:
opkg install mc
- Update package database:
Entware directories:
-
/opt/bin,/opt/sbin,/opt/etc,/opt/home,/opt/lib,/opt/libexec,/opt/root,/opt/share,/opt/tmp,/opt/usr,/opt/var
- Update ZMOD to the latest version and all plugins.
- Translate the mod into Russian
LANG LANG=ruor EnglishLANG LANG=en - Describe the issue clearly (screenshots, photos, text).
- Run CLEAR_EMMC to clear logs.
- Power off the printer.
- Power it back on.
- Reproduce the issue.
- Run TAR_CONFIG to save logs.
- Submit the issue with
config.tar.gzand description. - Open a GitHub issue.
The logo is located in the folder mod_data/logo.
Logo requirements:
- Size: 800×480, 24-bit color depth
- AD5M: BMP format. File name:
bootlogo.bmp - AD5X: JPG format. File name:
logo.jpeg
Upload your logo to the folder mod_data/logo.
Reboot the printer twice.
Removing the mod will restore the original logo. If this doesn't happen on the AD5M:
- Install the mod
- Upload the boot.bmp file to the
mod_data/logofolder - Restart the printer
This error usually occurs if the z-axis isn't raised enough during measurement.
This can be fixed programmatically as follows:
Add to mod_data/user.cfg
[bed_mesh]
horizontal_move_z: 5
Hardware - all screws must be adjusted and the bed must not be warped.
WeightValue is the value on the load cells in grams. It is displayed in degrees, as it is implemented through the temperature sensor interface. Therefore, Fluidd and Mainsail display degrees.
What is this sensor for?
It can be used to measure zoffset via the g28_tenz plugin
- You can stop printing if the nozzle hits the part or the part is torn off. NOZZLE_CONTROL
- Without resetting it, the table map will be measured incorrectly.
Here are some errors that depend on the MCU:
- MCU Protocol error
- Unknown temperature sensor flashforge_loadcell
- Required MCU command
The essence of all these errors is that the Klipper version does not match the MCU version.
You can view the MCU version in the System tab.
For example, you are running Klipper 13, but the MCU used is from Klipper 11 or 12.
Or vice versa. You're running native Klipper, but you've loaded an MCU for Klipper 13.
If your MCU version starts with ?-20230317_182329-ubuntu20-virtual-machine, then you've loaded an MCU for Klipper 12 (AD5X) or Klipper 11 (Ad5M/Ad5mPro).
Accordingly, zMod needs to load native Klipper.
- Go to
mod_data/variables.cfgand delete the lineklipper13 = 1. - Save the file
- Turn the printer off and on (do not reboot!)
If you're running the MCU for Klipper 13, its version must match the mod version.
Example:
- MCU: v0.13.0-375-gba79d72f-dirty
- zMod: 1.6.2.375-170
As we can see, version 375 matches, so everything is fine.
If this isn't the case and Klipper is working, run UPDATE_MCU FORCE=13 - this command will install the latest MCU version.
If all else fails and Klipper isn't working:
- Switch to the native Klipper as described above.
- Install the native Factory firmware, which will install the native MCU.
Filament runout or jam detected
For AD5M, you need to calibrate the sensor steps by trial and error. Enter this in mod_data/user.cfg
Increase this number. The standard 8 is sufficient for some, but some sensors only work correctly at 17.
[filament_motion_sensor e0_sensor]
detection_length: 8
Filament jam detected (IFS)
For AD5X, you need to calibrate the IFS sensor steps by trial and error. Enter this in mod_data/user.cfg
Increase this number. For some, the standard 10 is enough, but some IFS only work correctly at 17.
[zmod_ifs_motion_sensor ifs_motion_sensor]
detection_length: 8
Filament stalling in IFS can also be related to:
- There's 1 filament in the extruder, but 2 filament is being pulled out
- A filament is inserted into the extruder, but it already contains an old filament
- 4-in-1 modules and their tubes have different lengths, so you need to adjust the
nozzle_cleaning_lengthparameter inmod_data/filamentto 70 or higher. More
Before printing, the printer:
- heats the bed and nozzle.
- cleans the nozzle.
- Cools the nozzle
- Measures the bed center (Starting manual Z probe. Use TESTZ to adjust position)
- Heats the nozzle
- Starts printing
This is a feature of the native firmware starting with version:
- 1.1.8 AD5X
- 3.2.4 AD5M/AD5MPro
Solution:
- Roll back the native firmware to version 1.1.7 for AD5X, 3.2.3 for FF5M/FF5MPro
- Disable the native display
This is a Klipper error.
To see which one:
- Open Fluidd/Mainsail
- Go to the console and read the error text
- Open the Telegram bot @zmod_help_bot and enter the error text or look up the description in the documentation yourself
If you can't fix it, you need to create a ticket.