/*****************************************************************************************************/ static void handler_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { lock (DevicesList) { // Device already registred ? foreach (BacNode bn in DevicesList) if (bn.getAdd(device_id) != null) return; // Yes // Not already in the list DevicesList.Add(new BacNode(adr, device_id)); // add it } }
private void handler_OnIam(BacnetClient sender, BacnetAddress adr, uint deviceId, uint maxAPDU, BacnetSegmentations segmentation, ushort vendorId) { BeginInvoke(new Action(() => { lock (devicesList) { foreach (BacNode bn in devicesList) { if (bn.GetAdd(deviceId) != null) { return; // Yes } } devicesList.Add(new BacNode(adr, deviceId)); // add it listBox1.Items.Add(adr.ToString() + " " + deviceId); } })); }
private void OnIam(BacnetClient sender, BacnetAddress adr, uint deviceId, uint maxApdu, BacnetSegmentations segmentation, ushort vendorId) { lock (_devicesList) { Logger.Debug($"OnIam(): DeviceId = {deviceId}"); // Device already registred ? if (_devicesList.Any(bn => bn.GetAdd(deviceId) != null)) { return; // Yes } // Not already in the list _devicesList.Add(new BacNode(adr, deviceId)); // add it Initialized = true; if (deviceId == Settings.Default.BacnetMasterId) { _starTaskCompletionSource.TrySetResult(true); } } }
private void bacnet_client_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { this.Invoke((MethodInvoker) delegate { lock (m_list) { string adrKey = adr.ToString(); if (m_list.FindItemWithText(adrKey) == null) { ListViewItem itm = m_list.Items.Add(adrKey); itm.Tag = new KeyValuePair <BacnetAddress, uint>(adr, device_id); itm.SubItems.Add(""); //read name IList <BacnetValue> values = _bacnet_client.ReadPropertyRequest(adr, new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, device_id), BacnetPropertyIds.PROP_OBJECT_NAME); if (values.Count > 0) { itm.SubItems[1].Text = (string)values[0].Value; } } } }, null); }
public void Iam(uint device_id, BacnetSegmentations segmentation) { Trace.WriteLine("Sending Iam ... ", null); EncodeBuffer b = GetEncodeBuffer(m_client.HeaderLength); BacnetAddress broadcast=m_client.GetBroadcastAddress(); NPDU.Encode(b, BacnetNpduControls.PriorityNormalMessage, broadcast, null, DEFAULT_HOP_COUNT, BacnetNetworkMessageTypes.NETWORK_MESSAGE_WHO_IS_ROUTER_TO_NETWORK, 0); APDU.EncodeUnconfirmedServiceRequest(b, BacnetPduTypes.PDU_TYPE_UNCONFIRMED_SERVICE_REQUEST, BacnetUnconfirmedServices.SERVICE_UNCONFIRMED_I_AM); Services.EncodeIamBroadcast(b, device_id, (uint)GetMaxApdu(), segmentation, m_vendor_id); m_client.Send(b.buffer, m_client.HeaderLength, b.offset - m_client.HeaderLength, broadcast, false, 0); }
static void handler_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { device.ReceivedIam(sender, adr, device_id); }
/*****************************************************************************************************/ static void handler_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { lock (DevicesList) { // Device already registred ? foreach (BacNode bn in DevicesList) { if (bn.getAdd(device_id) != null) { return; // Yes } } // Not already in the list DevicesList.Add(new BacNode(adr, device_id)); // add it } }
//TODO: just put in network. public void OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { if (BacnetDevices.ContainsKey(device_id)) //may happen since multiple WhoIs's are sent out... { return; } if (BacnetGlobalNetwork.FilterDeviceInstance && (device_id < BacnetGlobalNetwork.DeviceInstanceMin || device_id > BacnetGlobalNetwork.DeviceInstanceMax)) { return; } var device = new BACnetDevice(this, adr, device_id, Instance); BacnetDevices.Add(device_id, device); }
void handler_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { // simple write some information concerning the device RunOnUiThread(() => { tv.Text = tv.Text + System.Environment.NewLine + " BacnetAdr : " + adr.ToString() + ", Device Id : " + device_id.ToString(); }); }
static async void bacnet_client_OnIam(BacnetClient sender, BacnetAddress adr, uint device_id, uint max_apdu, BacnetSegmentations segmentation, ushort vendor_id) { if (device_id != 12345) { bacnet_client.Log.AddCustomEvent(LagoVista.Core.PlatformSupport.LogLevel.Message, "Program", $"Device Id {device_id} connected"); var deviceObjId = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, device_id); var objectIdList = await sender.ReadPropertyAsync(adr, deviceObjId, BacnetPropertyIds.PROP_OBJECT_LIST); foreach (var objId in objectIdList) { Console.WriteLine($"\t\t{objId}"); LinkedList <BacnetObjectId> object_list = new LinkedList <BacnetObjectId>(); if (Enum.IsDefined(typeof(BacnetObjectTypes), ((BacnetObjectId)objId.Value).Type)) { var val = (BacnetObjectId)objId.Value; object_list.AddLast(val); } foreach (var objectId in object_list) { var props = new List <BacnetPropertyIds>(); if (objectId.type == BacnetObjectTypes.OBJECT_DEVICE) { props.Add(BacnetPropertyIds.PROP_DESCRIPTION); props.Add(BacnetPropertyIds.PROP_SERIAL_NUMBER); props.Add(BacnetPropertyIds.PROP_MODEL_NAME); props.Add(BacnetPropertyIds.PROP_APPLICATION_SOFTWARE_VERSION); props.Add(BacnetPropertyIds.PROP_OUT_OF_SERVICE); props.Add(BacnetPropertyIds.PROP_LOCATION); props.Add(BacnetPropertyIds.PROP_OBJECT_NAME); props.Add(BacnetPropertyIds.PROP_OBJECT_IDENTIFIER); } else { props.Add(BacnetPropertyIds.PROP_PRESENT_VALUE); props.Add(BacnetPropertyIds.PROP_NUMBER_OF_STATES); props.Add(BacnetPropertyIds.PROP_OUT_OF_SERVICE); props.Add(BacnetPropertyIds.PROP_STATE_TEXT); props.Add(BacnetPropertyIds.PROP_RELIABILITY); props.Add(BacnetPropertyIds.PROP_DESCRIPTION); props.Add(BacnetPropertyIds.PROP_UNITS); } var results = await sender.ReadPropertyMultipleAsync(adr, objectId, props.ToArray()); var description = results.Where(prop => prop.property.GetPropertyId() == BacnetPropertyIds.PROP_DESCRIPTION).FirstOrDefault(); Console.WriteLine($"\t\t\tProperty {description.value[0]}:"); foreach (var child in results) { if (child.property.GetPropertyId() != BacnetPropertyIds.PROP_DESCRIPTION) { foreach (var value in child.value) { if (value.Tag != BacnetApplicationTags.BACNET_APPLICATION_TAG_ERROR) { if (child.property.GetPropertyId() == BacnetPropertyIds.PROP_UNITS) { var unitInt = int.Parse(value.Value.ToString()); var unit = (BacnetUnitsId)unitInt; Console.WriteLine($"\t\t\t\t{child.property.GetPropertyId()}: {unit}"); } else { Console.WriteLine($"\t\t\t\t{child.property.GetPropertyId()}: {value.Value}"); } } } } } } } } //ignore Iams from other devices. (Also loopbacks) }