/// <summary> /// Creates and/or updates the node for the Device. Nodes are somewhat virtual in Homie, you can create them at any time when build your Device tree, as long as <see cref="Initialize(PublishToTopicDelegate, SubscribeToTopicDelegate)"/> is not called yet. /// </summary> public void UpdateNodeInfo(string nodeId, string friendlyName, string type) { if (DeviceFactory.ValidateTopicLevel(nodeId, out var validationMessage) == false) { throw new ArgumentException(validationMessage, nameof(nodeId)); } // Trying to find if that's an existing node. NodeInfo nodeToUpdate = null; for (var i = 0; i < _nodes.Count; i++) { var currentNode = (NodeInfo)_nodes[i]; if (currentNode.Id == nodeId) { nodeToUpdate = currentNode; } } // If not found - add new. Otherwise - update. if (nodeToUpdate == null) { nodeToUpdate = new NodeInfo() { Id = nodeId, Name = friendlyName, Type = type }; _nodes.Add(nodeToUpdate); } else { nodeToUpdate.Name = friendlyName; nodeToUpdate.Type = type; } }
/// <summary> /// Creates a host color property. /// </summary> public HostColorProperty CreateHostColorProperty(PropertyType propertyType, string nodeId, string propertyId, string friendlyName, ColorFormat colorFormat = ColorFormat.Rgb) { if (DeviceFactory.ValidateTopicLevel(nodeId, out var validationMessage) == false) { throw new ArgumentException(validationMessage, nameof(nodeId)); } if (DeviceFactory.ValidateTopicLevel(propertyId, out var validationMessage2) == false) { throw new ArgumentException(validationMessage2, nameof(nodeId)); } UpdateNodePropertyMap(nodeId, propertyId); var createdProperty = new HostColorProperty(propertyType, $"{nodeId}/{propertyId}", friendlyName, colorFormat, ""); _properties.Add(createdProperty); return(createdProperty); }
/// <summary> /// Creates a host text property. /// </summary> public HostTextProperty CreateHostTextProperty(PropertyType propertyType, string nodeId, string propertyId, string friendlyName, string initialValue = "", string unit = "") { if (DeviceFactory.ValidateTopicLevel(nodeId, out var validationMessage) == false) { throw new ArgumentException(validationMessage, nameof(nodeId)); } if (DeviceFactory.ValidateTopicLevel(propertyId, out var validationMessage2) == false) { throw new ArgumentException(validationMessage2, nameof(nodeId)); } UpdateNodePropertyMap(nodeId, propertyId); var createdProperty = new HostTextProperty(propertyType, $"{nodeId}/{propertyId}", friendlyName, initialValue, "", unit); _properties.Add(createdProperty); return(createdProperty); }