# EdgeModelKit: Sensor Data Acquisition and Logging Library

EdgeModelKit is a Python library developed by **EdgeNeuron**, designed to simplify sensor data acquisition, logging, and real-time processing for IoT devices. It works seamlessly with the **DataLogger script** from the [EdgeNeuron Arduino library](https://github.com/ConsentiumIoT/EdgeNeuron), and now supports **HTTP-based acquisition** for devices that expose REST APIs.

***

## **Features**

* **Serial Communication**: Supports data acquisition over serial ports with robust error handling.
* **Flexible Data Fetching**: Retrieve sensor data as Python lists or NumPy arrays.
* **Customizable Logging**: Log sensor data into CSV files with optional timestamps and counters.
* **Class-Based Organization**: Log data with class labels to prepare datasets for machine learning tasks.
* **Error Handling**: Gracefully handles data decoding errors and missing keys in sensor data packets.

***

## **Usage Prerequisites**

This library is designed to work with the **DataLogger script** available in the [EdgeNeuron Arduino library](https://github.com/ConsentiumIoT/EdgeNeuron). The DataLogger script configures your Arduino-based IoT device to send structured JSON sensor data over a serial connection.

Before using EdgeModelKit, ensure:

1. Your Arduino device is programmed with the **DataLogger script** from the [EdgeNeuron Arduino library](https://github.com/ConsentiumIoT/EdgeNeuron).
2. The device is connected to your system via a serial interface.

***

## **Installation**

Install EdgeModelKit using pip:

```bash
pip install edgemodelkit  
```

***

## **Quick Start**

### **1. Initialize the DataFetcher**

```python
from edgemodelkit import DataFetcher  

# Initialize the DataFetcher with the desired serial port and baud rate  
fetcher = DataFetcher(serial_port="COM3", baud_rate=9600)  
```

### **2. Fetch Sensor Data**

```python
# Fetch data as a Python list  
sensor_data = fetcher.fetch_data(return_as_numpy=False)  
print("Sensor Data:", sensor_data)  

# Fetch data as a NumPy array  
sensor_data_numpy = fetcher.fetch_data(return_as_numpy=True)  
print("Sensor Data (NumPy):", sensor_data_numpy)  
```

### **3. Log Sensor Data**

```python
# Log 10 samples to a CSV file with timestamp and count columns  
fetcher.log_sensor_data(class_label="ClassA", num_samples=10, add_timestamp=True, add_count=True)  
```

***

## **CSV Logging Details**

The CSV file is generated automatically based on the sensor name (e.g., `TemperatureSensor_data_log.csv`) and contains the following:

* **Timestamp**: (Optional) Records the time when the data was logged.
* **Sample Count**: (Optional) A sequential counter for each data sample.
* **Data Columns**: Each element in the sensor data array is stored in separate columns (e.g., `data_value_1`, `data_value_2`, ...).

The data is saved under a folder named `Dataset`, with subfolders organized by `class_label` (if specified).

***

## **Real-Time Data Processing Example**

```python
from edgemodelkit import DataFetcher  

fetcher = DataFetcher(serial_port="COM3", baud_rate=9600)  

try:  
    while True:  
        # Fetch data as NumPy array  
        sensor_data = fetcher.fetch_data(return_as_numpy=True)  
        print("Received Data:", sensor_data)  

        # Perform custom processing (e.g., feed to a TensorFlow model)  
        # prediction = model.predict(sensor_data)  
        # print("Prediction:", prediction)  
finally:  
    fetcher.close_connection()  
```

***

## **Dependencies**

EdgeModelKit requires the following Python packages:

* `numpy`
* `pandas`
* `pyserial`
* `json`

Install dependencies with:

```bash
pip install numpy pandas pyserial json  
```

***

## **Contributing**

We welcome contributions to EdgeModelKit! Feel free to submit bug reports, feature requests, or pull requests on our [GitHub repository](https://github.com/ConsentiumIoT/edgemodelkit).

***

## **License**

EdgeModelKit is licensed under the MIT License. See the LICENSE file for details.

***

## **Support**

For support and inquiries, contact us at **<support@edgeneuronai.com>** or visit our [GitHub repository](https://github.com/ConsentiumIoT/edgemodelkit).

***

## **About EdgeNeuron**

EdgeNeuron is a pioneer in edge computing solutions, enabling developers to build intelligent IoT applications with state-of-the-art tools and libraries. Learn more at [edgeneuronai.com](https://edgeneuronai.com).

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.consentiumiot.com/readme/edgemodelkit-sensor-data-acquisition-and-logging-library.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
