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
                  } }
            });
        }
Пример #2
0
        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);
        }