protected override void UpdateInternal(SwimmingPool pool, SwimmingPool _)
        {
            ISensorContainer sensor = HassMqttManager.GetSensor(HassUniqueIdBuilder.GetPoolDeviceId(pool), "pump_schedule");

            SwimmingPoolCharacteristicsFilterPump pump = pool.Characteristics?.FilterPump;

            if (pump == null)
            {
                return;
            }

            MqttAttributesTopic attributes = sensor.GetAttributesSender();

            // The new schedule may have fewer time ranges
            attributes.Clear();

            sensor.SetPoolAttributes(pool);

            if (!pump.IsPresent)
            {
                // No pump
                sensor.SetValue(HassTopicKind.State, "None");
            }
            else if (pump.OperatingType == "Manual")
            {
                // Pump exists, but is not scheduled
                sensor.SetValue(HassTopicKind.State, "Manual");
            }
            else if (pump.OperatingType == "Scheduled")
            {
                sensor.SetValue(HassTopicKind.State, "Scheduled");

                if (pump.OperatingHours != null && pump.OperatingHours.Any())
                {
                    string allTimes = string.Join(", ", pump.OperatingHours.Select(s => s.Start.ToString(TimeFormat) + "-" + s.End.ToString(TimeFormat)));
                    attributes.SetAttribute("schedule", allTimes);

                    attributes.SetAttribute("schedules", pump.OperatingHours.Count);

                    for (int index = 0; index < pump.OperatingHours.Count; index++)
                    {
                        TimeRange range = pump.OperatingHours[index];

                        attributes.SetAttribute($"schedule_{index}", $"{range.Start.ToString(TimeFormat)}-{range.End.ToString(TimeFormat)}");
                        attributes.SetAttribute($"schedule_{index}_start", range.Start.ToString(TimeFormat));
                        attributes.SetAttribute($"schedule_{index}_end", range.End.ToString(TimeFormat));
                    }
                }
            }
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            CreateSystemEntities();

            // Push starting values
            ISensorContainer    sensor     = _hassMqttManager.GetSensor(_config.DeviceId, _config.EntityId);
            MqttAttributesTopic attributes = sensor.GetAttributesSender();

            Assembly entryAssembly = Assembly.GetEntryAssembly();

            if (entryAssembly != null)
            {
                attributes.SetAttribute("version", entryAssembly.GetName().Version.ToString(3));
            }

            attributes.SetAttribute("started", DateTime.UtcNow);
        }
Esempio n. 3
0
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            CreateSystemEntities();

            // Push starting values
            MqttAttributesTopic attributes = _hassMqttManager.GetSensor(DeviceId, EntityId)
                                             .GetAttributesSender();

            attributes.SetAttribute("version", _version);
            attributes.SetAttribute("started", DateTime.UtcNow);

            _uponorClient.OnSuccessfulResponse += UponorClientOnOnSuccessfulResponse;
            _uponorClient.OnFailedResponse     += UponorClientOnOnFailedResponse;

            // The flushing task is not really representative of this service, but it'll do
            return(FlushingTask(stoppingToken));
        }
        public static void AddAttributes(MqttAttributesTopic sensor, SwpLastMeasurements measurement)
        {
            sensor.SetAttribute("min", measurement.GaugeMin);
            sensor.SetAttribute("max", measurement.GaugeMax);
            sensor.SetAttribute("okmin", measurement.OkMin);
            sensor.SetAttribute("okmax", measurement.OkMax);
            sensor.SetAttribute("warninglow", measurement.WarningLow);
            sensor.SetAttribute("warninghigh", measurement.WarningHigh);
            sensor.SetAttribute("timestamp", measurement.Timestamp);
            sensor.SetAttribute("source", measurement.Issuer); // Ex. "strip"

            sensor.SetAttribute("states", new[]
            {
                MeasurementStatus.Ok.AsString(EnumFormat.EnumMemberValue),
                MeasurementStatus.Warning.AsString(EnumFormat.EnumMemberValue),
                MeasurementStatus.Bad.AsString(EnumFormat.EnumMemberValue)
            });
        }
        public override void Process(UponorResponseContainer values)
        {
            // Software versions
            foreach (int controller in _systemDetails.GetAvailableControllers())
            {
                if (!values.TryGetValue(UponorObjects.Controller(UponorController.ControllerSwVersion, controller),
                                        UponorProperties.Value, out object val))
                {
                    continue;
                }

                string           deviceId = HassUniqueIdBuilder.GetControllerDeviceId(controller);
                ISensorContainer sensor   = HassMqttManager.GetSensor(deviceId, "controller");

                MqttStateValueTopic sender     = sensor.GetValueSender(HassTopicKind.State);
                MqttAttributesTopic attributes = sensor.GetAttributesSender();

                sender.Value = "discovered";
                attributes.SetAttribute("sw_version", val);
            }
        }
Esempio n. 6
0
        protected override void UpdateInternal(SwimmingPool pool, List <SwimmingPoolLastMeasurementsGetResponse> measurements, SwimmingPoolLastMeasurementsGetResponse latest)
        {
            if (!TryGetMeasurement(latest.Data, out SwpLastMeasurements measurement))
            {
                return;
            }

            ISensorContainer sensor = HassMqttManager
                                      .GetSensor(HassUniqueIdBuilder.GetPoolDeviceId(pool), _measurement)
                                      .SetPoolAttributes(pool);

            MqttAttributesTopic attributesSender = sensor.GetAttributesSender();

            MeasurementUtility.AddAttributes(attributesSender, measurement);

            MeasurementStatus status = MeasurementUtility.GetStatus(measurement);

            attributesSender.SetAttribute("status", status.AsString(EnumFormat.EnumMemberValue));

            sensor.SetValue(HassTopicKind.State, measurement.Value);
        }