public async Task <CurtainStateObject> OnReceiveData(string data) { //_logger.LogInformation(data); Regex reg = new Regex("00 00 00 00 00 06 55 01 (.+) 01 01 (.+)"); var match = reg.Match(data); if (match.Success && match.Groups.Count == 3) { var id = int.Parse(match.Groups[1].ToString(), System.Globalization.NumberStyles.HexNumber); var status = int.Parse(match.Groups[2].ToString(), System.Globalization.NumberStyles.HexNumber); var obj = new CurtainStateObject { Id = id, Status = status }; _cache.Set(obj.Id, obj); var message = new MqttApplicationMessageBuilder().WithTopic("Home/Curtain/" + id + "/Status") .WithPayload(JsonConvert.SerializeObject(obj)) .WithAtLeastOnceQoS() .Build(); await _mqttHelper.Publish(message); var message1 = new MqttApplicationMessageBuilder().WithTopic("Home/Curtain/" + id + "/State") .WithPayload(obj.Status.ToString()) .WithAtLeastOnceQoS() .Build(); await _mqttHelper.Publish(message); return(obj); } return(null); }
public async Task <CurtainStateObject> OnReceiveMotorData(string data) { //_logger.LogInformation(data); Regex reg = new Regex("00 00 00 00 00 06 55 01 (.+) 01 01 (.+)"); var match = reg.Match(data); if (match.Success && match.Groups.Count == 3) { var id = int.Parse(match.Groups[1].ToString(), System.Globalization.NumberStyles.HexNumber); var status = int.Parse(match.Groups[2].ToString(), System.Globalization.NumberStyles.HexNumber); var obj = new CurtainStateObject { Id = id, Status = status }; return(await Task.FromResult(obj)); } return(null); }
public async Task <int> Get(int id) { if (id < 2 || id > 3) { return(0); } await _curtainHelper.GetCurtainStatus(id); await Task.Delay(500).ConfigureAwait(false); var obj = new CurtainStateObject(); while (_cache.TryGetValue(id, out obj) == false) { await Task.Delay(100).ConfigureAwait(false); } //return retPercent; return(obj.Status); }