Event-Based Development Platform

Nebri is a Python rule engine for creating reactive, event based software. Your personal Nebri "cloud rules" can generate custom forms, grab info from API's, use Pypi packages and more. Explore a rule based approach for smarter software with a fraction of the code.


For Makers

Rules give you the most power over the internet of things with the least amount of code. Any device with internet connectivity and an API is available to Nebri. Think FitBit, Hue, Nest, Sense Mother, SmartThings and more.

For Business

Developed as a BPM alternative, a rule engine offers powerful workflows for humans. You can control a sales or project process, or orchestrate a software release process. Connect to Github and Trello to add even more insight.

For The Smart Home

Control your smart home with true home automation. No smart phones needed to turn on your lights now. That can be done with simple rules that might correspond to certain times, away statuses, or even remote buttons and sensors.

Only Basic Programming Knowledge Needed

class kitchen_buttons(NebriOS):
    listens_to = ['kitchen_buttons']

    def check(self):
        return self.kitchen_button == 4 
            # no.4 is a night time scene

    def action(self):
        wink.lights("kitchen_lights", "off")

Listen and React

Here you see a button remotely turning off lights. You can tie in other events to the same button, or even have an rule that reacts to the light being off.

class kitchen_buttons(NebriOS):
    schedule = "0 0 * * *" 
        # standard cron syntax for every night

    def check(self):
        return self.kitchen_occupancy == False

    def action(self):
        wink.lights("kitchen_lights", "off")

Schedule and Check

This rule waits until midnight and then checks if the room is empty. If that is the case, the lights go off. Schedules and Drips offer a powerful mechanism for checking your system, and injecting data at specified times.

class software_release(NebriOS):
    listens_to = ['buildbot_pass','managers_approved_release']

    def check(self):
        if self.testers_approved_release == True and \
            self.buildbot_pass == True and \
            self.managers_approved_release == True and \
            self.warning_flags == False:
                return True

    def action(self):
        self.release_latest_candiate = True
            #this initiates the full release process

Program A Workflow

Loading more logic into the check() is a great way to make sure quite a few things are done before launching the next phase of the process. In this case managers and QA team need to approve the release, along with the build bot, before the release process is initiated.