public KeyedCollection <ConfigEntry> GetButtonActivitySensor(DeviceDefinition device) { var buttons = _deviceTranslator.TranslateButtonDefinition(device); if (!buttons.Any()) { return(new KeyedCollection <ConfigEntry>()); } var lines = buttons.Select(i => $"is_state('{GetButtonEntityId(i.Item1,i.Item2,device)}', 'on')"); var entity = $@" # {device.Name} activity - platform: template sensors: {GetButtonActivitySensorId(device)}: friendly_name: {device.Name} value_template: > {{{{ {string.Join($"{Environment.NewLine} or ", lines)} }}}} ".Trim(); return(new KeyedCollection <ConfigEntry>() { { EntityType.BinarySensor, new ConfigEntry { Entity = entity, Customization = string.Empty } } }); }
public IReadOnlyCollection <FoldableRow> GenerateButtonList(IEnumerable <DeviceDefinition> devices) { var model = new List <FoldableRow>(); foreach (var device in devices) { var buttons = _deviceTranslator.TranslateButtonDefinition(device); if (!buttons.Any()) { continue; } model.Add(new FoldableRow { Entity = GetButtonActivityEntityId(device), Entities = buttons.Select(i => { string name; switch (i.Item2) { case ButtonType.Hold: case ButtonType.HoldAndRelease: name = i.Item1.HasValue ? $"Button {i.Item1} hold" : "Hold"; break; default: name = i.Item1.HasValue ? $"Button {i.Item1}" : "Push"; break; } return(new LovelaceEntity { Entity = GetButtonEntityId(i.Item1, i.Item2, device), Name = name, }); }).OrderBy(i => i.Entity) .ToArray(), }); } return(model); }
private IReadOnlyCollection <ConfigEntry> ProcessButtonDefinition(DeviceDefinition definition) { var configs = new List <ConfigEntry>(); var buttons = _deviceTranslator.TranslateButtonDefinition(definition); if (!buttons.Any()) { return(configs); } foreach (var button in buttons) { var buttonNumber = button.Item1 ?? 1; if (button.Item2 == ButtonType.Push) { void addConfig(List <string> entity) { var prefix = _configuration.GetPlatformPrefix(definition.Platform); entity.Add($" state_topic: {prefix}/{definition.DeviceId}/{buttonNumber}/push"); entity.Add($" payload_on: pushed"); entity.Add(" off_delay: 1"); } var name = button.Item1.HasValue ? $"{definition.Name} {button.Item1}" : definition.Name; configs.Add(FormatDefinition(addConfig, EntityType.BinarySensor, new SensorConfig { Name = name, Platform = definition.Platform, DeviceId = definition.DeviceId, DeviceName = definition.Name, //DeviceClass = sensor.DeviceClass, //Icon = sensor.Icon, })); } else if (button.Item2 == ButtonType.Hold) { void addConfig(List <string> entity) { var prefix = _configuration.GetPlatformPrefix(definition.Platform); entity.Add($" state_topic: {prefix}/{definition.DeviceId}/{buttonNumber}/hold"); entity.Add(" payload_on: held"); entity.Add(" off_delay: 1"); } var name = button.Item1.HasValue ? $"{definition.Name} {button.Item1} hold" : $"{definition.Name} hold"; configs.Add(FormatDefinition(addConfig, EntityType.BinarySensor, new SensorConfig { Name = name, Platform = definition.Platform, DeviceId = definition.DeviceId, DeviceName = definition.Name, })); } else if (button.Item2 == ButtonType.HoldAndRelease) { void addConfig(List <string> entity) { var prefix = _configuration.GetPlatformPrefix(definition.Platform); entity.Add($" state_topic: {prefix}/{definition.DeviceId}/{buttonNumber}/hold"); entity.Add(" payload_on: held"); entity.Add(" payload_off: released"); } var name = button.Item1.HasValue ? $"{definition.Name} {button.Item1} hold" : $"{definition.Name} hold"; configs.Add(FormatDefinition(addConfig, EntityType.BinarySensor, new SensorConfig { Name = name, Platform = definition.Platform, DeviceId = definition.DeviceId, DeviceName = definition.Name, })); } } return(configs); }