async deconfigure(options) {
        if (this.controller.isInitialized) {
            throw new Error("Handle may only be deconfigured while the MQTT controller is not initialized");
        }

        if (options === undefined || options.unsubscribe !== false) {
            await this.controller.unsubscribe(this);
        }

        for (const component of this.hassComponents) {
            await component.deconfigure(Object.assign({
                cleanHass: false,
            }, options));
        }

        for (const child of this.children) {
            await child.deconfigure(options);
        }

        if (options === undefined || options.cleanHomie !== false) {
            await this.controller.dropHomieAttributes(this);
        }
    }
Deconfigure this handle. It will publish zero-length payloads to all autodiscovery-related attributes.
It will also deconfigure all children handles.
This function must be used as a callback of the controller's reconfigure method so that the state is updated
accordingly.

@public
@param {import("../MqttController").DeconfigureOptions} [options]
@return {Promise<void>}