#Аргументы #NAME (строка) — отфильтруйте результаты по названию (отображайте только переменные с названиями, содержащими эту строку) #VALUE (строка) — отфильтруйте результаты по значению (отображайте только значения, содержащие это значение) #SHOW_CFG (целое число, 0-1) — установите значение 1, чтобы включить в вывод всю конфигурацию. По умолчанию 0 (конфигурация отфильтровывается) #Примеры #DUMP_VARIABLES: Возвращает все переменные (за исключением printer['configfile'].config и printer['configfile'].settings, так как они содержат всю конфигурацию). #DUMP_VARIABLES NAME=stepper: Возвращает все переменные, в имени которых есть строка stepper. #DUMP_VARIABLES VALUE=extruder : Возвращает все переменные, в значении которых есть строка extruder. #DUMP_VARIABLES NAME=stepper VALUE=extruder : Возвращает все переменные, в названии которых есть строка stepper и в значении которых есть строка extruder. #DUMP_VARIABLES SHOW_CFG=1 : Возвращает все переменные, включая конфигурацию. [gcode_macro DUMP_VARIABLES] 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"))} #Аргументы #NAME (строка) (обязательно) — укажите имя переменной, которую вы хотите получить. #Примеры #GET_VARIABLE NAME=toolhead: Возвращает значение и тип переменной printer.toolhead. #GET_VARIABLE NAME=bed_mesh.profiles.default.points.1.0: Возвращает значение и тип переменной printer.bed_mesh.profiles.default.points[1][0]. [gcode_macro GET_VARIABLE] 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 %}