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