Files
dali_cpp/include/bridge_model.hpp
T

130 lines
3.3 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 BridgeDaliTargetKind {
shortAddress = 0,
group = 1,
broadcast = 2,
};
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,
startEmergencyDurationTest = 20,
};
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 {
BridgeDaliTargetKind kind = BridgeDaliTargetKind::shortAddress;
std::optional<int> shortAddress;
std::optional<int> groupAddress;
std::optional<int> rawAddress;
std::optional<int> rawCommand;
static BridgeDaliTarget fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
std::optional<int> logicalAddress() 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* bridgeDaliTargetKindToString(BridgeDaliTargetKind kind);
BridgeDaliTargetKind bridgeDaliTargetKindFromString(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);