예제 #1
0
        protected sealed override void UpdateInternal(SwimmingPool pool, SwimmingPoolWeather obj)
        {
            ISensorContainer sensor = HassMqttManager.GetSensor(HassUniqueIdBuilder.GetPoolDeviceId(pool), _measurement);

            Update(sensor, pool, obj);

            sensor
            .SetAttribute("timestamp", obj.Timestamp)
            .SetPoolAttributes(pool);
        }
 protected override void CreateSensor(SwimmingPool pool, List <SwimmingPoolLastMeasurementsGetResponse> measurements, SwimmingPoolLastMeasurementsGetResponse latest)
 {
     HassMqttManager.ConfigureSensor <MqttSensor>(HassUniqueIdBuilder.GetPoolDeviceId(pool), $"{_measurement}_status")
     .ConfigureTopics(HassTopicKind.State, HassTopicKind.JsonAttributes)
     .SetHassPoolProperties(pool)
     .ConfigureDiscovery(discovery =>
     {
         discovery.Name = $"{pool.Name} {_displayName}";
     })
     .ConfigureAliveService();
 }
예제 #3
0
 protected override void CreateSensor(SwimmingPool pool, SwimmingPoolGuidanceGetResponse guidance)
 {
     HassMqttManager.ConfigureSensor <MqttSensor>(HassUniqueIdBuilder.GetPoolDeviceId(pool), "guidance")
     .ConfigureTopics(HassTopicKind.State, HassTopicKind.JsonAttributes)
     .SetHassPoolProperties(pool)
     .ConfigureDiscovery(discovery =>
     {
         discovery.Name = $"{pool.Name} Guidance";
     })
     .ConfigureAliveService();
 }
예제 #4
0
 protected override void CreateSensor(SwimmingPool pool, SwimmingPoolWeather obj)
 {
     HassMqttManager.ConfigureSensor <MqttSensor>(HassUniqueIdBuilder.GetPoolDeviceId(pool), _measurement)
     .ConfigureTopics(HassTopicKind.State, HassTopicKind.JsonAttributes)
     .SetHassPoolProperties(pool)
     .ConfigureDiscovery(discovery =>
     {
         discovery.Name              = $"{pool.Name} {_displayName}";
         discovery.DeviceClass       = _deviceClass;
         discovery.UnitOfMeasurement = _unit;
     })
     .ConfigureAliveService();
 }
        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 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}_status")
                                      .SetPoolAttributes(pool);

            MeasurementUtility.AddAttributes(sensor.GetAttributesSender(), measurement);

            MeasurementStatus status = MeasurementUtility.GetStatus(measurement);

            sensor.SetValue(HassTopicKind.State, status.AsString(EnumFormat.EnumMemberValue));
        }
        protected override void UpdateInternal(SwimmingPool pool, List <SwimmingPoolLastMeasurementsGetResponse> measurements, SwimmingPoolLastMeasurementsGetResponse latest)
        {
            ISensorContainer sensor = HassMqttManager
                                      .GetSensor(HassUniqueIdBuilder.GetPoolDeviceId(pool), "last_measurement")
                                      .SetPoolAttributes(pool);

            if (latest == null)
            {
                // No measurements
                sensor.SetValue(HassTopicKind.State, null);
                sensor.SetAttribute(AttributeMeasurement, "none");

                return;
            }

            SwpLastMeasurements lastMeasurement = null;

            if (latest.LastBlueMeasureTimestamp.HasValue &&
                (!latest.LastStripTimestamp.HasValue || latest.LastBlueMeasureTimestamp > latest.LastStripTimestamp))
            {
                // Blue measurement is latest
                lastMeasurement = latest.Data.OrderByDescending(s => s.Timestamp).FirstOrDefault();

                sensor.SetValue(HassTopicKind.State, latest.LastBlueMeasureTimestamp);
                sensor.SetAttribute("method", "blue");
            }
            else if (latest.LastStripTimestamp.HasValue)
            {
                // Strip measurement is latest
                lastMeasurement = latest.Data.OrderByDescending(s => s.Timestamp).FirstOrDefault();

                sensor.SetValue(HassTopicKind.State, latest.LastStripTimestamp);
                sensor.SetAttribute("method", "strip");
            }
            else
            {
                // No measurements
                sensor.SetAttribute(AttributeMeasurement, "none");
                sensor.SetValue(HassTopicKind.State, null);
            }

            if (lastMeasurement != null)
            {
                sensor.SetAttribute(AttributeMeasurement, lastMeasurement.Name);
            }
        }
예제 #8
0
        protected override void UpdateInternal(SwimmingPool pool, SwimmingPoolGuidanceGetResponse guidance)
        {
            ISensorContainer sensor = HassMqttManager
                                      .GetSensor(HassUniqueIdBuilder.GetPoolDeviceId(pool), "guidance")
                                      .SetPoolAttributes(pool);

            if (guidance.Guidance?.IssueToFix == null)
            {
                sensor.SetValue(HassTopicKind.State, "No guidance at this time");
                sensor.SetAttribute("status", "ok");

                return;
            }

            string text = $"{guidance.Guidance.IssueToFix.IssueTitle}: {guidance.Guidance.IssueToFix.ActionTitle}";

            sensor.SetValue(HassTopicKind.State, text);
            sensor.SetAttribute("status", "alert");
        }
        private ISensorContainer CreateSystemEntities()
        {
            string       deviceId = HassUniqueIdBuilder.GetPoolDeviceId(_pool);
            const string entityId = "update_status";

            _hassMqttManager.ConfigureSensor <MqttBinarySensor>(deviceId, entityId)
            .ConfigureTopics(HassTopicKind.State, HassTopicKind.JsonAttributes)
            .SetHassPoolProperties(_pool)
            .ConfigureDiscovery(discovery =>
            {
                discovery.Name        = "Pool update status";
                discovery.DeviceClass = HassDeviceClass.Problem;

                discovery.PayloadOn  = BlueRiiotMqttService.ProblemMessage;
                discovery.PayloadOff = BlueRiiotMqttService.OkMessage;
            })
            .ConfigureAliveService();

            return(_hassMqttManager.GetSensor(deviceId, entityId));
        }