Beispiel #1
0
        private void AddToNodeMap(BleNode node, BeaconData data)
        {
            string mac  = data.Mac;
            double rssi = data.Rssi;

            //Dictionary<BleNode, RollingList<int>> nodeMap;
            Dictionary <BleNode, FilterContainer> nodeMap;

            if (mac != null && rssi != 0)
            {
                if (beaconMap.ContainsKey(mac))
                {
                    nodeMap = beaconMap[mac];
                }
                else
                {
                    //nodeMap = new Dictionary<BleNode, RollingList<int>>();
                    lock (beaconMap)
                    {
                        nodeMap = new Dictionary <BleNode, FilterContainer>();
                        beaconMap.Add(mac, nodeMap);
                    }
                }

                if (nodeMap != null)
                {
                    if (nodeMap.ContainsKey(node))
                    {
                        lock (nodeMap[node])
                        {
                            //nodeMap[node].Add(packet.rssi);

                            nodeMap[node].Filter.Update(new[] { (double)rssi });
                            nodeMap[node].LastEstimate = nodeMap[node].Filter.getState()[0];
                        }
                    }
                    else
                    {
                        //RollingList<int> list = new RollingList<int>(100);
                        FilterContainer container = new FilterContainer();
                        container.Filter = new UKF();
                        //UKF filter = new UKF();
                        //list.Add(packet.rssi);
                        lock (container)
                        {
                            container.Filter.Update(new[] { (double)rssi });
                            container.LastEstimate = container.Filter.getState()[0];
                        }
                        //nodeMap.Add(node, list);
                        lock (nodeMap)
                        {
                            nodeMap.Add(node, container);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        private void updateNodesListView(BleBeacon beacon)
        {
            nodesListView.Items.Clear();
            List <BleDistance> beaconDistances = distances.FindAll(d => d.BleBeaconsId == beacon.BleBeaconsId);

            foreach (BleDistance distance in beaconDistances)
            {
                BleNode      node = nodes.Find(n => n.BleNodesId == distance.BleNodesId);
                ListViewItem lvi  = new ListViewItem(node.Sender);
                lvi.SubItems.Add(distance.Distance.ToString("F2"));
                nodesListView.Items.Add(lvi);
            }
        }
Beispiel #3
0
 private static double getDistance(BleNode node1, BleNode node2)
 {
     return(Math.Sqrt(Math.Pow((node2.X - node1.X), 2) + Math.Pow((node2.Y - node1.Y), 2)));
 }
Beispiel #4
0
        public void AddPacket(BeaconPacket packet)
        {
            BleNode node = nodes.Find(n => n.Sender == packet.Sender);

            if (node == null)
            {
                node        = new BleNode();
                node.Sender = packet.Sender;
                node.MapsId = map.MapsId;
                nodes.Add(node);

                using (BleBeaconServerContext db = new BleBeaconServerContext())
                {
                    db.BleNodes.Add(node);
                    db.SaveChanges();
                }
            }

            Types type = BeaconData.GetType(packet.ByteData);

            BeaconData beaconData = BeaconData.ParseValues(packet.ByteData);

            if (beaconData != null && type != Types.Unknown)
            {
                if (node != null)
                {
                    beaconData.Node = node;
                }
                if (beaconData.Mac != null && beaconData.Mac != "")
                {
                    BleBeacon beacon = beacons.Find(n => n.MacAddress == beaconData.Mac);
                    if (beacon == null)
                    {
                        beacon            = new BleBeacon();
                        beacon.MacAddress = beaconData.Mac;
                        beacons.Add(beacon);

                        using (BleBeaconServerContext db = new BleBeaconServerContext())
                        {
                            db.BleBeacons.Add(beacon);
                            db.SaveChanges();
                        }
                    }
                    else
                    {
                        beaconData.Beacon = beacon;
                    }
                }
            }

            if (type == Types.Ruuvitag)
            {
                RuuvitagParser parser    = new RuuvitagParser(beaconData);
                RuuvitagData   ruuviData = parser.ReadData(packet.ByteData);

                if (ruuviData != null)
                {
                    if (BeaconDataReceived != null)
                    {
                        BeaconDataReceived(ruuviData);
                    }

                    AddToNodeMap(node, ruuviData);
                }
            }
            else if (type == Types.APlant)
            {
                APlantParser parser     = new APlantParser(beaconData);
                APlantData   aplantData = parser.ReadData(packet.ByteData);

                if (aplantData != null)
                {
                    if (BeaconDataReceived != null)
                    {
                        BeaconDataReceived(aplantData);
                    }

                    AddToNodeMap(node, aplantData);
                }
            }
            else if (type == Types.PebbleBee)
            {
                PebblebeeParser parser     = new PebblebeeParser(beaconData);
                PebblebeeData   pebbleData = parser.ReadData(packet.ByteData);

                if (pebbleData != null)
                {
                    if (BeaconDataReceived != null)
                    {
                        BeaconDataReceived(pebbleData);
                    }

                    AddToNodeMap(node, pebbleData);
                }
            }

            /*if(packet.mac_address != null && packet.mac_address != "")
             * {
             *  BleBeacon beacon = beacons.Find(n => n.MacAddress == packet.mac_address);
             *  if(beacon == null)
             *  {
             *      beacon = new BleBeacon();
             *      beacon.MacAddress = packet.mac_address;
             *      beacons.Add(beacon);
             *
             *      using (BleBeaconServerContext db = new BleBeaconServerContext())
             *      {
             *          db.BleBeacons.Add(beacon);
             *          db.SaveChanges();
             *      }
             *  }
             *  //Dictionary<BleNode, RollingList<int>> nodeMap;
             *  Dictionary<BleNode, FilterContainer> nodeMap;
             *  if (beaconMap.ContainsKey(packet.mac_address))
             *  {
             *      nodeMap = beaconMap[packet.mac_address];
             *  } else
             *  {
             *      //nodeMap = new Dictionary<BleNode, RollingList<int>>();
             *      lock (beaconMap)
             *      {
             *          nodeMap = new Dictionary<BleNode, FilterContainer>();
             *          beaconMap.Add(packet.mac_address, nodeMap);
             *      }
             *  }
             *
             *  if(nodeMap != null)
             *  {
             *      if(nodeMap.ContainsKey(node))
             *      {
             *          lock (nodeMap[node])
             *          {
             *              //nodeMap[node].Add(packet.rssi);
             *
             *              nodeMap[node].Filter.Update(new[] { (double)packet.rssi });
             *              nodeMap[node].LastEstimate = nodeMap[node].Filter.getState()[0];
             *          }
             *      } else
             *      {
             *          //RollingList<int> list = new RollingList<int>(100);
             *          FilterContainer container = new FilterContainer();
             *          container.Filter = new UKF();
             *          //UKF filter = new UKF();
             *          //list.Add(packet.rssi);
             *          lock (container)
             *          {
             *              container.Filter.Update(new[] { (double)packet.rssi });
             *              container.LastEstimate = container.Filter.getState()[0];
             *          }
             *          //nodeMap.Add(node, list);
             *          lock (nodeMap)
             *          {
             *              nodeMap.Add(node, container);
             *          }
             *      }
             *  }*/

            //}
        }