#pragma once #include "model_value.hpp" #include #include enum class BridgeProtocolKind { unknown = 0, mqtt = 1, modbus = 2, bacnet = 3, }; enum class BridgeObjectType { unknown = 0, holdingRegister = 1, inputRegister = 2, coil = 3, discreteInput = 4, analogInput = 10, analogValue = 5, analogOutput = 6, binaryInput = 11, binaryValue = 7, binaryOutput = 8, multiStateInput = 12, multiStateValue = 9, multiStateOutput = 13, }; 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 clampMin; std::optional 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 objectInstance; std::optional registerAddress; std::optional bitIndex; std::string property; static BridgeExternalPoint fromJson(const DaliValue::Object* json); DaliValue::Object toJson() const; }; struct BridgeDaliTarget { BridgeDaliTargetKind kind = BridgeDaliTargetKind::shortAddress; std::optional shortAddress; std::optional groupAddress; std::optional rawAddress; std::optional rawCommand; static BridgeDaliTarget fromJson(const DaliValue::Object* json); DaliValue::Object toJson() const; std::optional 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);