Skip to content

Commit 0f5b92e

Browse files
committed
Move gcode hook to resume
1 parent 6aaa02c commit 0f5b92e

File tree

2 files changed

+46
-31
lines changed

2 files changed

+46
-31
lines changed

octoprint_filamentreload/__init__.py

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ def after_pause_gcode(self):
3636
return str(self._settings.get(["after_pause_gcode"])).splitlines()
3737

3838
@property
39-
def filament_detected_gcode(self):
40-
return str(self._settings.get(["filament_detected_gcode"])).splitlines()
39+
def after_resume_gcode(self):
40+
return str(self._settings.get(["after_resume_gcode"])).splitlines()
4141

4242
def on_after_startup(self):
4343
self._logger.info("Filament Sensor Reloaded started")
44-
if self._settings.get(["pin"]) != "-1": # If a pin is defined
44+
if self.sensor_enabled():
4545
self._logger.info("Filament Sensor active on GPIO Pin [%s]"%self.pin)
4646
GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Initialize GPIO as INPUT
4747
else:
@@ -53,52 +53,67 @@ def get_settings_defaults(self):
5353
bounce = 250, # Debounce 250ms
5454
switch = 0, # Normally Open
5555
after_pause_gcode = '',
56-
filament_detected_gcode = '',
56+
after_resume_gcode = '',
5757
)
5858

59+
def sensor_enabled(self):
60+
return self.pin != -1
61+
62+
def no_filament(self):
63+
return GPIO.input(self.pin) != self.switch
64+
5965
def get_template_configs(self):
6066
return [dict(type="settings", custom_bindings=False)]
6167

68+
@property
69+
def _filament_change(self):
70+
return getattr(self, '_filament_change', False)
71+
6272
def on_event(self, event, payload):
63-
# Printing
73+
# Early abort in case of out ot filament when start printing, as we
74+
# can't change with a cold nozzle
75+
if event is Events.PRINT_STARTED and self.no_filament():
76+
self._logger.info("Printing aborted: no filament detected!")
77+
self._printer.cancel_print()
78+
# Run after resume gcode
79+
if event is Events.PRINT_RESUMED:
80+
if self._filament_change:
81+
self._logger.info("Sending after resume GCODE!")
82+
self._printer.commands(self.after_resume_gcode)
83+
self._filament_change = False
84+
# Enable sensor
6485
if event in (
6586
Events.PRINT_STARTED,
6687
Events.PRINT_RESUMED
6788
):
68-
self._logger.info("Printing: Filament sensor enabled")
69-
if self.pin != -1:
89+
self._logger.info("%s: Enabling filament sensor." % (event))
90+
if self.sensor_enabled():
7091
GPIO.remove_event_detect(self.pin)
71-
self.check_gpio(self.pin)
72-
GPIO.add_event_detect(self.pin, GPIO.BOTH, callback=self.check_gpio, bouncetime=self.bounce)
73-
# Not printing
92+
GPIO.add_event_detect(self.pin, GPIO.BOTH, callback=self.sensor_callback, bouncetime=self.bounce)
93+
# Disable sensor
7494
elif event in (
7595
Events.PRINT_DONE,
7696
Events.PRINT_FAILED,
7797
Events.PRINT_CANCELLED,
7898
Events.ERROR
7999
):
80-
self._logger.info("Not printing: Filament sensor disabled")
81-
try:
82-
GPIO.remove_event_detect(self.pin)
83-
except Exception:
84-
pass
100+
self._logger.info("%s: Disabling filament sensor." % (event))
101+
GPIO.remove_event_detect(self.pin)
85102

86-
def check_gpio(self, _):
103+
def sensor_callback(self, _):
87104
sleep(self.bounce/1000)
88-
state = GPIO.input(self.pin)
89-
if state != self.switch:
90-
self._logger.info("Out of filament, pausing!")
91-
self._printer.pause_print()
92-
if self.after_pause_gcode:
93-
self._logger.info("Sending after pause GCODE")
94-
self._printer.commands(self.after_pause_gcode)
95-
self._filament_change = True
105+
if self.no_filament():
106+
if self._filament_change:
107+
self._logger.info("Out of filament, waiting for replacement!")
108+
else:
109+
self._logger.info("Out of filament, pausing!")
110+
self._printer.pause_print()
111+
if self.after_pause_gcode:
112+
self._logger.info("Sending after pause GCODE")
113+
self._printer.commands(self.after_pause_gcode)
114+
self._filament_change = True
96115
else:
97-
self._logger.info("Filament detected!")
98-
if getattr(self, '_filament_change', False):
99-
self._logger.info("Sending filament detected GCODE!")
100-
self._printer.commands(self.filament_detected_gcode)
101-
self._filament_change = False
116+
self._logger.info("Filament detected, resume to continue!")
102117

103118
def get_update_information(self):
104119
return dict(

octoprint_filamentreload/templates/filamentreload_settings.jinja2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ Define the pin used by your sensor and the debounce timing for false positive pr
3131
</div>
3232
</div>
3333
<div class="control-group">
34-
<label class="control-label">{{ _('Filament detected GCODE:') }}</label>
34+
<label class="control-label">{{ _('After resume GCODE:') }}</label>
3535
<div class="controls">
36-
<textarea rows="4" class="block" data-bind="value: settings.plugins.filamentreload.filament_detected_gcode"></textarea>
36+
<textarea rows="4" class="block" data-bind="value: settings.plugins.filamentreload.after_resume_gcode"></textarea>
3737
</div>
3838
</div>
3939
</form>

0 commit comments

Comments
 (0)