constructor(options) {
        this.parent = options.parent === undefined ? null : options.parent;
        this.controller = options.controller;
        this.topicName = options.topicName;
        this.friendlyName = options.friendlyName;
        this.dataType = options.datatype;
        this.format = options.format;
        this.helpText = options.helpText;
        this.helpMayChange = options.helpMayChange;

        this.gettable = options.gettable === undefined ? false : options.gettable;
        this.settable = options.settable === undefined ? false : options.settable;
        this.isCommand = !this.gettable && this.settable;

        this.retained = options.retained ?? !this.isCommand;

        this.lastSetValue = null;
        this.configured = false;

        if (this.controller === undefined) {
            throw new Error("Initialized MQTT handle without controller");
        }

        /** @type {Array<MqttHandle>} */
        this.children = [];

        /** @type {Array<import("../homeassistant/components/HassComponent")>} */
        this.hassComponents = [];
    }
@param {object} options
@param {string} options.topicName
@param {string} options.friendlyName
@param {import("../MqttController")} options.controller MqttController instance
@param {boolean} [options.gettable] Whether this handle's root topic can be published, Default false
@param {boolean} [options.settable] Whether this handle's /set topic should be subscribed to. Default false
@param {DataType} [options.datatype] Data type for this handle, if gettable/settable
@param {string} [options.format] Restrictions or options based on the given datatype
@param {boolean} [options.retained] Whether to retain this property, default true
@param {string} [options.helpText] Optional help message to be included in the documentation
@param {object} [options.helpMayChange] Optional object of what:dueTo pairs explaining stuff that may have a
different format, unit, children properties and that should be scanned dynamically, to be included in the docs.
@param {MqttHandle} [options.parent]