Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }