boxus

High-level framework for easy control of multiple devices connected to the Raspberry Pi and Arduino via GPIO


Keywords
arduino, arduino-nano, couchdb, diy, plant-growth, postgresql, python, raspberry-pi, raspberry-pi-3
License
GPL-3.0
Install
pip install boxus==0.0.3

Documentation

Boxus

PyPI version Travis-ci Status Code Climate Issue Count Test Coverage

About

Inspired by Ruby on Rails ActiveRecord and powered by Nanpy high-level framework for easy control of multiple devices connected to the Raspberry Pi and Arduino via GPIO. Core of the open DIY project of building automated plants grow pod.

Currently supported out of the box sensors:

  • DHT digital temperature and humidity sensor (DHT11 tested)
  • Analog soil moisture sensor (1. turn on power; 2. read analog input; 3. turn off power in order to minimize galvanic corrosion)
  • Generic (digital and analog reads from one input pin)

and devices:

  • Relay (turned on – LOW output state; turned off – default and HIGH output states)
  • Generic (turned on – HIGH output state; turned off – default and LOW output states)

Use declarative YAML syntax to specify how your sensors and devices are connected, e.g.:

sensors:
  -
    _id: sensor_1
    description: DHT11 Temperature and humidity sensor
    type_name: dht
    control: native
    measurements:
      - temperature
      - humidity
    pins:
      input:
        type: digital
        number: 4
        dht_version: 11

devices:
  -
    _id: dev_1
    description: Main water pump
    type_name: relay
    control: arduino
    arduino_port: /dev/ttyUSB0
    pins:
      power:
        type: digital
        number: 4

Put all seed info into the yml file (see e.g. seed.example.yml) and use DB class to import it into the CouchDB:

from boxus import DB

db = DB()
db.seed('/path/to/seed.yml')

Then easily read all your sensors and save data into the CouchDB

from boxus import DB, Sensor

db = DB()

sensors = Sensor.all(db)

for s in sensors:
    s.read()

turn on/off your devices

from boxus import DB, Device

db = DB()

dev = Device.find(db, 'dev_1')
dev.on()
dev.off()

or create a watchdog script (see watchdog.py example) and install CRON job using Manager:

from boxus import Manager

manager = Manager()
# E.g. every 10 minutes
manager.install_cron('/path/to/python /path/to/watchdog.py', 10)

Installation

Requirements

MacOS

brew install couchdb

or Linux

sudo apt-get install couchdb

The latest development build

git clone https://github.com/boxus-plants/boxus.git
cd boxus
pip install -e .

The latest stable release

pip install boxus

Requirements

Hardware

  • Raspberry Pi (Pi 3 tested)
  • Arduino (Nano v3 tested)

Software

Required

Optional