87 lines
3.4 KiB
Markdown
87 lines
3.4 KiB
Markdown
# PID Controller Logging via MQTT
|
|
|
|
This document outlines the setup for logging PID controller data to an InfluxDB instance via MQTT and how to visualize this data in Grafana.
|
|
|
|
## Firmware MQTT Setup
|
|
|
|
The firmware is configured to send PID controller data (Setpoint, Process Value, and heating state) to an MQTT broker. This data is then picked up by a Telegraf instance, which forwards it to InfluxDB.
|
|
|
|
### Enabling the Feature
|
|
|
|
To enable MQTT logging, ensure the following line is present and not commented out in `cassandra-rc2/src/config.h`:
|
|
|
|
```c++
|
|
#define ENABLE_MQTT_LOGGING
|
|
```
|
|
|
|
### MQTT Configuration
|
|
|
|
The MQTT broker details are configured in `cassandra-rc2/src/PHApp-Mqtt.cpp`. You may need to change the `MQTT_BROKER` IP address to match your environment.
|
|
|
|
```c++
|
|
#define MQTT_BROKER "192.168.1.100" // Replace with your MQTT broker's IP address
|
|
#define MQTT_PORT 1883
|
|
```
|
|
|
|
### Data Format
|
|
|
|
The firmware sends data using the InfluxDB Line Protocol. The format is as follows:
|
|
|
|
- **Measurement:** `pid_controller`
|
|
- **Tags:**
|
|
- `controller_id`: (integer) The ID of the PID controller (e.g., 1, 2, ... 8).
|
|
- **Fields:**
|
|
- `sp`: (integer) The Setpoint value.
|
|
- `pv`: (integer) The Process Value.
|
|
- `heating`: (boolean) The heating state (`true` or `false`).
|
|
|
|
**Example Payload:**
|
|
|
|
```
|
|
pid_controller,controller_id=1 sp=150,pv=148,heating=true
|
|
```
|
|
|
|
This message is published to the topic `pid/controller/<id>`.
|
|
|
|
---
|
|
|
|
## Grafana: Adding InfluxDB Data Source
|
|
|
|
Follow these steps to connect your Grafana instance to the InfluxDB container.
|
|
|
|
1. **Navigate to Grafana:** Open your web browser and go to `http://localhost:3000`.
|
|
|
|
2. **Login:** Use the default credentials `admin` for both username and password, unless you have changed them. You will be prompted to change the password on first login.
|
|
|
|
3. **Go to Data Sources:**
|
|
* In the left-hand menu, hover over the **Configuration** (cog) icon.
|
|
* Click on **Data Sources**.
|
|
|
|
4. **Add Data Source:**
|
|
* Click the **"Add new data source"** button.
|
|
* Select **"InfluxDB"** from the list of time series databases.
|
|
|
|
5. **Configure the Connection:**
|
|
|
|
* **Name:** Give your data source a name, for example, `InfluxDB_PID`.
|
|
* **Query Language:** Select **Flux**.
|
|
* **URL:** Set the URL to `http://influxdb:8086`. Grafana and InfluxDB are in the same Docker network, so they can communicate using their service names.
|
|
* **Authentication:** Leave the "Basic auth" and "With credentials" toggles off.
|
|
* **Organization:** Enter `my-org`.
|
|
* **Token:** Enter `my-super-token`.
|
|
* **Default Bucket:** Enter `my-bucket`.
|
|
* **Min time interval:** `10s` (optional, but good practice to match the Telegraf flush interval).
|
|
|
|
The credentials and settings are derived from your `docker-compose.yaml` file:
|
|
|
|
- `DOCKER_INFLUXDB_INIT_USERNAME`: **admin**
|
|
- `DOCKER_INFLUXDB_INIT_PASSWORD`: **admin123**
|
|
- `DOCKER_INFLUXDB_INIT_ORG`: **my-org**
|
|
- `DOCKER_INFLUXDB_INIT_BUCKET`: **my-bucket**
|
|
- `DOCKER_INFLUXDB_INIT_ADMIN_TOKEN`: **my-super-token**
|
|
|
|
6. **Save & Test:**
|
|
* Click the **"Save & test"** button at the bottom of the page.
|
|
* You should see a green notification saying "Data source is working".
|
|
|
|
You are now ready to create dashboards and query your PID controller data from InfluxDB in Grafana. |