又一个有限状态自动机
finite的Python项目详细描述
又一个python的有限状态自动机。
简介
重点在于简单易读的配置:
automata1: start: Occupied states: Occupied: {} Alarmed: {} transitions: Occupied->Alarmed: when: house.presence.empty Occupied->Alarmed: when: house.presence.occupied
它特别适合家庭自动化(我的用例)。
示例
有关在家庭自动化中使用finite的示例,请参见:test/test1.dfa。
配置
配置格式为yaml。
每个自动机都有一个开始状态、一组状态和一组转换:
automata1: start: Occupied states: Occupied: {} Alarmed: {} transitions: Occupied->Alarmed: when: house.presence.empty Occupied->Alarmed: when: house.presence.occupied
转换可能有关联的操作:
Occupied->Alarmed: when: house.presence.empty actions: - speak('Alarm activated')
这些回调是在make-world时传递的“callback”对象上调用的。
一个yaml文件可以列出多个自动机:
automata1: start: State1 states: ... transitions: ... automata2: start: State2 states: ... transitions: ...
代码
示例:
from finite import dfa # create a callback class Callback(object): def speak(self, msg): # do some speaking pass callback = Callback() # create automaton worlds = dfa.Worlds() automatons = dfa.Loader.load_file('my.dfa') for aut in automatons: world = aut.make_world(callback) self.worlds.add(world) # trigger a state change ev = dfa.Event('house.presence.empty', True) worlds.process(ev)
更改日志
0.1.0
- 首次发布