# DC3 API Data
## Overview
`dc3-api-data` provides gRPC service definitions for device data collection and management in the IoT DC3 platform. It
defines interfaces for querying real-time device point values
and historical data retrieval.
## Module Information
- **Group ID**: io.github.pnoker
- **Artifact ID**: dc3-api-data
- **Version**: 2026.5.22
- **Package**: `io.github.pnoker.api.center.data`
## Proto Definitions
### point_value.proto
Defines point value query RPC calls and data structures for device data collection.
**Service**: `PointValueApi`
- `GetLastValue` - Query the latest collected value of a device point
- `ListHistoryValues` - Query historical values of a device point
- `ReadCommand` - Trigger a read command for a device point
- `WriteCommand` - Trigger a write command for a device point
**Key Messages**:
- `GrpcPointValueQuery` - Request wrapper for point value queries (device_id, point_id, tenant_id)
- `GrpcRPointValueDTO` - Response wrapper containing point value information
- `GrpcPointValueDTO` - Point value data structure
### event_history.proto
Defines device event history RPC calls.
**Service**: `EventHistoryApi`
- `ReportEvent` - Report a device event
- `GetByRecordId` - Query an event history record by record ID
- `ListByPage` - Query event history with pagination support
### command_history.proto
Defines device command history RPC calls.
**Service**: `CommandHistoryApi`
- `CallCommand` - Issue a command to a device
- `GetByRecordId` - Query a command history record by record ID
- `ListByPage` - Query command history with pagination support
### status_health.proto
Defines device/driver status and system health RPC calls.
**Service**: `StatusHealthApi`
- `DeviceStatusesByIds` - Query device statuses by device IDs
- `DeviceStatusesByProfileId` - Query device statuses by profile ID
- `DriverStatusesByIds` - Query driver statuses by driver IDs
- `DriverDeviceStatusSummary` - Summarize device statuses under a driver
- `SystemHealth` - Query overall system health
## Data Models
### Point Value Model
The `GrpcPointValueDTO` represents collected data from device points:
```protobuf
message GrpcPointValueDTO {
int64 id = 1; // Point value record ID
int64 device_id = 2; // Source device identifier
int64 point_id = 3; // Point identifier
string value = 4; // Processed/converted value
string raw_value = 5; // Raw value from device
int64 create_time = 6; // Storage timestamp
}
```
### Field Descriptions
| Field | Type | Description |
|---------------|--------|------------------------------------------------------|
| `id` | int64 | Unique identifier for the point value record |
| `device_id` | int64 | ID of the device that generated the data |
| `point_id` | int64 | ID of the point (tag) within the device |
| `value` | string | Processed value after data conversion and formatting |
| `raw_value` | string | Original raw value collected from the device |
| `create_time` | int64 | Unix timestamp when data was stored (milliseconds) |
## Dependencies
This module depends on common proto definitions:
- `api/common/r.proto` - Common response wrapper (GrpcR)
## Usage
### 1. Add Dependency
```xml
io.github.pnoker
dc3-api-data
2026.5.22
```
### 2. Import Proto Files
```protobuf
import "api/center/data/point_value.proto";
```
### 3. Implement Service
```java
public class PointValueServiceImpl extends PointValueApiGrpc.PointValueApiImplBase {
@Override
public void getLastValue(GrpcPointValueQuery request,
StreamObserver responseObserver) {
// Query latest point value from database
// Return GrpcRPointValueDTO with point value data
}
}
```
### 4. Query Example
```java
// Build query request
GrpcPointValueQuery query = GrpcPointValueQuery.newBuilder()
.setDeviceId(12345L)
.setPointId(67890L)
.setTenantId(1L)
.build();
// Call service
GrpcRPointValueDTO response = pointValueApi.getLastValue(query);
// Extract data
if(response.
getResult().
getOk()){
GrpcPointValueDTO pointValue = response.getData();
String value = pointValue.getValue();
String rawValue = pointValue.getRawValue();
long timestamp = pointValue.getCreateTime();
}
```
## API Features
### Real-Time Data Access
- Query latest point values by device and point IDs
- Support for both raw and processed values
- Tenant-scoped data access
### Data Processing
- **Raw Value**: Original data read from the device without processing
- **Processed Value**: Converted and formatted value after applying:
- Unit conversion
- Scale factors
- Precision formatting
- Data type conversion
### Data Flow
```
Device → Driver → Data Collection → Time Series DB → PointValueApi
```
## Use Cases
### 1. Real-Time Monitoring
```java
// Monitor device point value in real-time
GrpcPointValueDTO latestValue = getLastValue(deviceId, pointId);
displayValue(latestValue.getValue());
```
### 2. Data Analysis
```java
// Compare raw vs processed values
String raw = pointValue.getRawValue();
String processed = pointValue.getValue();
analyzeConversion(raw, processed);
```
### 3. Time Series Operations
```java
// Use timestamp for time-based queries
long timestamp = pointValue.getCreateTime();
Date collectionTime = new Date(timestamp);
```
## Performance Considerations
- **Query Optimization**: Always include tenant_id for proper data isolation
- **Caching**: Consider caching recent point values for high-frequency queries
- **Time Series Store**: This API queries the time-series store through `dc3-common-repository` (PostgreSQL with the
TimescaleDB extension)
- **Data Volume**: Point value queries can generate high traffic in large-scale deployments
## Integration Points
### Driver Services
Drivers write point values to the data layer:
```
Driver Service → Device SDK → Point Collection → Data Store
```
### Manager Service
Manager service provides device/point metadata:
```
PointValueApi → ManagerApi (get point info) → Return value with metadata
```
### Application Layer
Upper applications consume point value data for:
- Real-time dashboards
- Data analytics
- Alarm monitoring
- Historical data queries
## Data Retention
Point values are typically stored in time-series databases with:
- **High-frequency data**: Raw values for immediate processing
- **Aggregated data**: Processed values for long-term storage
- **Retention policies**: Configurable by tenant or device type
## Build Instructions
```bash
# Build the module
mvn -s ../../.mvn/settings.xml clean package
# Install to local repository
mvn -s ../../.mvn/settings.xml clean install
```
## Related Modules
- `dc3-api-driver` - Driver interface for point data collection
- `dc3-api-manager` - Device and point metadata management
- `dc3-common-data` - Data models and DTOs
## License
Copyright 2016-present the IoT DC3 original author or authors.
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)