succulent
A lightweight framework for collecting and processing data from HTTP POST requests
🔍 Detailed Insights • 📦 Installation • 🐳 Container • 🚀 Usage • 🔧 Configuration • 📄 Cite us • 🔑 License • 🫂 Contributors
Do you ever find it challenging and tricky to send sensor measurements 📏, data 📊, or GPS positions from embedded devices 📱, microcontrollers, and smartwatches to a central server? 📡 Setting up the primary data collection scripts can be a time-consuming ⏳ process, involving selecting a protocol, framework, API, and testing them out. Moreover, these scripts are often tailored for specific tasks, making them difficult to adapt to different scenarios.
But fear not! Introducing succulent 🌵, a pure Python framework that simplifies the configuration, management, collection, and preprocessing of data collected via POST requests. This framework draws inspiration from real-world data collection challenges in smart agriculture 🧠🌿, specifically plant monitoring using ESP32 devices. The main goal behind succulent is to streamline the process of configuring various data parameters and provide a range of useful functions for data transformations. By leveraging succulent, you can set up your entire data collection endpoint within minutes, freeing you from the hassle of dealing with server-side scripts. 🚀🔧
- Free software: MIT license
- Documentation: https://succulent.readthedocs.io/en/latest
- Python versions: 3.8.x, 3.9.x, 3.10.x, 3.11.x, 3.12.x, 3.13.x
- Tested OS: Windows, Ubuntu, Fedora, Alpine, Arch, macOS. However, that does not mean it does not work on others
🔍 Detailed Insights
The current version of succulent comes packed with exciting features, including, but not limited to:
- Hassle-free generation of request URLs for seamless data collection 🌐
- Effortless data retrieval from POST requests 📥
- Versatile data storage options, such as CSV, JSON, SQLite, XML, and even images 🗂️📊🖼️
- Customisable boundaries for collected data, allowing you to set minimum and maximum thresholds ⚙️
With succulent, the process of collecting, managing, and preprocessing data becomes a breeze, empowering you to focus on what truly matters—gaining valuable insights from your embedded devices, microcontrollers, and smartwatches. ⌚ So why waste precious time? ⏳ Dive into the world of succulent and unlock the true potential of your data! 💪📈
📦 Installation
pip
To install succulent with pip, use:
pip install succulent
Alpine Linux
To install succulent on Alpine Linux, use:
$ apk add py3-succulent
Arch Linux
To install succulent on Arch Linux, use an AUR helper:
$ yay -Syyu python-succulent
Fedora Linux
To install succulent on Fedora, use:
$ dnf install python3-succulent
🐳 Container
Create a docker-compose.yml file with the following content in the root directory:
version: '3.8'
services:
app:
image: codeberg.org/firefly-cpp/succulent:v6
ports:
- "8080:8080"
volumes:
- ./run.py:/succulent-app/run.py
- ./configuration.yml:/succulent-app/configuration.yml
environment:
- GUNICORN_WORKERS=2
Next create a configuration.yml file in the root directory. Here's an example of a configuration file:
data:
- name: 'temperature'
- name: 'humidity'
- name: 'light'
results:
- enable: true
- export: true
timestamp: true
More information regarding the configuration file and its settings can be found in the configuration section.
Then create a Python file named run.py with the following content in the root directory:
from succulent.api import SucculentAPI
api = SucculentAPI(config='configuration.yml', format='csv')
# Flask app instance, called by gunicorn
app = api.app
Once you have set up the configuration file and the Python file, build the Docker image with the following command:
docker compose build
Finally, run the Docker container with the following command:
docker compose up
🚀 Usage
Example
from succulent.api import SucculentAPI
api = SucculentAPI(host='0.0.0.0', port=8080, config='configuration.yml', format='csv')
api.start()
🔧 Configuration
Data collection
In the root directory, create a configuration.yml file and define the following:
data:
- name: # Measure name
min: # Minimum value (optional)
max: # Maximum value (optional)
To collect images, create a configuration.yml file in the root directory and define the following:
data:
- key: # Key in POST request
To store data collection timestamps, define the following setting in the configuration.yml file in the root directory:
timestamp: true # false by default
To access the URL for data collection, send a GET request (or navigate) to http://localhost:8080/measure.
To restrict access to the collected data, define the following setting in the configuration.yml file in the root directory:
password: 'password' # Password for data access
To store data using a password, append the password parameter to the request URL: ?password=password.
Data access
To access data via the Succulent API, define the following setting in the configuration.yml file in the root directory:
results:
- enable: true # false by default
To access the collected data, send a GET request (or navigate) to http://localhost:8080/data. To access password-protected data, append the password parameter to the request URL: ?password=password.
Data export
To export the data, enable the export option in the configuration file:
results:
- export: true # false by default
To export the data, send a GET request (or navigate) to http://localhost:8080/export. To export password-protected data, append the password parameter to the request URL: ?password=password. The data will be downloaded in the format specified in the configuration file.
📄 Cite us
Fister Jr., Iztok, and Tadej Lahovnik. Succulent. 0.4.0, doi:10.5281/zenodo.10402365.
🔑 License
This package is distributed under the MIT License. This license can be found online at http://www.opensource.org/licenses/MIT.
Disclaimer
This framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it at your own risk!
🫂 Contributors
Thanks goes to these wonderful people (emoji key):
Tadej Lahovnik 💻 🐛 🤔 📖 ✅ |
Ayan Das 💻 ⚠️ |
Iztok Fister Jr. 💻 🤔 🧑🏫 |
Oromion 🐛 📦 |
rhododendrom 🎨 |
Zala Lahovnik 📖 |
This project follows the all-contributors specification. Contributions of any kind welcome!
Metadata
Release files for succulent 0.4.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| succulent-0.4.6.tar.gz | 122.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| succulent-0.4.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 241.0 kB
Release files / succulent-0.4.6.tar.gz
| Download URL | succulent-0.4.6.tar.gz |
|---|---|
| Size | 122.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e679bdf9507b904f3663cf80d97188eff4cbd3248c6b9b8e78d19134de947a96
|
|
BLAKE2b-256 checksum How to use checksums |
b9a684c9e460503478cd505cbe3e2368174252b5180fccb8fbc61023677ce815
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.1 CPython/3.14.5 Linux/7.0.12-201.fc44.x86_64
|
Release files / succulent-0.4.6-py3-none-any.whl
| Download URL | succulent-0.4.6-py3-none-any.whl |
|---|---|
| Size | 118.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ec76aca2283f417087a56fadd60b8b60364ad3261c3c6955dd28af6a0d67f95
|
|
BLAKE2b-256 checksum How to use checksums |
f0586ca201cd45a3e7bc9b92cf82d46fc012a21e800487a91aa855cc1705b2c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.1 CPython/3.14.5 Linux/7.0.12-201.fc44.x86_64
|