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.
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.
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.
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.
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")
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")
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
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.