Metadata-Version: 2.1
Name: soil-power-sensor-protobuf
Version: 2.0.0
Summary: Python package for encoding/decoding measurement data from the Soil Power Sensor
Project-URL: Homepage, https://github.com/jlab-sensing/soil-power-sensor-firmware
Project-URL: Issues, https://github.com/jlab-sensing/soil-power-sensor-firmware/issues
Author-email: John Madden <jmadden173@pm.me>
License-File: LICENSE
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.8
Requires-Dist: protobuf
Description-Content-Type: text/markdown

# Soil Power Sensor Python Protobuf Bindings {#protobuf-python}

The soil power sensor protobuf protocol is implemented as a Python package that allows for `Measurement` messages to be decoded into a dictionary and `Response` messages to be encoded. The generated files from protobuf are also accessible for more complex use cases.


## Installation

Use the following to install the `soil-power-sensor-protobuf` package with `pip`:

```bash
pip install soil-power-sensor-protobuf
```

## Usage

The following example code demonstrates decoding the measurement message and encoding a response.

```python
from soil_power_sensor_protobuf import encode, decode

# get data encoded by the soil power sensor
data = ...

meas_dict = decode(data)

# process data
...

# send response
resp_str = encode(success=True)
```

The formatting of the dictionary depends on the type of measurement sent. The key `type` is included on all measurement types and can be used to determine the type of message. See the source `*.proto` files to get the full list of types to get the full list of types and keys. A list is provided in [Message Types](#message-types). The Python protobuf API uses camel case when naming keys. The key `ts` is in ISO 8601 format as a string.

## Message Types

Type `power`
```python
meas_dict = {
  "type": "power",
  "loggerId": ...,
  "cellId": ...,
  "ts": ...,
  "data": {
    "voltage": ...,
    "current": ...
  },
  "data_type": {
    "voltage": float,
    "voltage": float
  }
}
```

Type `teros12`
```python
meas_dict = {
  "type": "teros12",
  "loggerId": ...,
  "cellId": ...,
  "ts": ...,
  "data": {
    "vwcRaw": ...,
    "vwcAdj": ...,
    "temp": ...,
    "ec": ...
  },
  "data_type": {
    "vwcRaw": float,
    "vwcAdj": float,
    "temp": float,
    "ec": int
  }
}
```

## Testing

To run the package tests, create a virtual environment, install as an editable package, and run `unittest`.

```bash
python -m venv .venv
source .venv/bin/activate
pip install -e .
python -m unittest discover tests
```