Refactor DALI component: remove BACnet bridge support and update related documentation
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -1,65 +0,0 @@
|
||||
#include "bacnet_bridge.hpp"
|
||||
|
||||
#include <utility>
|
||||
|
||||
DaliBacnetBridge::DaliBacnetBridge(DaliBridgeEngine& engine) : engine_(engine) {}
|
||||
|
||||
void DaliBacnetBridge::setConfig(const BacnetBridgeConfig& config) { config_ = config; }
|
||||
|
||||
const BacnetBridgeConfig& DaliBacnetBridge::config() const { return config_; }
|
||||
|
||||
DaliBridgeResult DaliBacnetBridge::handlePropertyWrite(BridgeObjectType objectType,
|
||||
int objectInstance,
|
||||
const std::string& property,
|
||||
const DaliValue& value) const {
|
||||
const auto binding = findObject(objectType, objectInstance, property);
|
||||
DaliBridgeRequest request;
|
||||
request.sequence = "bacnet-" + std::to_string(objectInstance);
|
||||
request.value = value;
|
||||
|
||||
if (!binding.has_value()) {
|
||||
DaliBridgeResult result;
|
||||
result.sequence = request.sequence;
|
||||
result.error = "unmapped bacnet object";
|
||||
return result;
|
||||
}
|
||||
|
||||
request.modelID = binding->modelID;
|
||||
return engine_.execute(request);
|
||||
}
|
||||
|
||||
std::optional<BacnetObjectBinding> DaliBacnetBridge::findObject(BridgeObjectType objectType,
|
||||
int objectInstance,
|
||||
const std::string& property) const {
|
||||
for (const auto& model : engine_.listModels()) {
|
||||
if (model.protocol != BridgeProtocolKind::bacnet) {
|
||||
continue;
|
||||
}
|
||||
if (model.external.objectType != objectType) {
|
||||
continue;
|
||||
}
|
||||
if (model.external.objectInstance.value_or(-1) != objectInstance) {
|
||||
continue;
|
||||
}
|
||||
if (!model.external.property.empty() && model.external.property != property) {
|
||||
continue;
|
||||
}
|
||||
return BacnetObjectBinding{model.id, objectType, objectInstance, property,
|
||||
model.operation, model.dali};
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::vector<BacnetObjectBinding> DaliBacnetBridge::describeObjects() const {
|
||||
std::vector<BacnetObjectBinding> bindings;
|
||||
for (const auto& model : engine_.listModels()) {
|
||||
if (model.protocol != BridgeProtocolKind::bacnet || !model.external.objectInstance.has_value()) {
|
||||
continue;
|
||||
}
|
||||
bindings.push_back(BacnetObjectBinding{model.id, model.external.objectType,
|
||||
model.external.objectInstance.value(),
|
||||
model.external.property, model.operation,
|
||||
model.dali});
|
||||
}
|
||||
return bindings;
|
||||
}
|
||||
@@ -101,26 +101,6 @@ esp_err_t readString(nvs_handle_t handle, const char* key, std::string* value) {
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
std::optional<BacnetBridgeConfig> bacnetFromJson(const DaliValue* value) {
|
||||
if (value == nullptr || value->asObject() == nullptr) {
|
||||
return std::nullopt;
|
||||
}
|
||||
const auto& json = *value->asObject();
|
||||
BacnetBridgeConfig config;
|
||||
config.deviceInstance = static_cast<uint32_t>(getObjectInt(json, "deviceInstance").value_or(4194303));
|
||||
config.localAddress = getObjectString(json, "localAddress").value_or("");
|
||||
config.udpPort = static_cast<uint16_t>(getObjectInt(json, "udpPort").value_or(47808));
|
||||
return config;
|
||||
}
|
||||
|
||||
DaliValue bacnetToJson(const BacnetBridgeConfig& config) {
|
||||
DaliValue::Object out;
|
||||
out["deviceInstance"] = static_cast<int64_t>(config.deviceInstance);
|
||||
out["localAddress"] = config.localAddress;
|
||||
out["udpPort"] = static_cast<int>(config.udpPort);
|
||||
return DaliValue(std::move(out));
|
||||
}
|
||||
|
||||
esp_err_t saveJsonObject(const std::string& nvs_namespace, const char* key,
|
||||
const DaliValue::Object& object) {
|
||||
if (key == nullptr || key[0] == '\0') {
|
||||
@@ -227,7 +207,6 @@ BridgeRuntimeConfig BridgeRuntimeConfig::fromJson(const DaliValue::Object& json)
|
||||
}
|
||||
}
|
||||
}
|
||||
config.bacnet = bacnetFromJson(getObjectValue(json, "bacnet"));
|
||||
if (const auto* metadata = getObjectValue(json, "meta")) {
|
||||
if (const auto* object = metadata->asObject()) {
|
||||
config.metadata = *object;
|
||||
@@ -244,7 +223,6 @@ DaliValue::Object BridgeRuntimeConfig::toJson() const {
|
||||
modelsValue.emplace_back(model.toJson());
|
||||
}
|
||||
out["models"] = std::move(modelsValue);
|
||||
if (bacnet.has_value()) out["bacnet"] = bacnetToJson(bacnet.value());
|
||||
if (!metadata.empty()) out["meta"] = metadata;
|
||||
return out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user