Exemplo n.º 1
0
        public void StartTelnetClient()
        {
            using (var client = new TcpClient(_generalSettings.MysensorsIpAddress, _generalSettings.MysensorsPort))
            {
                var stream = client.GetStream();

                var data = new byte[1024];

                while (true)
                {
                    var bytes             = stream.Read(data, 0, data.Length);
                    var rawReceivedString = Encoding.ASCII.GetString(data, 0, bytes);

                    if (string.IsNullOrWhiteSpace(rawReceivedString))
                    {
                        continue;
                    }

                    if (!rawReceivedString.Contains((char)10))
                    {
                        continue;
                    }

                    // Split message if more than one have been received
                    var messages = rawReceivedString.Split((char)10)
                                   .Where(a_item => !string.IsNullOrWhiteSpace(a_item));

                    foreach (var message in messages)
                    {
                        var splitted = message.Split(';');
                        if (splitted.Count() != 6)
                        {
                            // Something went wrong, send out the complete message
                            Send(DateTime.Now, message);
                            continue;
                        }

                        var messageStructure = new MysensorsMessageStructure
                        {
                            NodeID        = int.Parse(splitted[0]),
                            ChildSensorID = int.Parse(splitted[1]),
                            MessageType   = (MysensorsMessageStructure.MessageTypeDefinition) int.Parse(splitted[2]),
                            Ack           = int.Parse(splitted[3]) == 1,
                            Subtype       = int.Parse(splitted[4]),
                            Payload       = splitted[5],
                        };
                        messageStructure.VeraDevice = _veraSettings.VeraDevices
                                                      .Where(a_item => a_item.VeraDeviceAltID != null)
                                                      .SingleOrDefault(
                            a_item => a_item.VeraDeviceAltID.NodeID == messageStructure.NodeID &&
                            a_item.VeraDeviceAltID.ChildID == messageStructure.ChildSensorID);

                        SendObject(DateTime.Now, messageStructure);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void SendObject(DateTime datetime, MysensorsMessageStructure mysensorsMessageStructure)
        {
            var context = _connectionManager.GetHubContext <MysensorsHub>();

            context.Clients.All.broadcastObject(datetime.ToString("HH:mm:ss.fff"), mysensorsMessageStructure);
        }