#pragma once #include "model_value.hpp" #include #include enum class BridgeProtocolKind { unknown = 0, mqtt = 1, modbus = 2, bacnet = 3, knx = 4, }; 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, setColorTemperatureRaw = 21, setColourXY = 22, setColourRGB = 23, setTemporaryColourTemperature = 24, setTemporaryColourXY = 25, setTemporaryRGBDimLevels = 26, setTemporaryColourMask = 27, activateTemporaryColour = 28, copyReportToTemporary = 29, storeDt8SceneSnapshot = 30, storeDt8PowerOnLevelSnapshot = 31, storeDt8SystemFailureLevelSnapshot = 32, getDt1Snapshot = 33, getDt4Snapshot = 34, getDt5Snapshot = 35, getDt6Snapshot = 36, getDt8StatusSnapshot = 37, getGroupMask = 38, setGroupMask = 39, getSceneLevel = 40, setSceneLevel = 41, removeSceneLevel = 42, getSceneMap = 43, getAddressSettings = 44, setAddressSettings = 45, searchAddressRange = 46, allocateAllShortAddresses = 47, resetAndAllocateShortAddresses = 48, stopAddressAllocation = 49, batch = 50, }; 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);