/// <summary>
        /// Send unlock door sequence (security bypass)
        /// Forces nello to reconnect
        /// </summary>
        /// <returns></returns>
        public async Task UnlockDoorAsync()
        {
            try
            {
                await Task.Run(async() => {
                    // Remove nello's session

                    await _mqttServer.DisconnectClientAsync(NELLO_CLIENTID);
                    await Task.Delay(250);

                    _isTryingToUnlockDoor       = true;
                    _isExpectedResponseReceived = false;
                    int counter = 0;

                    // Todo: optimize: use e.g. event reset
                    // Blabla...
                    // Wait for nello's map message

                    while (!_mapMessageReceived)
                    {
                        await Task.Delay(200);
                    }

                    while (!_isExpectedResponseReceived && counter < 30)
                    {
                        // Send magic payload to test topic

                        await _mqttClient.SendMessageAsync(string.Format("/nello_one/{0}/test/", NELLO_TOPICID), TEST_TOPIC_MESSAGE);

                        // Delay - in my case - necessary
                        // Give nello some time to prepare for the next message
                        // Maybe you need to increase your delay value

                        await Task.Delay(500);

                        // Send magic payload to door topic

                        await _mqttClient.SendMessageAsync(string.Format("/nello_one/{0}/door/", NELLO_TOPICID), DOOR_TOPIC_MESSAGE);

                        // Delay included to have some time to react to nello responses

                        await Task.Delay(550);
                        counter += 1;
                    }

                    _mapMessageReceived   = false;
                    _isTryingToUnlockDoor = false;
                });
            }
            catch (Exception ex)
            {
                _logger.LogError("UnlockDoorAsync error:\n" + ex.ToString());
                _isTryingToUnlockDoor       = false;
                _isExpectedResponseReceived = false;
                _mapMessageReceived         = false;
            }
        }