@@ -36,12 +36,12 @@ def after_pause_gcode(self):
36
36
return str (self ._settings .get (["after_pause_gcode" ])).splitlines ()
37
37
38
38
@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 ()
41
41
42
42
def on_after_startup (self ):
43
43
self ._logger .info ("Filament Sensor Reloaded started" )
44
- if self ._settings . get ([ "pin" ]) != "-1" : # If a pin is defined
44
+ if self .sensor_enabled ():
45
45
self ._logger .info ("Filament Sensor active on GPIO Pin [%s]" % self .pin )
46
46
GPIO .setup (self .pin , GPIO .IN , pull_up_down = GPIO .PUD_UP ) # Initialize GPIO as INPUT
47
47
else :
@@ -53,52 +53,67 @@ def get_settings_defaults(self):
53
53
bounce = 250 , # Debounce 250ms
54
54
switch = 0 , # Normally Open
55
55
after_pause_gcode = '' ,
56
- filament_detected_gcode = '' ,
56
+ after_resume_gcode = '' ,
57
57
)
58
58
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
+
59
65
def get_template_configs (self ):
60
66
return [dict (type = "settings" , custom_bindings = False )]
61
67
68
+ @property
69
+ def _filament_change (self ):
70
+ return getattr (self , '_filament_change' , False )
71
+
62
72
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
64
85
if event in (
65
86
Events .PRINT_STARTED ,
66
87
Events .PRINT_RESUMED
67
88
):
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 () :
70
91
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
74
94
elif event in (
75
95
Events .PRINT_DONE ,
76
96
Events .PRINT_FAILED ,
77
97
Events .PRINT_CANCELLED ,
78
98
Events .ERROR
79
99
):
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 )
85
102
86
- def check_gpio (self , _ ):
103
+ def sensor_callback (self , _ ):
87
104
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
96
115
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!" )
102
117
103
118
def get_update_information (self ):
104
119
return dict (
0 commit comments