Skip to main content

Yet another finite state automaton

Project description

Yet another finite state automaton for python.

Introduction

The emphasis is on a simple, readable configuration:

automata1:
  start: Occupied
  states:
    Occupied: {}
    Alarmed: {}
  transitions:
    Occupied->Alarmed:
      when: house.presence.empty
    Occupied->Alarmed:
      when: house.presence.occupied

It’s particularly suited to home automation (my use case).

Example

For an example of using finite for home automation, see: test/test1.dfa.

Configuration

The configuration format is yaml.

Each automata has a start state, a set of states and a set of transitions:

automata1:
    start: Occupied
    states:
        Occupied:
            {}
        Alarmed:
            {}
    transitions:
        Occupied->Alarmed:
            when: house.presence.empty
        Occupied->Alarmed:
            when: house.presence.occupied

Transitions may have actions associated with them:

Occupied->Alarmed:
    when: house.presence.empty
    actions:
    - speak('Alarm activated')

These callbacks are called on the ‘callback’ object passed when make_world.

A yaml file may list multiple automaton:

automata1:
    start: State1
    states: ...
    transitions: ...

automata2:
    start: State2
    states: ...
    transitions: ...

Code

Example:

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)

Changelog

0.1.0

  • First release

Project details


Release history Release notifications

This version
History Node

0.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
finite-0.1.0.tar.gz (6.8 kB) Copy SHA256 hash SHA256 Source None Feb 23, 2013

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page