Пример #1
0
        public void IsEqual()
        {
            IeeeAddress address1 = new IeeeAddress("17880100dc880b");
            IeeeAddress address2 = new IeeeAddress("17880100dc880b");

            Assert.True(address1.Equals(address2));
        }
Пример #2
0
        private async Task Initialise()
        {
            byte?currentState = (byte?)await _iasZoneCluster.GetAttribute(ZclIasZoneCluster.ATTR_ZONESTATE).ReadValue(long.MaxValue);

            if (currentState.HasValue)
            {
                ZoneStateEnum currentStateEnum = (ZoneStateEnum)currentState;
                Log.Debug("{Address}: IAS CIE state is currently {StateEnum}[{State}]", _iasZoneCluster.GetZigBeeAddress(), currentStateEnum, currentState);
                if (currentStateEnum == ZoneStateEnum.ENROLLED)
                {
                    Log.Debug("{Address}: IAS CIE is already enrolled", _iasZoneCluster.GetZigBeeAddress());
                    return;
                }
            }
            else
            {
                Log.Debug("{Address}: IAS CIE failed to get state", _iasZoneCluster.GetZigBeeAddress());
            }

            ZclAttribute cieAddressAttribute = _iasZoneCluster.GetAttribute(ZclIasZoneCluster.ATTR_IASCIEADDRESS);
            IeeeAddress  currentIeeeAddress  = (IeeeAddress)await cieAddressAttribute.ReadValue(0);

            Log.Debug("{Address}: IAS CIE address is currently {Address2}", _iasZoneCluster.GetZigBeeAddress(), currentIeeeAddress);

            if (!_ieeeAddress.Equals(currentIeeeAddress))
            {
                // Set the CIE address in the remote device. This is where the device will send its reports.
                await cieAddressAttribute.WriteValue(_ieeeAddress);

                currentIeeeAddress = (IeeeAddress)await cieAddressAttribute.ReadValue(0);

                if (_ieeeAddress.Equals(currentIeeeAddress))
                {
                    Log.Debug("{Address}: IAS CIE address is confirmed {Address2}", _iasZoneCluster.GetZigBeeAddress(), currentIeeeAddress);
                }
                else
                {
                    Log.Warning("{Address}: IAS CIE address is NOT confirmed {Address2}", _iasZoneCluster.GetZigBeeAddress(), currentIeeeAddress);
                }
            }

            byte?currentZone = (byte?)await _iasZoneCluster.GetAttribute(ZclIasZoneCluster.ATTR_ZONEID).ReadValue(0);

            if (currentZone == null)
            {
                Log.Debug("{Address}: IAS CIE zone ID request failed", _iasZoneCluster.GetZigBeeAddress());
            }
            else
            {
                Log.Debug("{Address}: IAS CIE zone ID is currently {ZoneId}", _iasZoneCluster.GetZigBeeAddress(), currentZone);
            }

            ZoneType = (ushort?)await _iasZoneCluster.GetAttribute(ZclIasZoneCluster.ATTR_ZONETYPE).ReadValue(long.MaxValue);

            if (ZoneType == null)
            {
                Log.Debug("{Address}: IAS CIE zone type request failed", _iasZoneCluster.GetZigBeeAddress());
            }
            else
            {
                Log.Debug("{Address}: IAS CIE zone type is {ZoneTypeEnum} ({ZoneTypeValue})", _iasZoneCluster.GetZigBeeAddress(), ((ZoneTypeEnum)ZoneType), ZoneType.Value.ToString("X2"));
            }

            // Start the auto-enroll timer
            _autoEnrollmentCancellationToken = new CancellationTokenSource();
            _ = Task.Run(RunAutoEnrollmentTask, _autoEnrollmentCancellationToken.Token);
        }