Implement DALI Bridge Engine and Model Management
- Added `bridge.cpp` to handle DALI bridge operations including model management, command execution, and response formatting. - Introduced `bridge_model.cpp` for defining bridge models, value transformations, and JSON serialization/deserialization. - Created `bridge_provisioning.cpp` for managing bridge configuration storage and retrieval using NVS on ESP platform. - Enhanced `gateway_cloud.cpp` to integrate DALI bridge requests and responses with cloud communication. - Introduced `modbus_bridge.cpp` to handle Modbus-specific operations and register management. - Implemented utility functions for converting between DaliValue and cJSON formats. - Added error handling and metadata management in bridge responses.
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
#pragma once
|
||||
|
||||
#include "model_value.hpp"
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
enum class BridgeProtocolKind {
|
||||
unknown = 0,
|
||||
mqtt = 1,
|
||||
modbus = 2,
|
||||
bacnet = 3,
|
||||
};
|
||||
|
||||
enum class BridgeObjectType {
|
||||
unknown = 0,
|
||||
holdingRegister = 1,
|
||||
inputRegister = 2,
|
||||
coil = 3,
|
||||
discreteInput = 4,
|
||||
analogValue = 5,
|
||||
analogOutput = 6,
|
||||
binaryValue = 7,
|
||||
binaryOutput = 8,
|
||||
multiStateValue = 9,
|
||||
};
|
||||
|
||||
enum class BridgeOperation {
|
||||
unknown = 0,
|
||||
send = 1,
|
||||
sendExt = 2,
|
||||
query = 3,
|
||||
setBrightness = 4,
|
||||
setBrightnessPercent = 5,
|
||||
on = 6,
|
||||
off = 7,
|
||||
recallMaxLevel = 8,
|
||||
recallMinLevel = 9,
|
||||
setColorTemperature = 10,
|
||||
getBrightness = 11,
|
||||
getStatus = 12,
|
||||
getColorTemperature = 13,
|
||||
getColorStatus = 14,
|
||||
getEmergencyLevel = 15,
|
||||
getEmergencyStatus = 16,
|
||||
getEmergencyFailureStatus = 17,
|
||||
startEmergencyFunctionTest = 18,
|
||||
stopEmergencyTest = 19,
|
||||
};
|
||||
|
||||
enum class BridgeValueEncoding {
|
||||
none = 0,
|
||||
integer = 1,
|
||||
percentage = 2,
|
||||
kelvin = 3,
|
||||
};
|
||||
|
||||
struct BridgeValueTransform {
|
||||
double scale = 1.0;
|
||||
double offset = 0.0;
|
||||
std::optional<int> clampMin;
|
||||
std::optional<int> clampMax;
|
||||
|
||||
static BridgeValueTransform fromJson(const DaliValue::Object* json);
|
||||
DaliValue::Object toJson() const;
|
||||
int apply(double raw) const;
|
||||
};
|
||||
|
||||
struct BridgeExternalPoint {
|
||||
std::string network;
|
||||
std::string device;
|
||||
BridgeObjectType objectType = BridgeObjectType::unknown;
|
||||
std::optional<int> objectInstance;
|
||||
std::optional<int> registerAddress;
|
||||
std::optional<int> bitIndex;
|
||||
std::string property;
|
||||
|
||||
static BridgeExternalPoint fromJson(const DaliValue::Object* json);
|
||||
DaliValue::Object toJson() const;
|
||||
};
|
||||
|
||||
struct BridgeDaliTarget {
|
||||
std::optional<int> shortAddress;
|
||||
std::optional<int> rawAddress;
|
||||
std::optional<int> rawCommand;
|
||||
|
||||
static BridgeDaliTarget fromJson(const DaliValue::Object* json);
|
||||
DaliValue::Object toJson() const;
|
||||
};
|
||||
|
||||
struct BridgeModel {
|
||||
std::string id;
|
||||
std::string name;
|
||||
BridgeProtocolKind protocol = BridgeProtocolKind::unknown;
|
||||
BridgeExternalPoint external;
|
||||
BridgeDaliTarget dali;
|
||||
BridgeOperation operation = BridgeOperation::unknown;
|
||||
BridgeValueEncoding valueEncoding = BridgeValueEncoding::integer;
|
||||
BridgeValueTransform valueTransform;
|
||||
DaliValue::Object metadata;
|
||||
|
||||
static BridgeModel fromJson(const DaliValue::Object& json);
|
||||
DaliValue::Object toJson() const;
|
||||
std::string displayName() const;
|
||||
};
|
||||
|
||||
const char* bridgeProtocolKindToString(BridgeProtocolKind kind);
|
||||
BridgeProtocolKind bridgeProtocolKindFromString(const std::string& value);
|
||||
|
||||
const char* bridgeObjectTypeToString(BridgeObjectType type);
|
||||
BridgeObjectType bridgeObjectTypeFromString(const std::string& value);
|
||||
|
||||
const char* bridgeOperationToString(BridgeOperation operation);
|
||||
BridgeOperation bridgeOperationFromString(const std::string& value);
|
||||
|
||||
const char* bridgeValueEncodingToString(BridgeValueEncoding encoding);
|
||||
BridgeValueEncoding bridgeValueEncodingFromString(const std::string& value);
|
||||
Reference in New Issue
Block a user