Beispiel #1
0
        /// <summary>
        /// Update one specific TreeNode
        /// </summary>
        /// <param name="fqid"></param>
        /// <param name="state"></param>
        private void UpdateState(FQID fqid, String state)
        {
            Guid id = Guid.Empty;

            if (_treeNodeCache.ContainsKey(fqid.ObjectId))
            {
                id = (Guid)_treeNodeCache[fqid.ObjectId].Tag;
            }
            else
            {
                if (fqid.ObjectId == Guid.Empty && _treeNodeCache.ContainsKey(fqid.ServerId.Id))
                {
                    id = (Guid)_treeNodeCache[fqid.ServerId.Id].Tag;
                }
            }

            if (id != Guid.Empty && _treeNodeCache.ContainsKey(id))
            {
                TreeNode tn = _treeNodeCache[id];
                tn.ToolTipText = state;
                if (state == "Enabled" || state == "Responding" || state == "Server Responding")
                {
                    tn.ForeColor = Color.Black;
                }
                else if (state == "Disabled" || state == "Not Responding" || state == "Server Not Responding")
                {
                    tn.ForeColor = Color.Gray;
                }

                listBoxChanges.Items.Insert(0, DateTime.Now.ToLongTimeString() + ": " + tn.Text + " - " + state);
            }
        }
Beispiel #2
0
        private async Task <Bookmark[]> BookmarkSearch(FQID bookmarkFQID, long period, int bookmarksCount)
        {
            string searchStr = optSearchStr;

            if (string.IsNullOrEmpty(optSearchStr))
            {
                searchStr = OpenALPRBackgroundPlugin.openalprRefrence;
            }

            try
            {
                return(await Task.Run(() =>
                                      BookmarkService.Instance.BookmarkSearchFromBookmark(
                                          bookmarkFQID,
                                          period,
                                          bookmarksCount + 1,
                                          kinds,
                                          new FQID[] { items[0].FQID },
                                          optUsers,
                                          searchStr)));
            }
            catch (Exception ex)
            {
                Logger.Log.Error(null, ex);
            }

            return(new Bookmark[0]);
        }
 public override void Init()
 {
     Instance         = this;
     _watchCameraFQID = null;
     try
     {
         // Reading the configuration belonging to the Options Dialog
         System.Xml.XmlNode result = VideoOS.Platform.Configuration.Instance.GetOptionsConfiguration(AnalyticsOverlayDefinition.AnalyticsOverlayOptionDialog, true);
         if (result != null)
         {
             XmlNode childNode = result.FirstChild;
             String  id        = childNode.Attributes["value"].Value;
             if (id != null)
             {
                 Guid guid   = new Guid(id);
                 Item camera = Configuration.Instance.GetItem(guid, Kind.Camera);
                 if (camera != null)
                 {
                     _watchCameraFQID = camera.FQID;
                 }
             }
         }
     }
     catch
     {
         //ignore if there is no camera
     }
     ClientControl.Instance.NewImageViewerControlEvent += new ClientControl.NewImageViewerControlHandler(NewImageViewerControlEvent);
     _stop   = false;
     _thread = new Thread(new ThreadStart(Run));
     _thread.Start();
 }
        /// <summary>
        /// build the itemTreeview
        /// </summary>
        /// <param name="siteFQID"></param>
        private TreeNode  BuildTree(FQID siteFQID)
        {
            treeViewItems.ImageList        = VideoOS.Platform.UI.Util.ImageListClone;
            treeViewItems.ShowNodeToolTips = true;
            // Build Top TreeNode
            try
            {
                Item server = Configuration.Instance.GetItem(siteFQID); //hangs

                TreeNode tn = new TreeNode(server.Name)
                {
                    ImageIndex         = VideoOS.Platform.UI.Util.ServerIconIx,
                    SelectedImageIndex = VideoOS.Platform.UI.Util.ServerIconIx,
                    Tag = server.FQID.ServerId.Id
                };
                treeViewItems.Nodes.Add(tn);
                _treeNodeItemsCache.Add(server.FQID.ServerId.Id, tn);
                // Add all children
                tn.Nodes.AddRange(AddChildren(server));
                return(tn);
            }
            catch (Exception ex)
            {
                toolStripStatusLabel1.Text = "Exception on GetItem " + ex.Message +
                                             " Happens on server " + siteFQID.ServerId.ServerHostname;
                return(null);
            }
        }
Beispiel #5
0
 /// <summary>
 /// A new state message has been send by the EventServer - check for any new valued state changes
 /// </summary>
 /// <param name="message"></param>
 /// <param name="dest"></param>
 /// <param name="source"></param>
 /// <returns></returns>
 private object MessageHandler(VideoOS.Platform.Messaging.Message message, FQID dest, FQID source)
 {
     if (message.MessageId == VideoOS.Platform.Messaging.MessageId.Server.NewEventIndication)
     {
         EventData eventData = message.Data as EventData;
         if (eventData != null)
         {
             BeginInvoke(new MethodInvoker(delegate()
             {
                 UpdateState(eventData.EventHeader.Source.FQID, eventData.EventHeader.Message);
             }));
         }
         else
         {
             BaseEvent baseEvent = message.Data as BaseEvent;
             if (baseEvent != null)
             {
                 BeginInvoke(new MethodInvoker(delegate()
                 {
                     UpdateState(baseEvent.EventHeader.Source.FQID,
                                 baseEvent.EventHeader.Message);
                 }));
             }
         }
     }
     if (message.MessageId == VideoOS.Platform.Messaging.MessageId.System.SystemConfigurationChangedIndication)
     {
         BeginInvoke(new MethodInvoker(delegate()
         {
             listBoxChanges.Items.Insert(0, DateTime.Now.ToLongTimeString() + ": " + message.MessageId);
         }));
     }
     return(null);
 }
Beispiel #6
0
        private void Window_Closed(object sender, EventArgs e)
        {
            _imageViewerControl.Disconnect();
            _imageViewerControl.Close();
            _imageViewerControl.Dispose();

            if (_microphonePlayer != null)
            {
                _microphonePlayer.Disconnect();
                _microphonePlayer.Close();
                _microphonePlayer.Dispose();
            }

            if (_speakerPlayer != null)
            {
                _speakerPlayer.Disconnect();
                _speakerPlayer.Close();
                _speakerPlayer.Dispose();
            }


            if (_playbackFQID != null)
            {
                ClientControl.Instance.ReleasePlaybackController(_playbackFQID);
                _playbackFQID = null;
            }
            _mc?.Dispose();
            _dateTimePicker?.Dispose();
            _winFormsHost.Dispose();
        }
Beispiel #7
0
        /// <summary>
        /// This method keeps an eye with what view layout the user is selecting,
        /// stores it under _currentView, and show the name in the read-only textBoxLayoutName textbox.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="s"></param>
        /// <param name="r"></param>
        /// <returns></returns>
        private object ViewChangedHandler(Message message, FQID s, FQID r)
        {
            _currentView = message.Data as ViewAndLayoutItem;

            UpdateIndexes();
            return(null);
        }
        public override void Init()
        {
            List <Item> checkCurrent = GetItems();

            if (checkCurrent.Count == 0)
            {
                FQID fqid = new FQID(new ServerId("NA", "localhost", 80, Guid.NewGuid()));
                fqid.ObjectId = Guid.NewGuid();
                fqid.Kind     = ConfigDumpDefinition.ConfigDumpKind;

                CurrentItem = new Item(fqid, "Enter a name");
                if (EnvironmentManager.Instance.EnvironmentType == EnvironmentType.Administration)
                {
                    Configuration.Instance.SaveItemConfiguration(ConfigDumpDefinition.ConfigDumpPluginId, CurrentItem);
                }
            }
            else
            {
                CurrentItem = checkCurrent[0];
            }

            appReady = EnvironmentManager.Instance.RegisterReceiver(ApplicationReady,
                                                                    new MessageIdFilter(
                                                                        VideoOS.Platform.Messaging.MessageId.System.
                                                                        SystemConfigurationChangedIndication));
            base.Init();
        }
Beispiel #9
0
        private bool ProcessAlprGroupOrResults_New(OpenALPRData palteInfo)
        {
            if (palteInfo != null)
            {
                if (!string.IsNullOrEmpty(palteInfo.Best_plate_number) && palteInfo.Camera_id != 0)
                {
                    IList <OpenALPRmilestoneCameraName> cameras = GetCameraFromMapping(palteInfo.Camera_id.ToString());

                    if (AddBookmarks)
                    {
                        FQID bookmarkFQID = null;

                        List <BookmarkItem> bookmarkItems = CreateBookmarkItem(palteInfo, cameras);
                        bookmarkFQID = AddNewBookmark_New(bookmarkItems);

                        if (cameras.Count != 0 && bookmarkFQID != null)
                        {
                            SendAlarm_New(palteInfo, cameras[cameras.Count - 1].MilestoneName, bookmarkFQID); // Send Alert for the last Camera since we recieved the bookmarkFQID for the last camera used in AddNewBookmark.
                        }
                    }
                }
                else
                {
                    Program.Log.Warn("Best_plate_number is empty or Camera_id == 0");
                }
            }

            return(true);
        }
        public VideoPreviewUserControl()
        {
            InitializeComponent();

            _playbackUserControl                     = ClientControl.Instance.GeneratePlaybackUserControl();
            _playbackUserControl.Dock                = DockStyle.Top;
            _playbackUserControl.TimeSpan            = TimeSpan.FromHours(1);
            _playbackUserControl.ShowTallUserControl = true;

            panelPlayback.Controls.Add(_playbackUserControl);

            FQID playbackControllerFQID = ClientControl.Instance.GeneratePlaybackController();

            _playbackUserControl.Init(playbackControllerFQID);

            _bitmapSource = new BitmapSource();
            _bitmapSource.PlaybackFQID    = playbackControllerFQID;
            _bitmapSource.NewBitmapEvent += _bitmapSource_NewBitmapEvent;
            _bitmapSource.Selected        = true;

            EnvironmentManager.Instance.SendMessage(
                new VideoOS.Platform.Messaging.Message(MessageId.SmartClient.PlaybackSkipModeCommand, PlaybackSkipModeData.Skip), playbackControllerFQID);

            _playbackUserControl.Enabled = false;
        }
Beispiel #11
0
        private async void BtnNext_Click(object sender, EventArgs e)
        {
            if (lsvBookmarks.Items.Count != 0)
            {
                ListViewItem lsvItem = lsvBookmarks.Items[lsvBookmarks.Items.Count - 1];
                if (lsvItem != null && lsvItem.Tag != null)
                {
                    FQID   bookmarkFQID = lsvItem.Tag as FQID;
                    string searchString = txtSearchFor.Text.Trim() == string.Empty ? null : txtSearchFor.Text;
                    try
                    {
                        DateTime startTime = DateTime.Now;
                        DateTime.TryParse(lsvItem.SubItems[1].Text, out startTime);
                        startTime = startTime.ToUniversalTime();
                        startTime = DateTime.SpecifyKind(startTime, DateTimeKind.Utc);

                        DateTime endTime = datEndTime.Value.ToUniversalTime();
                        endTime = DateTime.SpecifyKind(endTime, DateTimeKind.Utc);

                        await Next(bookmarkFQID, startTime, endTime, chkMyBookmarksOnly.Checked, searchString);
                    }
                    catch (Exception ex)
                    {
                        Logger.Log.Error(null, ex);
                    }
                }
            }
        }
        private void OnSelect(object sender, EventArgs e)
        {
            DevicePickerForm form = new DevicePickerForm();

            if (selectedDevices != null && selectedDevices.Count > 0)
            {
                FQID[] FQIDlist = new FQID[selectedDevices.Count];
                int    ix       = 0;
                foreach (FQID fqid in selectedDevices)
                {
                    FQIDlist[ix++] = fqid;
                }
                form.SelectedFQID = FQIDlist;
            }

            form.ShowDialog();

            FQID[]    selectedFQID = form.SelectedFQID;
            ArrayList list         = new ArrayList();

            if (selectedFQID != null)
            {
                foreach (FQID fqid in selectedFQID)
                {
                    list.Add(fqid);
                }
            }
            SelectedDevices = list;
        }
        private object PlaybackTimeChangedHandler(Message message, FQID dest, FQID sender)
        {
            var time = (DateTime)message.Data;

            _nextToFetchTime = time;
            return(null);
        }
Beispiel #14
0
        public bool EqualsId(dynamic id)
        {
            FQID thisId  = (FQID)this.Id;
            FQID comFqid = (FQID)id;

            return(thisId.Equals(comFqid));
        }
        /// <summary>
        /// Returns the Item defined by the FQID. Will return null if not found.
        /// </summary>
        /// <param name="fqid">Fully Qualified ID of an Item</param>
        /// <returns>An Item</returns>
        public override Item GetItem(FQID fqid)
        {
            if (fqid.ObjectIdString != null)
            {
                LoadIndex();
                String filename = fqid.ObjectIdString;
                if (!BatActionDefinition.FileGuidIndex.ContainsKey(filename))
                {
                    BatActionDefinition.FileGuidIndex[filename] = Guid.NewGuid();
                    _indexUnsaved = true;
                    SaveIndex();
                }

                Guid objectId = BatActionDefinition.FileGuidIndex[filename];
                return(new Item(new FQID(EnvironmentManager.Instance.MasterSite.ServerId, Guid.Empty, filename, FolderType.No, BatActionDefinition.BatActionKind)
                {
                    ObjectId = objectId
                }, filename));
            }
            else
            {
                foreach (var name in BatActionDefinition.FileGuidIndex.Keys)
                {
                    if (BatActionDefinition.FileGuidIndex[name] == fqid.ObjectId)
                    {
                        return(new Item(new FQID(EnvironmentManager.Instance.MasterSite.ServerId, Guid.Empty, name, FolderType.No, BatActionDefinition.BatActionKind)
                        {
                            ObjectId = fqid.ObjectId
                        }, name));
                    }
                }
            }
            return(null);
        }
 /// <summary>
 /// A new state message has been send by the EventServer - check for any new valued state changes
 /// </summary>
 /// <param name="message"></param>
 /// <param name="dest"></param>
 /// <param name="source"></param>
 /// <returns></returns>
 private object MessageHandler(VideoOS.Platform.Messaging.Message message, FQID dest, FQID source)
 {
     if (message.MessageId == VideoOS.Platform.Messaging.MessageId.Server.NewEventIndication)
     {
         EventData eventData = message.Data as EventData;
         string    server    = message.ExternalMessageSourceEndPoint.ServerId.ServerHostname;
         if (eventData != null)
         {
             BeginInvoke(new MethodInvoker(delegate()
             {
                 UpdateState(eventData.EventHeader.Source.FQID, eventData.EventHeader.Message, server);
             }));
         }
         else
         {
             BaseEvent baseEvent = message.Data as BaseEvent;
             if (baseEvent != null)
             {
                 BeginInvoke(new MethodInvoker(delegate()
                 {
                     UpdateState(baseEvent.EventHeader.Source.FQID,
                                 baseEvent.EventHeader.Message, server);
                 }));
             }
         }
     }
     return(null);
 }
 internal void FillContent(Item item)
 {
     textBoxName.Text = item.Name;
     _item            = item;
     if (item.Properties.ContainsKey("RelatedFQID"))
     {
         FQID fqid        = new FQID(item.Properties["RelatedFQID"]);
         Item relatedItem = Configuration.Instance.GetItem(fqid);
         if (relatedItem != null)
         {
             RelatedCamera = relatedItem;
         }
     }
     if (item.Properties.ContainsKey("RelatedEventFQID"))
     {
         FQID fqid        = new FQID(item.Properties["RelatedEventFQID"]);
         Item relatedItem = Configuration.Instance.GetItem(fqid);
         if (relatedItem != null)
         {
             RelatedEvent = relatedItem;
         }
     }
     if (item.Properties.ContainsKey("Enabled"))
     {
         Disabled = item.Properties["Enabled"] == "No";
     }
 }
Beispiel #18
0
 /// <summary>
 /// </summary>
 /// <param name="node"></param>
 /// <param name="carrouselHandler"></param>
 internal static void BuildCarrouselList(Item item, CarrouselHandlerDelegate carrouselHandler)
 {
     if (item.Properties.ContainsKey("SelectedDevices"))
     {
         string      selectedList = item.Properties["SelectedDevices"];
         XmlDocument doc          = new XmlDocument();
         doc.InnerXml = selectedList;
         List <CarrouselTreeNode> list = new List <CarrouselTreeNode>();
         XmlNode selectedNode          = doc.SelectSingleNode("SelectedDevices");
         foreach (XmlNode itemNode in selectedNode.SelectNodes("Item"))
         {
             FQID fqiditem = new FQID(itemNode.SelectSingleNode("FQID"));
             int  seconds  = 10;
             int  sortix   = 1;
             int.TryParse(itemNode.SelectSingleNode("Seconds").InnerText, out seconds);
             int.TryParse(itemNode.SelectSingleNode("Sort").InnerText, out sortix);
             Item cameraItem = Configuration.Instance.GetItem(fqiditem);
             if (cameraItem != null) // Ignore items the user has no access to, or has been disabled/deleted
             {
                 int listIndex = 0;
                 foreach (var existingItem in list)
                 {
                     if (existingItem.Sortix > sortix)
                     {
                         break;
                     }
                     listIndex++;
                 }
                 list.Insert(listIndex, new CarrouselTreeNode(cameraItem, seconds, sortix));
             }
         }
         carrouselHandler(list);
     }
 }
Beispiel #19
0
        /// <summary>
        /// Method that is called immediately after the view item is displayed.
        /// </summary>
        public override void Init()
        {
            _playbackWpfUserControl = new PlaybackWpfUserControl();
            canvasPlaybackControl.Children.Add(_playbackWpfUserControl);

            _audioPlayerControl           = ClientControl.Instance.GenerateAudioPlayerControl(WindowInformation);
            _audioPlayerControl.Dock      = DockStyle.Fill;
            _audioPlayerControlHost.Child = _audioPlayerControl;

            _imageViewerControl = new ImageViewerWpfControl(WindowInformation);
            _imageViewerControl.VerticalAlignment        = System.Windows.VerticalAlignment.Stretch;
            _imageViewerControl.HorizontalAlignment      = System.Windows.HorizontalAlignment.Stretch;
            _imageViewerControl.EnableMouseControlledPtz = true;
            _imageViewerControl.Selected = true;

            canvasVideo.Children.Add(_imageViewerControl);

            _playbackFQID = ClientControl.Instance.GeneratePlaybackController();
            _playbackWpfUserControl.Init(_playbackFQID);
            _imageViewerControl.PlaybackControllerFQID = _playbackFQID;

            _audioPlayerControl.PlaybackControllerFQID = _playbackFQID;

            PlaybackController pc = ClientControl.Instance.GetPlaybackController(_playbackFQID);

            pc.SkipGaps = false;

            SetUpApplicationEventListeners();
            _imageViewerControl.Initialize();               // Make sure Click events have been configured
            if (_viewItemManager.SelectedCamera != null)
            {
                ViewItemManagerPropertyChangedEvent(this, null);
            }
        }
        private object MessageReceived(Message message, FQID destination, FQID sender)
        {
            var selectedImageViewAddon = _backgroundPlugin.FindSelectedImageViewAddOn();

            ResetButtons();

            ChangeCurrentImageViewer(selectedImageViewAddon);
            if (_currentImageViewer == null)
            {
                return(null);
            }
            else
            {
                SetEnableDisableButtonsState(_currentImageViewer.IndependentPlaybackEnabled);
                SetPlaybackButtonState(_currentImageViewer.IndependentPlaybackController.PlaybackMode);

                if (_currentImageViewer.IndependentPlaybackEnabled)
                {
                    SetPlaybackButtonState(_currentImageViewer.IndependentPlaybackController.PlaybackMode);
                    labelPlaybackTime.Content = _currentImageViewer.IndependentPlaybackController.PlaybackTime.ToLocalTime().ToString(TimeFormat);
                }
                else
                {
                    labelPlaybackTime.Content = "Not Available";
                }
            }
            return(null);
        }
Beispiel #21
0
        public MainForm()
        {
            InitializeComponent();

            _playbackFQID = VideoOS.Platform.ClientControl.Instance.GeneratePlaybackController();

            EnvironmentManager.Instance.RegisterReceiver(PlaybackTimeChangedHandler,
                                                         new MessageIdFilter(MessageId.SmartClient.PlaybackCurrentTimeIndication));

            String[] cameras = Directory.GetFiles("C:\\CameraXml\\");       //We store camera xml here!!

            comboBox1.Items.Add("Select a camera ...");
            foreach (String name in cameras)
            {
                comboBox1.Items.Add(name);
            }
            comboBox1.SelectedIndex = 0;

            String[] microphones = Directory.GetFiles("C:\\MicrophoneXml\\");       //We store microphone xml here!!

            comboBoxAudio.Items.Add("Select a microphone ...");
            foreach (String name in microphones)
            {
                comboBoxAudio.Items.Add(name);
            }
            comboBoxAudio.SelectedIndex = 0;
        }
Beispiel #22
0
 private object MaxCamerasChangedReceiver(Message message, FQID sender, FQID related)
 {
     if (_workSpaceViewSelected)
     {
         UpdateCameras();
     }
     return(null);
 }
Beispiel #23
0
 private object WorkSpaceStateChangedReceiver(Message message, FQID sender, FQID related)
 {
     if (_workSpaceSelected && ((WorkSpaceState)message.Data) == WorkSpaceState.Normal)
     {
         UpdateCameras();
     }
     return(null);
 }
Beispiel #24
0
 private object ShownWorkSpaceChangedReceiver(Message message, FQID sender, FQID related)
 {
     if (message.Data != null)
     {
         _selectedWorkSpaceLabel.Text = ((Item)message.Data).Name;
     }
     return(null);
 }
Beispiel #25
0
 /// <summary>
 /// Keep track of current state: in setup or normal
 /// </summary>
 /// <param name="message"></param>
 /// <param name="sender"></param>
 /// <param name="related"></param>
 /// <returns></returns>
 private object WorkSpaceStateChangedReceiver(Message message, FQID sender, FQID related)
 {
     if (_workSpaceSelected && ((WorkSpaceState)message.Data) == WorkSpaceState.Normal)
     {
         // Went in or out of Setup state
     }
     return(null);
 }
 private object ApplicationReady(VideoOS.Platform.Messaging.Message message, FQID sender, FQID related)
 {
     if (_userControl != null)
     {
         _userControl.FillContent(CurrentItem);                          // Ignore item here
     }
     return(null);
 }
Beispiel #27
0
 private void OnClose(object sender, EventArgs e)
 {
     if (_playbackFQID != null)
     {
         ClientControl.Instance.ReleasePlaybackController(_playbackFQID);
         _playbackFQID = null;
     }
     Close();
 }
Beispiel #28
0
        /// <summary>
        /// Create a new item. Insert values as user has entered on the AddUserControl.<br/>
        /// The parentFQID can be null, when a top level node is created (e.g. no parent)
        /// The new fqid should be filled with ServerID, ParentId, ObjectId or ObjectIdString and Kind.
        /// </summary>
        /// <param name="parentItem">Identifies the configuration parent to the new item.</param>
        /// <param name="suggestedFQID">A pre-generated fqid with above fields filled.
        /// The ObjectId or ObjectIdString can be overridden.</param>
        /// <param name="addUserControl">A filled user control returned by the GeneratedAddUserControl method after it has been displayed and edited by the user</param>
        /// <returns>A new Item, only the FQID and Name field are required to be filled.  The return value is used to identify and select the item tree node</returns>
        public override Item CreateItem(Item parentItem, FQID suggestedFQID, UserControl addUserControl)
        {
            CurrentItem = new Item(suggestedFQID, ((ServerConnectionAddUserControl)addUserControl).ItemName);
            Configuration.Instance.SaveItemConfiguration(ServerConnectionDefinition.ServerConnectionPluginId, CurrentItem);

            //Make sure to reserve a license for this item, real or temporary
            ServerConnectionLicenseHandler.RegisterItem(GetItems(), CurrentItem);
            return(CurrentItem);
        }
Beispiel #29
0
 /// <summary>
 /// Create a new Item
 /// </summary>
 /// <param name="parentItem">The parent for the new Item</param>
 /// <param name="suggestedFQID">A suggested FQID for the new Item</param>
 public override Item CreateItem(Item parentItem, FQID suggestedFQID)
 {
     CurrentItem = new Item(suggestedFQID, "Enter a name");
     if (_userControl != null)
     {
         _userControl.FillContent(CurrentItem);
     }
     Configuration.Instance.SaveItemConfiguration(VideoPreviewDefinition.VideoPreviewPluginId, CurrentItem);
     return(CurrentItem);
 }
Beispiel #30
0
        /// <summary>
        /// Returns the Item defined by the FQID. Will return null if not found.
        /// </summary>
        /// <param name="fqid">Fully Qualified ID of an Item</param>
        /// <returns>An Item</returns>
        public override Item GetItem(FQID fqid)
        {
            Item item = Configuration.Instance.GetItemConfiguration(SensorMonitorDefinition.SensorMonitorPluginId, _kind, fqid.ObjectId);

            if (item == null)
            {
                return(null);
            }
            return(new ControllerItem(item));
        }