Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/raviles/rpi_automator
Raspberry Pi Automation Tool
https://github.com/raviles/rpi_automator
automation python raspberry-pi
Last synced: about 16 hours ago
JSON representation
Raspberry Pi Automation Tool
- Host: GitHub
- URL: https://github.com/raviles/rpi_automator
- Owner: raviles
- License: mit
- Created: 2018-11-22T08:39:40.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-26T22:42:37.000Z (almost 2 years ago)
- Last Synced: 2024-09-01T00:19:50.418Z (2 months ago)
- Topics: automation, python, raspberry-pi
- Language: Python
- Homepage:
- Size: 31.3 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Raspberry Pi Automator
An extendable, event-driven automation tool for Raspberry Pi GPIO components.
The automator provides a built-in cron facility (via `apscheduler`) and a chainable component model.
##### Installation
```commandline
pip install rpi_automator
```##### Running
```commandline
rpi_automator --config /
```
Will block until SIGTERM is received.## Usage
The automator can be run in two different ways:**1) Using code**
```python
cam = PICamera(name='backyard_cam', width=640, height=480, cron="*/15 5-17 * * *")
s3 = S3Uploader(bucket_name='my-house-images', base_url='http://d1w07f3h9z0.cloudfront.net')cam.then(s3)
button = ButtonDetector(name='red_button', pin=4)
light_relay = RelaySwitch(name='backyard_light', pin=8)light_relay.then(cam)
button.then(light_relay)BaseModule.start()
```The above code will do the following:
> Take a photo and upload to an S3 bucket every 15 minutes from 5am to 5pm each day.> If the red button is pushed, turn on the light and then take a photo.
A `DataStore` implementation can be optionally set to send each module result to a backend storage. New data stores can be
created by sub-classing `DataStore`.
```python
BaseModule.datastore = DynamoDBDataStore(table='house_data')
```See [rpi_automator_web](https://github.com/raviles/rpi_automator_web) for DynamoDB setup and data visualizer.
**2) Using a configuration file**
```javascript
{
"datastore" : "DynamoDBDataStore","modules" : [
{
"type" : "modules/PICamera",
"name" : "piCam1",
"cron" : "*/15 * * * *",
"enabled" : true
},
{
"type" : "modules/S3Uploader",
"bucket_name" : "my-cam-images",
"name" : "s3",
"subscribed_to" : ["piCam1"],
"enabled" : true
},
{
"type" : "modules/TempHumiditySensor",
"name" : "temp1",
"use_fahrenheit" : true,
"cron" : "*/1 * * * *",
"enabled" : true
},
{
"type" : "modules/RelaySwitch",
"name" : "light",
"cron" : "0 7 * * *",
"duration": 43200,
"pin" : 18,
"value" : 1,
"enabled" : true
},
{
"type" : "ButtonDetector",
"name" : "wateringButton1",
"enabled" : true,
"pin" : 28
},
{
"type" : "RelaySwitch",
"name" : "waterPump1",
"duration": 10,
"pin" : 20,
"value" : true,
"value_toggle" : false,
"subscribed_to" : ["wateringButton1"],
"enabled" : true
}
]
}
```
The configuration file above will automate the following actions:>Every 15 minutes, take a photo using the attached camera module and upload to S3.
>Every minute, read from a DHT22 temperature & humidity sensor.
>At 7am each day, enable the attached relay power switch (via pin 18) to turn on a light for 12 hours.
>Run the attached water pump (waterPump1) for 10 seconds when the watering button (wateringButton1) is pressed.
In each case, result data will be sent to DynamoDB
Run via:
```commandline
rpi_automator --config /
```## Available Modules
- [PICamera](rpi_automator/modules/PICamera.py): V2 Raspberry PI camera module
- [ButtonDetector](rpi_automator/modules/ButtonDetector.py): Basic push button
- [CV2Camera](rpi_automator/modules/CV2Camera.py): USB-based web cam
- [RelaySwitch](rpi_automator/modules/RelaySwitch.py): Relay switch controlling power to a connected device
- [TempHumiditySensor](rpi_automator/modules/TempHumiditySensor.py): Reads data from a DHT22 temperature/humidity sensor
- [VeSyncOutlet](rpi_automator/modules/VeSyncOutlet.py): Controls [Etekcity/VeSync](https://smile.amazon.com/Etekcity-Voltson-Outlet-Monitoring-Required/dp/B074GVPYPY) smart outlets
- [S3Uploader](rpi_automator/modules/S3Uploader.py): Modules that generate files can return LocalFileData and get
uploaded to an S3 bucketMultiple instances of each module can be configured for different purposes e.g. several instances of `RelaySwitch`
for different lights, each operating on their own GPIO pin.## Custom Modules
Create new modules by sub-classing [`modules.BaseModule`](rpi_automator/modules/BaseModule.py). The directory
containing the source code should be added to $PYTHONPATH (or `sys.path`).Custom datastores can also be created by subclassing [`datastores.DataStore`](rpi_automator.datastores.DataStore.py).
## Running Tests
```commandline
cd rpi_automator
export PYTHONPATH=.
python -m unittest tests.EventControllerTests.EventControllerTests
```