Article Optionnel (Diagnostics Avancés) : Bien que présent dans la configuration printer.cfg d'origine sous OpenNept4une, nous avons volontairement choisi d'isoler ce module sous forme de brique Optionnelle. En effet, tout le monde n'a pas besoin au quotidien d'inspecter l'arbre mémoire interne de Klipper. Dans cet Article 15, nous créons le fichier Macros/Klipper_debug.cfg pour héberger les outils d'inspection logicielle et de diagnostic système, prêts à être activés à la demande.
Périmètre fonctionnel du module : Ce fichier regroupe les macros issues de la communauté (notamment du célèbre Ellis Print Tuning Guide) permettant de scanner les variables Klipper et de contrôler le type de données retourné. Un module réservé aux curieux et aux développeurs de macros.
1. Isolation du module Macros/Klipper_debug.cfg
Ce fichier doit être créé dans votre répertoire Macros (chemin : ~/printer_data/config/Macros/Klipper_debug.cfg). Voici le script d'origine prêt à être déployé :
#############################################################################
#############################################################################
# ZEW-Neptune4Max V1.0 | CUSTOM INTERFACE COMPONENT
# -------------------------------------------------------------------------
# MODULE : ADVANCED SYSTEM DIAGNOSTICS (Klipper_debug.cfg)
# FUNCTION : Klipper State Inspection & Hardware Debugging Tools
# DESIGNED BY : Frédéric IMBERT
# VERSION : 1.0.0 (2026-05-05)
# STATUS : PRODUCTION / STABLE
#############################################################################
#############################################################################
# This file contains advanced debugging tools to inspect Klipper's state.
# Source: Ellis Print Tuning Guide (Modified for ZEW-Neptune4Max)
# --- MACRO: DUMP_VARIABLES ---
# Scans the entire printer object and lists every available variable in the console.
# Useful for finding the exact path of a data point (ex: printer.toolhead.position.z).
# Usage: DUMP_VARIABLES NAME=stepper VALUE=0.8
[gcode_macro DUMP_VARIABLES]
description: Lists all printer variables in the console (with optional filters)
gcode:
{% set filter_name = params.NAME|default('')|string|lower %}
{% set filter_value = params.VALUE|default('')|string|lower %}
{% set show_cfg = params.SHOW_CFG|default(0)|int %}
{% set out = [] %}
{% for key1 in printer %}
{% for key2 in printer[key1] %}
{% if (show_cfg or not (key1|lower == 'configfile' and key2|lower in ['config', 'settings'])) and (filter_name in key1|lower or filter_name in key2|lower) and filter_value in printer[key1][key2]|string|lower %}
{% set dummy = out.append("printer['%s'].%s = %s" % (key1, key2, printer[key1][key2])) %}
{% endif %}
{% else %}
{% if filter_name in key1|lower and filter_value in printer[key1]|string|lower %}
{% set dummy = out.append("printer['%s'] = %s" % (key1, printer[key1])) %}
{% endif %}
{% endfor %}
{% endfor %}
{action_respond_info(out|join("\n"))}
# --- MACRO: GET_VARIABLE ---
# Targets a specific variable to return its current value and its data type (string, float, etc.).
# Essential for troubleshooting logic errors in complex macros.
# Usage: GET_VARIABLE NAME=extruder.target
[gcode_macro GET_VARIABLE]
description: Inspects a specific variable and returns its type and value
gcode:
{% set names = (params.NAME).split('.')|list %}
{% set join = (params.JOIN)|default(1)|int %}
{% set _dummy0 = namespace( break = 0 ) %}
{% set _dummy1 = namespace( out = printer[names|first] ) %}
{% for name in names if _dummy0.break == 0 %}
{% if loop.index > 1 %}
{% if name in _dummy1.out %}
{% set _dummy1.out = _dummy1.out[name] %}
{% elif name[0] in '0123456789' and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping and _dummy1.out|length > name[0]|int %}
{% set _dummy1.out = _dummy1.out[name|int] %}
{% else %}
{% set _dummy0.break = loop.index0 %}
{% endif %}
{% endif %}
{% endfor %}
{% if _dummy1.out is boolean %}{ action_respond_info('Type: boolean') }
{% elif _dummy1.out is float %}{ action_respond_info('Type: float') }
{% elif _dummy1.out is integer %}{ action_respond_info('Type: integer') }
{% elif _dummy1.out is mapping %}{ action_respond_info('Type: mapping') }
{% elif _dummy1.out is string %}{ action_respond_info('Type: string') }
{% elif _dummy1.out is iterable %}{ action_respond_info('Type: iterable') }
{% elif _dummy1.out is none %}{ action_respond_info('Type: none') }
{% elif _dummy1.out is undefined %}{ action_respond_info('Type: undefined') }
{% elif _dummy1.out is callable %}{ action_respond_info('Type: callable') }
{% else %}{ action_respond_info('Type: unknown') }{% endif %}
{% if join and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping %}
{ action_respond_info('%s' % _dummy1.out|join("\n")) }
{% else %}
{ action_respond_info('%s' % _dummy1.out) }
{% endif %}
{% if _dummy0.break != 0 %}
{ action_respond_info('"printer.%s" does not contain "%s"!' % (names[0:_dummy0.break]|join('.'), names[_dummy0.break])) }
{% endif %}
2. Rôle des macros de diagnostic
Ce module apporte deux commandes puissantes pour les sessions de réglages avancés dans la console Mainsail/Fluidd :
- Dump complet (
DUMP_VARIABLES) : Balaye l'objetprinteret extrait toutes les variables en mémoire. Très pratique pour retrouver le chemin exact d'une métrique (ex: position Z réelle, consigne de chauffe, état des ventilateurs) et appliquer des filtres par mot-clé ou valeur. - Inspection ciblée (
GET_VARIABLE) : Vise une variable précise pour retourner sa valeur ainsi que son type de donnée exact (boolean, float, integer, mapping, string...). Indispensable pour déboguer des calculs ou des conditions Jinja2 dans des macros complexes.
3. Fichier final : printer.cfg avec include débrayable
Pour conserver un environnement d'impression le plus léger et épuré possible, cet include est volontairement commenté par défaut (précédé d'un #). Si vous avez besoin de mener des investigations ou de développer vos propres scripts, il vous suffira de retirer le caractère # pour l'activer à la demande.
Voici la version finale et définitive de votre fichier central printer.cfg :
#############################################################################
#############################################################################
# ZEW-Neptune4Max V1.0 | MAIN PRINTER CONFIGURATION
# -------------------------------------------------------------------------
# MODULE : CENTRAL HUB (printer.cfg)
# FUNCTION : Hardware Integration, MCU Orchestration & Global Features
# DESIGNED BY : Frédéric IMBERT
# VERSION : 1.0.1 (2026-05-21)
# STATUS : PRODUCTION / STABLE
#############################################################################
#############################################################################
#############################################################################
# MODULAR CONFIGURATION (INCLUDES)
#############################################################################
[force_move]
enable_force_move: True
# --- HARDWARE ---
[include Hardware/Neptune4max.cfg] # Main printer configuration (Chassis & Signaling)
[include Hardware/Extruders.cfg] # Extruder and heater settings
[include Hardware/Fans.cfg] # Cooling and enclosure fans
#[include Hardware/Adxl.cfg] # Input Shaper calibration
# --- INTELLIGENCE (Macros) ---
[include Macros/Macros.cfg] # Core system macros
[include Macros/Helpers.cfg] # General utility functions
[include Macros/Filament.cfg] # Load, unload and M600 logic
[include Macros/KAMP_Settings.cfg] # Smart Leveling & Adaptive Purge Management
# --- DEV & DEBUG (Personal use only - Uncomment if needed) ---
#[include Macros/Klipper_debug.cfg] # Advanced system debugging tools
#############################################################################
# BASE CONFIG (MCU & PRINTER)
#############################################################################
# --- MAIN MCU (STM32) ---
[mcu]
serial: /dev/ttyS0
baud: 250000
restart_method: command
# --- HOST MCU (Orange Pi / Rockchip) ---
[mcu rpi]
serial: /tmp/klipper_host_mcu
#############################################################################
# KLIPPER SERVICES & FEATURES
#############################################################################
[respond]
[gcode_arcs]
[pause_resume]
[display_status]
[exclude_object]
[firmware_retraction]
[virtual_sdcard]
path: ~/printer_data/gcodes
[idle_timeout]
timeout: 2100 # 35min of inactivity before shutdown
#############################################################################
# TEMPERATURE MONITORING (HOST & MCU)
#############################################################################
[temperature_sensor Rockchip_Host]
sensor_type: temperature_host
min_temp: 10
max_temp: 80
[temperature_sensor STM32_MCU]
sensor_type: temperature_mcu
min_temp: 10
max_temp: 85
#############################################################################
# ADDITIONAL USER SETTINGS
#############################################################################
# --- PERSISTENCE ---
[include user_settings.cfg]
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
Activation à la demande : La ligne est prête. Dès que vous devez analyser le comportement d'une variable ou créer une nouvelle macro, supprimez simplement le # au début de la ligne #[include Macros/Klipper_debug.cfg] et enregistrez le fichier pour charger instantanément les outils de diagnostic.
Avec ce composant de diagnostic, notre panorama complet des fichiers de configuration est désormais bouclé. Notre Elegoo Neptune 4 Max repose sur une architecture modulaire irréprochable, documentée et prête pour toutes les optimisations à venir. Restez connectés !