constructor(options) {
        // noinspection JSCheckFunctionSignatures
        // @ts-ignore
        super(Object.assign(options, {
            gettable: options.getter !== undefined,
            settable: options.setter !== undefined,
        }));

        this.unit = options.unit;
        this.getter = options.getter;
        this.setter = options.setter;

        if (this.setter === undefined && this.getter === undefined) {
            throw new Error("At least one of setter and getter must be defined!");
        }
    }
Please see https://homieiot.github.io/specification/spec-core-develop//#property-attributes
for more details

Setter and getter are mutually optional. At least one of them has to be provided.
Providing only "getter" will result in a read-only property.
Providing only "setter" will result in a command property, and a getter will be
provided that reflects the set value back to MQTT.

topicName must follow the Topic ID format: https://homieiot.github.io/specification/spec-core-develop/#topic-ids

@override
@param {object} options
@param {import("./NodeMqttHandle")} options.parent
@param {import("../MqttController")} options.controller MqttController instance
@param {string} options.topicName Topic ID following the linked format
@param {string} options.friendlyName User-friendly name for this property
@param {getterCallback} [options.getter] Getter coroutine
@param {setterCallback} [options.setter] Setter coroutine
@param {import("../homie/DataType")|string} options.datatype Data type for this property
@param {import("../common/Unit")|string} [options.unit] Optional unit for this property
@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.