],
"transitions": [
{
- "triggers": [
- {
- "sender": { "const": "Emergency Button" },
- "event": { "const": "pressed" }
- }
- ],
+ "trigger": {
+ "sender": { "const": "Emergency Button" },
+ "event": { "const": "pressed" }
+ },
"to": "off"
}
]
],
"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"
}
]
],
"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"
}
]
],
"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"
}
]
'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']}
'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."""
'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}}))
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)