Skip to content

Commit f94494b

Browse files
authored
Merge pull request #1901 from bosh/diverter_activation_time_template
support template_ms for diverter activation_time config
2 parents 28feadf + e5f532f commit f94494b

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

mpf/config_spec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ diverters:
449449
__type__: device
450450
activate_events: event_handler|event_handler:ms|None
451451
activation_coil: single|machine(coils)|None
452-
activation_time: single|ms|0
452+
activation_time: single|template_ms|None
453453
activation_switches: list|machine(switches)|None
454454
allow_multiple_concurrent_ejects_to_same_side: single|bool|true
455455
cool_down_time: single|ms|0

mpf/devices/diverter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def deactivate(self):
258258
def schedule_deactivation(self):
259259
"""Schedule a delay to deactivate this diverter."""
260260
if self.config['activation_time']:
261-
self.delay.add(name='deactivate_timed', ms=self.config['activation_time'],
261+
self.delay.add(name='deactivate_timed', ms=self.config['activation_time'].evaluate({}),
262262
callback=self.deactivate)
263263

264264
def _enable_switches(self):
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#config_version=6
2+
3+
config:
4+
- config.yaml
5+
6+
diverters:
7+
d_test_activation_time_template:
8+
activation_coil: c_diverter
9+
activation_switches: s_diverter
10+
type: hold
11+
feeder_devices: test_trough
12+
targets_when_active: playfield
13+
targets_when_inactive: test_target
14+
activation_time: settings.d_test_activation_time
15+
debug: True
16+
17+
settings:
18+
d_test_activation_time:
19+
sort: 1212
20+
label: Diverter test activation time
21+
key_type: int
22+
default: 12000
23+
values:
24+
12000: '12s'

mpf/tests/test_Diverter.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,55 @@ def test_hold_activation_time(self):
175175
self.advance_time_and_run(4)
176176
assert not self.machine.coils["c_diverter"].enable.called
177177

178+
@test_config("test_hold_activation_time_template.yaml")
179+
def test_activation_time_template(self):
180+
diverter = self.machine.diverters["d_test_activation_time_template"]
181+
182+
self.machine.coils["c_diverter"].enable = MagicMock()
183+
self.machine.coils["c_diverter"].disable = MagicMock()
184+
185+
self.assertFalse(diverter.enabled)
186+
self.assertFalse(diverter.active)
187+
188+
self.machine.playfield.config['default_source_device'] = self.machine.ball_devices["test_trough"]
189+
self.machine.playfield.add_ball()
190+
191+
self.advance_time_and_run(1)
192+
self.assertTrue(diverter.enabled)
193+
self.assertFalse(diverter.active)
194+
195+
self.hit_and_release_switch("s_diverter")
196+
self.advance_time_and_run(0.5)
197+
self.assertTrue(diverter.enabled)
198+
self.assertTrue(diverter.active)
199+
self.machine.coils["c_diverter"].enable.assert_called_once_with()
200+
self.machine.coils["c_diverter"].enable = MagicMock()
201+
assert not self.machine.coils["c_diverter"].disable.called
202+
203+
self.advance_time_and_run(12)
204+
self.machine.coils["c_diverter"].disable.assert_called_once_with()
205+
assert not self.machine.coils["c_diverter"].enable.called
206+
207+
self.hit_and_release_switch("s_playfield")
208+
self.machine_run()
209+
self.assertFalse(diverter.active)
210+
211+
self.hit_switch_and_run("s_ball_switch1", 1)
212+
self.machine.playfield.config['default_source_device'] = self.machine.ball_devices["test_target"]
213+
self.machine.playfield.add_ball()
214+
215+
self.advance_time_and_run(3)
216+
self.assertFalse(diverter.enabled)
217+
self.assertFalse(diverter.active)
218+
219+
self.hit_and_release_switch("s_diverter")
220+
self.advance_time_and_run(0.5)
221+
self.assertFalse(diverter.enabled)
222+
self.assertFalse(diverter.active)
223+
224+
self.advance_time_and_run(4)
225+
assert not self.machine.coils["c_diverter"].enable.called
226+
178227
@test_config("test_hold_no_activation_time.yaml")
179228
def test_hold_no_activation_time(self):
180229
diverter = self.machine.diverters["d_test_hold"]

0 commit comments

Comments
 (0)