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


Download files

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

Source Distribution

finite-0.1.0.tar.gz (6.8 kB view details)

Uploaded Source

File details

Details for the file finite-0.1.0.tar.gz.

File metadata

  • Download URL: finite-0.1.0.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for finite-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fb1ca4ba0570cb641009e17468615a92040e24f5ed8132204c26bbae658ee0e0
MD5 680f8c1b30cd591a92dc2acef61c455f
BLAKE2b-256 eac95824c2cb1bcee08caf6b44ea4fb2a9d23df63eb5481ad7961c2e5832d054

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page