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(); }
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(); }
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); } }
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)); }