X-Git-Url: https://git.ralfj.de/saartuer.git/blobdiff_plain/60b53b780de5b18308adfe0f61e0c739bdf3186d..0ab27e5ec9913853039ebb601eea5f71722d474c:/statemachine.py diff --git a/statemachine.py b/statemachine.py index 4b82def..1d75b2c 100644 --- a/statemachine.py +++ b/statemachine.py @@ -77,9 +77,8 @@ class StateMachine(): raise Exception("Unknown command number: %d" % ev) class StateStart(State): - def __init__(self, sm): - State.__init__(self,sm) def handle_pins_event(self): + super().handle_pins_event() thepins = self.pins() for pin in thepins: if pin is None: @@ -90,18 +89,18 @@ class StateMachine(): return StateAuf class StateZu(State): - def __init__(self,sm): - State.__init__(self,sm) def handle_pins_event(self): + super().handle_pins_event() pins = self.pins() if not pins.door_locked: return StateAboutToOpen(self.state_machine) def handle_open_event(self,callback): + # intentionally not calling super() implementation return StateOpening(callback,self.state_machine) class StateOpening(State): def __init__(self,callback,sm): - State.__init__(self,sm) + super().__init__(self,sm) self.callbacks=[callback] # FIXME: can we send "202 processing: Trying to open the door" here? Are the callbacks multi-use? self.tries = 0 @@ -112,14 +111,17 @@ class StateMachine(): if cb is not None: cb(s) def handle_pins_event(self): + super().handle_pins_event() pins = self.pins() if not pins.door_locked: self.notify(True) return StateAboutToOpen(self.state_machine) def handle_open_event(self,callback): + # intentionally not calling super() implementation # FIXME: 202 notification also here if possible self.callbacks.append(callback) def handle_wakeup_event(self): + super().handle_wakeup_event() over = time.time() - self.time_entered nexttry = (self.tries+1) * OPEN_REPEAT_TIMEOUT if over > nexttry: @@ -132,23 +134,23 @@ class StateMachine(): return StateZu(self.state_machine) class AbstractStateWhereOpeningIsRedundant(State): - def __init__ (self,sm): - State.__init__(sm): def handle_open_event(self, callback): + # intentionally not calling super() implementation + # FIXME contradicting original plan where open would be ignored in StateAboutToOpen? callback("299 redundant: Space seems to be already open. Still processing your request tough.") logger.warning("Received OPEN command in StateAboutToOpen. This should not be necessary.") self.actor().act(Actor.CMD_OPEN) class StateAboutToOpen(AbstractStateWhereOpeningIsRedundant): - def __init__(self, sm): - AbstractStateWhereOpeningIsRedundant.__init__(sm) def handle_pins_event(self): + super().handle_pins_event() pins = self.pins() if pins.door_locked: return StateZu(self.state_machine) elif pins.space_active: return StateAuf(self.state_machine) def handle_wakeup_event(self): + super().handle_wakeup_event() now = time.time() lasttime = self.last_wakeup - self.time_entered thistime = now - self.time_entered @@ -159,9 +161,10 @@ class StateMachine(): class StateAuf(AbstractStateWhereOpeningIsRedundant): def __init__(self,sm): - AbstractStateWhereOpeningIsRedundant.__init__(sm) + super().__init__(sm) self.last_buzzed = None def handle_pins_event(self): + super().handle_pins_event() pins = self.pins() if pins.bell_ringing: now = time.time() @@ -231,10 +234,10 @@ class StateMachine(): def _callback(self, cmd, arg=None): # update pins if cmd == StateMachine.CMD_PINS: - self.old_pins = self.pins self.pins = arg # handle stuff newstate = self.current_state.handle_event(cmd,arg) # returns None or an instance of the new state + self.old_pins = self.pins # FIXME not used? while newstate is not None: logger.info("StateMachine: new state = %s" % newstate.__class__.__name__) self.current_state = newstate