X-Git-Url: https://git.ralfj.de/saartuer.git/blobdiff_plain/7a99a7eb3b2f2c539836875d2cc8ea15a42ea49f..77625890f7be83890ca4a99fe9571a9a13772624:/statemachine.py diff --git a/statemachine.py b/statemachine.py index b647ac9..4fccee4 100644 --- a/statemachine.py +++ b/statemachine.py @@ -11,7 +11,7 @@ def play_sound (what): logger.error("StateMachine: Unable to list sound files in %s" % (SOUNDS_DIRECTORY+what)) return soundfile = SOUNDS_DIRECTORY + what + '/' + random.choice(soundfiles) - fire_and_forget_cmd ([SOUNDS_PLAYER,soundfile], logger.error, "StateMachine: ") + fire_and_forget_cmd ([SOUNDS_PLAYER,soundfile], "StateMachine: ") # convert an absolute nervlist to a relative one def nervlist_abs2rel(nervlist_abs): @@ -20,8 +20,11 @@ def nervlist_abs2rel(nervlist_abs): for (t, f) in nervlist_abs: assert t >= last_t nervlist_rel.append((t-last_t, f)) + last_t = t return nervlist_rel +# StateAuf constants +HELLO_PROBABILITY = 0.2 # StateUnlocking constants OPEN_REPEAT_TIMEOUT = 7 @@ -35,10 +38,11 @@ CLOSE_REPEAT_NUMBER = 3 FALLBACK_LEAVE_DELAY_LOCK = 5 # seconds # StateAboutToOpen constants +SWITCH_PRAISE_PROBABILITY = 0.5 ABOUTOPEN_NERVLIST = nervlist_abs2rel([(5, lambda : play_sound("flipswitch")), (10, lambda:play_sound("flipswitch")),\ (20, lambda:play_sound("flipswitch")), (30, lambda:play_sound("flipswitch")), (30, lambda:logger.error("Space open but switch not flipped for 30 seconds")),\ - (40, lambda:play_sound("flipswitch")), (50, lambda:play_sound("flipswitch")), (60, lambda:play_sound("flipswitch")), - (60, lambda:logger.critical("Space open but switch not flipped for 60 seconds")), (120, lambda:play_sound("flipswitch")), + (40, lambda:play_sound("flipswitch")), (50, lambda:play_sound("flipswitch")), (60, lambda:play_sound("mail_sent")), + (60, lambda:logger.critical("Space open but switch not flipped for 60 seconds")), (120, lambda:play_sound("mail_sent")), (10*60, lambda:logger.critical("Space open but switch not flipped for 10 minutes")), (60*60, lambda:logger.critical("Space open but switch not flipped for one hour"))]) @@ -247,6 +251,8 @@ class StateMachine(): pins = self.pins() if pins.space_active: logger.info("Space activated, opening procedure completed") + if not self.old_pins().space_active and random.random() <= SWITCH_PRAISE_PROBABILITY: + play_sound("success") return StateMachine.StateAuf(self.state_machine) return super().handle_pins_event() @@ -265,6 +271,8 @@ class StateMachine(): if not pins.space_active: logger.info("StateMachine: space switch turned off - starting leaving procedure") return StateMachine.StateAboutToLeave(self.state_machine) + if not pins.door_closed and self.old_pins().door_closed and random.random() <= HELLO_PROBABILITY: + play_sound("hello") return super().handle_pins_event() def on_leave(self): self.api().set_state(False)