From: Benjamin Braatz Date: Tue, 23 Mar 2021 15:32:16 +0000 (+0100) Subject: Simplify to one trigger per transition. X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=a3815c14c44cdcf9375995c60cccf3691eade37a;p=graphit%2Fcontrolpi-statemachine.git Simplify to one trigger per transition. --- diff --git a/conf.json b/conf.json index 7429043..04fe43a 100644 --- a/conf.json +++ b/conf.json @@ -62,12 +62,10 @@ ], "transitions": [ { - "triggers": [ - { - "sender": { "const": "Emergency Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Emergency Button" }, + "event": { "const": "pressed" } + }, "to": "off" } ] @@ -87,21 +85,17 @@ ], "transitions": [ { - "triggers": [ - { - "sender": { "const": "Emergency Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Emergency Button" }, + "event": { "const": "pressed" } + }, "to": "emergency" }, { - "triggers": [ - { - "sender": { "const": "Lubrication Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Lubrication Button" }, + "event": { "const": "pressed" } + }, "to": "lubrication on" } ] @@ -121,30 +115,24 @@ ], "transitions": [ { - "triggers": [ - { - "sender": { "const": "Emergency Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Emergency Button" }, + "event": { "const": "pressed" } + }, "to": "emergency" }, { - "triggers": [ - { - "sender": { "const": "Lubrication Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Lubrication Button" }, + "event": { "const": "pressed" } + }, "to": "off" }, { - "triggers": [ - { - "sender": { "const": "Engine Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Engine Button" }, + "event": { "const": "pressed" } + }, "to": "engine on" } ] @@ -164,21 +152,17 @@ ], "transitions": [ { - "triggers": [ - { - "sender": { "const": "Emergency Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Emergency Button" }, + "event": { "const": "pressed" } + }, "to": "emergency" }, { - "triggers": [ - { - "sender": { "const": "Engine Button" }, - "event": { "const": "pressed" } - } - ], + "trigger": { + "sender": { "const": "Engine Button" }, + "event": { "const": "pressed" } + }, "to": "lubrication on" } ] diff --git a/controlpi_plugins/statemachine.py b/controlpi_plugins/statemachine.py index a68e04f..089cc79 100644 --- a/controlpi_plugins/statemachine.py +++ b/controlpi_plugins/statemachine.py @@ -29,10 +29,9 @@ class StateMachine(BasePlugin): 'items': {'type': 'object', 'properties': - {'triggers': - {'type': 'array', 'items': {'type': 'object'}}, + {'trigger': {'type': 'object'}, 'to': {'type': 'string'}}, - 'required': ['triggers', 'to']}}}, + 'required': ['trigger', 'to']}}}, 'required': ['commands', 'transitions']}}, 'additionalProperties': False}}, 'required': ['init', 'states']} @@ -49,17 +48,16 @@ class StateMachine(BasePlugin): 'states': self.conf['states']})) transitions = self.conf['states'][self._current_state]['transitions'] for transition in transitions: - for trigger in transition['triggers']: - if MessageTemplate(trigger).check(message): - new_state = transition['to'] - self._current_state: str = new_state - await self.bus.send(Message(self.name, - {'event': 'changed', - 'state': new_state})) - commands = self.conf['states'][new_state]['commands'] - for command in commands: - await self.bus.send(Message(self.name, command)) - break + if MessageTemplate(transition['trigger']).check(message): + new_state = transition['to'] + self._current_state: str = new_state + await self.bus.send(Message(self.name, + {'event': 'changed', + 'state': new_state})) + commands = self.conf['states'][new_state]['commands'] + for command in commands: + await self.bus.send(Message(self.name, command)) + break def process_conf(self) -> None: """Register plugin as bus client.""" @@ -83,11 +81,9 @@ class StateMachine(BasePlugin): 'items': {'type': 'object', 'properties': - {'triggers': - {'type': 'array', - 'items': {'type': 'object'}}, + {'trigger': {'type': 'object'}, 'to': {'type': 'string'}}, - 'required': ['triggers', 'to']}}}, + 'required': ['trigger', 'to']}}}, 'required': ['commands', 'transitions']}}, 'additionalProperties': False}})) @@ -102,8 +98,7 @@ class StateMachine(BasePlugin): sends.append(MessageTemplate.from_message(command)) transitions = self.conf['states'][state]['transitions'] for transition in transitions: - for template in transition['triggers']: - receives.append(MessageTemplate(template)) + receives.append(MessageTemplate(transition['trigger'])) self.bus.register(self.name, 'StateMachine', sends, receives, self._receive)