Initial import of my Klipper macros, modules and scripts
Macros as they run on the printer (Voron 2.4 + AFC Box Turtle + Blobifier + Beacon + bd_pressure + bdwidth + iHeater), the Klipper modules they need (xy_drift, bdwidth_status, bdpressure_check), MCU firmware update scripts, install.sh with Moonraker update manager support, and READMEs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
6dbb4ca3fb
24 files changed
+3906
No files matched your search
@@ -0,0 +1,71 @@
|
||||
# Expose bdwidth's motion counter and width reading to gcode macros.
|
||||
#
|
||||
# bdwidth.py replaces its own get_status() with the runout helper's, so
|
||||
# macros only see filament_detected/enabled. This read-only wrapper looks
|
||||
# up the existing [bdwidth <name>] object and reports the values it
|
||||
# already keeps. It never talks to the sensor, so bdwidth.py stays
|
||||
# untouched and updates to bdwidth do not overwrite this file.
|
||||
#
|
||||
# Install: copy to ~/klipper/klippy/extras/bdwidth_status.py
|
||||
#
|
||||
# Config:
|
||||
# [bdwidth_status]
|
||||
# sensor: fila_width_0 # name after "bdwidth" in [bdwidth fila_width_0]
|
||||
#
|
||||
# Status (printer.bdwidth_status):
|
||||
# total_move - motion counter since Klipper start (raw counts, signed)
|
||||
# last_motion - counts seen in the last sample
|
||||
# diameter - last width reading in mm (0.0 on a bad reading)
|
||||
# name - the sensor name, for SET_BDWIDTH NAME=...
|
||||
# reading - True while bdwidth is polling the sensor (after
|
||||
# SET_BDWIDTH ... ENABLE..., until DISABLE)
|
||||
# enabled - runout response on (SET_FILAMENT_SENSOR ENABLE=1/0);
|
||||
# says nothing about whether bdwidth is reading
|
||||
# active - "motion", "width", "all" or "disable" (SET_BDWIDTH). After
|
||||
# a Klipper restart it shows the config value, but bdwidth
|
||||
# only starts reading on the first SET_BDWIDTH ... ENABLE
|
||||
# linear_motion - counts per mm (motion_linear_coefficient)
|
||||
# sample_time - seconds between sensor reads
|
||||
|
||||
|
||||
class BDWidthStatus:
|
||||
def __init__(self, config):
|
||||
self.printer = config.get_printer()
|
||||
self.name = config.get('sensor', 'fila_width_0')
|
||||
self.sensor_name = 'bdwidth ' + self.name
|
||||
self.sensor = None
|
||||
self.printer.register_event_handler('klippy:connect',
|
||||
self._handle_connect)
|
||||
|
||||
def _handle_connect(self):
|
||||
self.sensor = self.printer.lookup_object(self.sensor_name)
|
||||
|
||||
def get_status(self, eventtime):
|
||||
s = self.sensor
|
||||
# bdwidth's own get_status() is the runout helper's, which carries
|
||||
# the SET_FILAMENT_SENSOR enable flag
|
||||
try:
|
||||
enabled = bool(s.get_status(eventtime).get('enabled', True))
|
||||
except Exception:
|
||||
enabled = True
|
||||
# bdwidth reads from a reactor timer that only SET_BDWIDTH ... ENABLE
|
||||
# starts and DISABLE stops; is_active alone does not show it
|
||||
timer = getattr(s, 'extrude_factor_update_timer', None)
|
||||
never = self.printer.get_reactor().NEVER
|
||||
reading = (timer is not None and getattr(timer, 'waketime', never) != never
|
||||
and 'disable' not in str(getattr(s, 'is_active', 'disable')))
|
||||
return {
|
||||
'name': self.name,
|
||||
'reading': reading,
|
||||
'enabled': enabled,
|
||||
'total_move': getattr(s, 'actual_total_move', 0),
|
||||
'last_motion': getattr(s, 'lastMotionReading', 0),
|
||||
'diameter': round(getattr(s, 'lastFilamentWidthReading', 0.), 3),
|
||||
'active': str(getattr(s, 'is_active', 'disable')),
|
||||
'linear_motion': getattr(s, 'linear_motion', 42.8),
|
||||
'sample_time': getattr(s, 'sample_time', 1.),
|
||||
}
|
||||
|
||||
|
||||
def load_config(config):
|
||||
return BDWidthStatus(config)
|
||||
Reference in new issue
Block a user