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:
Tony
2026-04-22 10:14:42 +08:00
parent ec5f36b581
commit 21afc6b942
22 changed files with 2045 additions and 35 deletions
+117
View File
@@ -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);