21afc6b942
- 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.
117 lines
2.8 KiB
C++
117 lines
2.8 KiB
C++
#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); |