This is the default server implementation of ElectricalPowerMeasurementBehavior.

The Matter specification requires the ElectricalPowerMeasurement cluster to support features we do not enable by default. You should use ElectricalPowerMeasurementServer.with to specialize the class for the features your implementation supports.

Hierarchy (view full)

Constructors

Properties

[reference]: Datasource<StateType>
agent: Agent
cluster: never

The implemented cluster.

context: ActionContext
endpoint: Endpoint<Empty>
events: EventEmitter & Omit<Events, never> & {
    accuracy$Changing: ClusterEvents.AttributeObservable<FixedAttribute<TypeFromFields<{
        accuracyRanges: FieldType<TypeFromFields<{
            fixedMax: ...;
            fixedMin: ...;
            fixedTypical: ...;
            percentMax: ...;
            percentMin: ...;
            percentTypical: ...;
            rangeMax: ...;
            rangeMin: ...;
        }>[]>;
        maxMeasuredValue: FieldType<number | bigint>;
        measured: FieldType<boolean>;
        measurementType: FieldType<MeasurementType>;
        minMeasuredValue: FieldType<number | bigint>;
    }>[], any>>;
    activePower$Changing: ClusterEvents.AttributeObservable<Attribute<null | number | bigint, any>>;
    numberOfMeasurementTypes$Changing: ClusterEvents.AttributeObservable<FixedAttribute<number, any>>;
    powerMode$Changing: ClusterEvents.AttributeObservable<Attribute<ElectricalPowerMeasurement.PowerMode, any>>;
} & {
    activeCurrent$Changing: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<null | number | bigint, any>>;
    ranges$Changing: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<TypeFromFields<{
        endSystime: OptionalFieldType<number | bigint>;
        endTimestamp: OptionalFieldType<number>;
        max: FieldType<number | bigint>;
        maxSystime: OptionalFieldType<number | bigint>;
        maxTimestamp: OptionalFieldType<number>;
        measurementType: FieldType<MeasurementType>;
        min: FieldType<number | bigint>;
        minSystime: OptionalFieldType<number | bigint>;
        minTimestamp: OptionalFieldType<number>;
        startSystime: OptionalFieldType<number | bigint>;
        startTimestamp: OptionalFieldType<number>;
    }>[], any>>;
    voltage$Changing: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<null | number | bigint, any>>;
} & {
    accuracy$Changed: ClusterEvents.AttributeObservable<FixedAttribute<TypeFromFields<{
        accuracyRanges: FieldType<TypeFromFields<{
            fixedMax: ...;
            fixedMin: ...;
            fixedTypical: ...;
            percentMax: ...;
            percentMin: ...;
            percentTypical: ...;
            rangeMax: ...;
            rangeMin: ...;
        }>[]>;
        maxMeasuredValue: FieldType<number | bigint>;
        measured: FieldType<boolean>;
        measurementType: FieldType<MeasurementType>;
        minMeasuredValue: FieldType<number | bigint>;
    }>[], any>>;
    activePower$Changed: ClusterEvents.AttributeObservable<Attribute<null | number | bigint, any>>;
    numberOfMeasurementTypes$Changed: ClusterEvents.AttributeObservable<FixedAttribute<number, any>>;
    powerMode$Changed: ClusterEvents.AttributeObservable<Attribute<ElectricalPowerMeasurement.PowerMode, any>>;
} & {
    activeCurrent$Changed: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<null | number | bigint, any>>;
    ranges$Changed: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<TypeFromFields<{
        endSystime: OptionalFieldType<number | bigint>;
        endTimestamp: OptionalFieldType<number>;
        max: FieldType<number | bigint>;
        maxSystime: OptionalFieldType<number | bigint>;
        maxTimestamp: OptionalFieldType<number>;
        measurementType: FieldType<MeasurementType>;
        min: FieldType<number | bigint>;
        minSystime: OptionalFieldType<number | bigint>;
        minTimestamp: OptionalFieldType<number>;
        startSystime: OptionalFieldType<number | bigint>;
        startTimestamp: OptionalFieldType<number>;
    }>[], any>>;
    voltage$Changed: undefined | ClusterEvents.AttributeObservable<OptionalAttribute<null | number | bigint, any>>;
} & {} & {
    measurementPeriodRanges?: ClusterEvents.EventObservable<OptionalEvent<TypeFromFields<{
        ranges: FieldType<TypeFromFields<{
            endSystime: ...;
            endTimestamp: ...;
            max: ...;
            maxSystime: ...;
            maxTimestamp: ...;
            measurementType: ...;
            min: ...;
            minSystime: ...;
            minTimestamp: ...;
            startSystime: ...;
            startTimestamp: ...;
        }>[]>;
    }>, any>>;
}

Access the behavior's events.

features: TypeFromBitSchema<{
    alternatingCurrent: BitFlag;
    directCurrent: BitFlag;
    harmonics: BitFlag;
    polyphasePower: BitFlag;
    powerQuality: BitFlag;
}>

Supported features as a flag object.

session: SecureSession
state: Omit<{}, never> & {
    activePower: null | number | bigint;
    powerMode: ElectricalPowerMeasurement.PowerMode;
} & {
    activeCurrent?: null | number | bigint;
    ranges?: TypeFromFields<{
        endSystime: OptionalFieldType<number | bigint>;
        endTimestamp: OptionalFieldType<number>;
        max: FieldType<number | bigint>;
        maxSystime: OptionalFieldType<number | bigint>;
        maxTimestamp: OptionalFieldType<number>;
        measurementType: FieldType<MeasurementType>;
        min: FieldType<number | bigint>;
        minSystime: OptionalFieldType<number | bigint>;
        minTimestamp: OptionalFieldType<number>;
        startSystime: OptionalFieldType<number | bigint>;
        startTimestamp: OptionalFieldType<number>;
    }>[];
    voltage?: null | number | bigint;
} & {
    accuracy: TypeFromFields<{
        accuracyRanges: FieldType<TypeFromFields<{
            fixedMax: OptionalFieldType<(...) | (...)>;
            fixedMin: OptionalFieldType<(...) | (...)>;
            fixedTypical: OptionalFieldType<(...) | (...)>;
            percentMax: OptionalFieldType<number>;
            percentMin: OptionalFieldType<number>;
            percentTypical: OptionalFieldType<number>;
            rangeMax: FieldType<(...) | (...)>;
            rangeMin: FieldType<(...) | (...)>;
        }>[]>;
        maxMeasuredValue: FieldType<number | bigint>;
        measured: FieldType<boolean>;
        measurementType: FieldType<MeasurementType>;
        minMeasuredValue: FieldType<number | bigint>;
    }>[];
    numberOfMeasurementTypes: number;
} & {}

Access the behavior's state.

cluster: Of<{
    attributes: {
        accuracy: FixedAttribute<TypeFromFields<{
            accuracyRanges: FieldType<TypeFromFields<{
                fixedMax: ...;
                fixedMin: ...;
                fixedTypical: ...;
                percentMax: ...;
                percentMin: ...;
                percentTypical: ...;
                rangeMax: ...;
                rangeMin: ...;
            }>[]>;
            maxMeasuredValue: FieldType<number | bigint>;
            measured: FieldType<boolean>;
            measurementType: FieldType<MeasurementType>;
            minMeasuredValue: FieldType<number | bigint>;
        }>[], any>;
        activeCurrent: OptionalAttribute<null | number | bigint, any>;
        activePower: Attribute<null | number | bigint, any>;
        numberOfMeasurementTypes: FixedAttribute<number, any>;
        powerMode: Attribute<ElectricalPowerMeasurement.PowerMode, any>;
        ranges: OptionalAttribute<TypeFromFields<{
            endSystime: OptionalFieldType<number | bigint>;
            endTimestamp: OptionalFieldType<number>;
            max: FieldType<number | bigint>;
            maxSystime: OptionalFieldType<number | bigint>;
            maxTimestamp: OptionalFieldType<number>;
            measurementType: FieldType<MeasurementType>;
            min: FieldType<number | bigint>;
            minSystime: OptionalFieldType<number | bigint>;
            minTimestamp: OptionalFieldType<number>;
            startSystime: OptionalFieldType<number | bigint>;
            startTimestamp: OptionalFieldType<number>;
        }>[], any>;
        voltage: OptionalAttribute<null | number | bigint, any>;
    };
    events: {
        measurementPeriodRanges: OptionalEvent<TypeFromFields<{
            ranges: FieldType<TypeFromFields<{
                endSystime: OptionalFieldType<(...)>;
                endTimestamp: OptionalFieldType<(...)>;
                max: FieldType<(...)>;
                maxSystime: OptionalFieldType<(...)>;
                maxTimestamp: OptionalFieldType<(...)>;
                measurementType: FieldType<(...)>;
                min: FieldType<(...)>;
                minSystime: OptionalFieldType<(...)>;
                minTimestamp: OptionalFieldType<(...)>;
                startSystime: OptionalFieldType<(...)>;
                startTimestamp: OptionalFieldType<(...)>;
            }>[]>;
        }>, any>;
    };
    extensions: readonly [{
        component: {
            attributes: {
                apparentCurrent: OptionalAttribute<null | number | bigint, any>;
                apparentPower: OptionalAttribute<null | number | bigint, any>;
                frequency: OptionalAttribute<null | number | bigint, any>;
                powerFactor: OptionalAttribute<null | number | bigint, any>;
                reactiveCurrent: OptionalAttribute<null | number | bigint, any>;
                reactivePower: OptionalAttribute<null | number | bigint, any>;
                rmsCurrent: OptionalAttribute<null | number | bigint, any>;
                rmsPower: OptionalAttribute<null | number | bigint, any>;
                rmsVoltage: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            alternatingCurrent: true;
        };
    }, {
        component: {
            attributes: {
                harmonicCurrents: Attribute<null | TypeFromFields<{
                    measurement: ...;
                    order: ...;
                }>[], any>;
            };
        };
        flags: {
            harmonics: true;
        };
    }, {
        component: {
            attributes: {
                harmonicPhases: Attribute<null | TypeFromFields<{
                    measurement: ...;
                    order: ...;
                }>[], any>;
            };
        };
        flags: {
            powerQuality: true;
        };
    }, {
        component: {
            attributes: {
                neutralCurrent: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            harmonics: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            powerQuality: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            directCurrent: false;
        };
    }];
    features: {
        alternatingCurrent: BitFlag;
        directCurrent: BitFlag;
        harmonics: BitFlag;
        polyphasePower: BitFlag;
        powerQuality: BitFlag;
    };
    id: 144;
    name: "ElectricalPowerMeasurement";
    revision: 1;
}>

Base cluster state include all attribute values but may be extended by subclasses.

defaults: ClusterState.Type<Of<{
    attributes: {
        accuracy: FixedAttribute<TypeFromFields<{
            accuracyRanges: FieldType<TypeFromFields<(...)>[]>;
            maxMeasuredValue: FieldType<number | bigint>;
            measured: FieldType<boolean>;
            measurementType: FieldType<MeasurementType>;
            minMeasuredValue: FieldType<number | bigint>;
        }>[], any>;
        activeCurrent: OptionalAttribute<null | number | bigint, any>;
        activePower: Attribute<null | number | bigint, any>;
        numberOfMeasurementTypes: FixedAttribute<number, any>;
        powerMode: Attribute<ElectricalPowerMeasurement.PowerMode, any>;
        ranges: OptionalAttribute<TypeFromFields<{
            endSystime: OptionalFieldType<number | bigint>;
            endTimestamp: OptionalFieldType<number>;
            max: FieldType<number | bigint>;
            maxSystime: OptionalFieldType<number | bigint>;
            maxTimestamp: OptionalFieldType<number>;
            measurementType: FieldType<MeasurementType>;
            min: FieldType<number | bigint>;
            minSystime: OptionalFieldType<number | bigint>;
            minTimestamp: OptionalFieldType<number>;
            startSystime: OptionalFieldType<number | bigint>;
            startTimestamp: OptionalFieldType<number>;
        }>[], any>;
        voltage: OptionalAttribute<null | number | bigint, any>;
    };
    events: {
        measurementPeriodRanges: OptionalEvent<TypeFromFields<{
            ranges: FieldType<TypeFromFields<{
                endSystime: ...;
                endTimestamp: ...;
                max: ...;
                maxSystime: ...;
                maxTimestamp: ...;
                measurementType: ...;
                min: ...;
                minSystime: ...;
                minTimestamp: ...;
                startSystime: ...;
                startTimestamp: ...;
            }>[]>;
        }>, any>;
    };
    extensions: readonly [{
        component: {
            attributes: {
                apparentCurrent: OptionalAttribute<null | number | bigint, any>;
                apparentPower: OptionalAttribute<null | number | bigint, any>;
                frequency: OptionalAttribute<null | number | bigint, any>;
                powerFactor: OptionalAttribute<null | number | bigint, any>;
                reactiveCurrent: OptionalAttribute<null | number | bigint, any>;
                reactivePower: OptionalAttribute<null | number | bigint, any>;
                rmsCurrent: OptionalAttribute<null | number | bigint, any>;
                rmsPower: OptionalAttribute<null | number | bigint, any>;
                rmsVoltage: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            alternatingCurrent: true;
        };
    }, {
        component: {
            attributes: {
                harmonicCurrents: Attribute<null | TypeFromFields<(...)>[], any>;
            };
        };
        flags: {
            harmonics: true;
        };
    }, {
        component: {
            attributes: {
                harmonicPhases: Attribute<null | TypeFromFields<(...)>[], any>;
            };
        };
        flags: {
            powerQuality: true;
        };
    }, {
        component: {
            attributes: {
                neutralCurrent: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            harmonics: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            powerQuality: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            directCurrent: false;
        };
    }];
    features: {
        alternatingCurrent: BitFlag;
        directCurrent: BitFlag;
        harmonics: BitFlag;
        polyphasePower: BitFlag;
        powerQuality: BitFlag;
    };
    id: 144;
    name: "ElectricalPowerMeasurement";
    revision: 1;
}>, typeof ClusterBehavior>
dependencies?: Iterable<Type, any, any>
early: boolean
Events: ClusterEvents.Type<Of<{
    attributes: {
        accuracy: FixedAttribute<TypeFromFields<{
            accuracyRanges: FieldType<TypeFromFields<(...)>[]>;
            maxMeasuredValue: FieldType<number | bigint>;
            measured: FieldType<boolean>;
            measurementType: FieldType<MeasurementType>;
            minMeasuredValue: FieldType<number | bigint>;
        }>[], any>;
        activeCurrent: OptionalAttribute<null | number | bigint, any>;
        activePower: Attribute<null | number | bigint, any>;
        numberOfMeasurementTypes: FixedAttribute<number, any>;
        powerMode: Attribute<ElectricalPowerMeasurement.PowerMode, any>;
        ranges: OptionalAttribute<TypeFromFields<{
            endSystime: OptionalFieldType<number | bigint>;
            endTimestamp: OptionalFieldType<number>;
            max: FieldType<number | bigint>;
            maxSystime: OptionalFieldType<number | bigint>;
            maxTimestamp: OptionalFieldType<number>;
            measurementType: FieldType<MeasurementType>;
            min: FieldType<number | bigint>;
            minSystime: OptionalFieldType<number | bigint>;
            minTimestamp: OptionalFieldType<number>;
            startSystime: OptionalFieldType<number | bigint>;
            startTimestamp: OptionalFieldType<number>;
        }>[], any>;
        voltage: OptionalAttribute<null | number | bigint, any>;
    };
    events: {
        measurementPeriodRanges: OptionalEvent<TypeFromFields<{
            ranges: FieldType<TypeFromFields<{
                endSystime: ...;
                endTimestamp: ...;
                max: ...;
                maxSystime: ...;
                maxTimestamp: ...;
                measurementType: ...;
                min: ...;
                minSystime: ...;
                minTimestamp: ...;
                startSystime: ...;
                startTimestamp: ...;
            }>[]>;
        }>, any>;
    };
    extensions: readonly [{
        component: {
            attributes: {
                apparentCurrent: OptionalAttribute<null | number | bigint, any>;
                apparentPower: OptionalAttribute<null | number | bigint, any>;
                frequency: OptionalAttribute<null | number | bigint, any>;
                powerFactor: OptionalAttribute<null | number | bigint, any>;
                reactiveCurrent: OptionalAttribute<null | number | bigint, any>;
                reactivePower: OptionalAttribute<null | number | bigint, any>;
                rmsCurrent: OptionalAttribute<null | number | bigint, any>;
                rmsPower: OptionalAttribute<null | number | bigint, any>;
                rmsVoltage: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            alternatingCurrent: true;
        };
    }, {
        component: {
            attributes: {
                harmonicCurrents: Attribute<null | TypeFromFields<(...)>[], any>;
            };
        };
        flags: {
            harmonics: true;
        };
    }, {
        component: {
            attributes: {
                harmonicPhases: Attribute<null | TypeFromFields<(...)>[], any>;
            };
        };
        flags: {
            powerQuality: true;
        };
    }, {
        component: {
            attributes: {
                neutralCurrent: OptionalAttribute<null | number | bigint, any>;
            };
        };
        flags: {
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            polyphasePower: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            harmonics: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            powerQuality: true;
        };
    }, {
        component: false;
        flags: {
            alternatingCurrent: false;
            directCurrent: false;
        };
    }];
    features: {
        alternatingCurrent: BitFlag;
        directCurrent: BitFlag;
        harmonics: BitFlag;
        polyphasePower: BitFlag;
        powerQuality: BitFlag;
    };
    id: 144;
    name: "ElectricalPowerMeasurement";
    revision: 1;
}>, typeof ClusterBehavior>
ExtensionInterface: {}
id

The behavior ID for ClusterBehaviors is the name of the cluster.

Interface: {
    components: never[];
}
Internal: (new () => {})

Type declaration

    • new (): {}
    • Implementation of internal state. Subclasses may override to extend.

      Returns {}

    name: string
    schema?: Schema
    State: (new () => ClusterState.Type<Of<{
        attributes: {
            accuracy: FixedAttribute<TypeFromFields<{
                accuracyRanges: FieldType<(...)[]>;
                maxMeasuredValue: FieldType<(...) | (...)>;
                measured: FieldType<boolean>;
                measurementType: FieldType<MeasurementType>;
                minMeasuredValue: FieldType<(...) | (...)>;
            }>[], any>;
            activeCurrent: OptionalAttribute<null | number | bigint, any>;
            activePower: Attribute<null | number | bigint, any>;
            numberOfMeasurementTypes: FixedAttribute<number, any>;
            powerMode: Attribute<ElectricalPowerMeasurement.PowerMode, any>;
            ranges: OptionalAttribute<TypeFromFields<{
                endSystime: OptionalFieldType<(...) | (...)>;
                endTimestamp: OptionalFieldType<number>;
                max: FieldType<(...) | (...)>;
                maxSystime: OptionalFieldType<(...) | (...)>;
                maxTimestamp: OptionalFieldType<number>;
                measurementType: FieldType<MeasurementType>;
                min: FieldType<(...) | (...)>;
                minSystime: OptionalFieldType<(...) | (...)>;
                minTimestamp: OptionalFieldType<number>;
                startSystime: OptionalFieldType<(...) | (...)>;
                startTimestamp: OptionalFieldType<number>;
            }>[], any>;
            voltage: OptionalAttribute<null | number | bigint, any>;
        };
        events: {
            measurementPeriodRanges: OptionalEvent<TypeFromFields<{
                ranges: FieldType<TypeFromFields<(...)>[]>;
            }>, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    apparentCurrent: OptionalAttribute<null | number | bigint, any>;
                    apparentPower: OptionalAttribute<null | number | bigint, any>;
                    frequency: OptionalAttribute<null | number | bigint, any>;
                    powerFactor: OptionalAttribute<null | number | bigint, any>;
                    reactiveCurrent: OptionalAttribute<null | number | bigint, any>;
                    reactivePower: OptionalAttribute<null | number | bigint, any>;
                    rmsCurrent: OptionalAttribute<null | number | bigint, any>;
                    rmsPower: OptionalAttribute<null | number | bigint, any>;
                    rmsVoltage: OptionalAttribute<null | number | bigint, any>;
                };
            };
            flags: {
                alternatingCurrent: true;
            };
        }, {
            component: {
                attributes: {
                    harmonicCurrents: Attribute<null | (...)[], any>;
                };
            };
            flags: {
                harmonics: true;
            };
        }, {
            component: {
                attributes: {
                    harmonicPhases: Attribute<null | (...)[], any>;
                };
            };
            flags: {
                powerQuality: true;
            };
        }, {
            component: {
                attributes: {
                    neutralCurrent: OptionalAttribute<null | number | bigint, any>;
                };
            };
            flags: {
                polyphasePower: true;
            };
        }, {
            component: false;
            flags: {
                alternatingCurrent: false;
                polyphasePower: true;
            };
        }, {
            component: false;
            flags: {
                alternatingCurrent: false;
                harmonics: true;
            };
        }, {
            component: false;
            flags: {
                alternatingCurrent: false;
                powerQuality: true;
            };
        }, {
            component: false;
            flags: {
                alternatingCurrent: false;
                directCurrent: false;
            };
        }];
        features: {
            alternatingCurrent: BitFlag;
            directCurrent: BitFlag;
            harmonics: BitFlag;
            polyphasePower: BitFlag;
            powerQuality: BitFlag;
        };
        id: 144;
        name: "ElectricalPowerMeasurement";
        revision: 1;
    }>, typeof ClusterBehavior>)
    supervisor: RootSupervisor
    supports: ((other: Type) => boolean)

    Type declaration

      • (other): boolean
      • Does this behavior support functionality of a specific implementation?

        Parameters

        Returns boolean

    Methods

    • Execute logic with elevated privileges.

      The provided function executes with privileges escalated to offline mode. This is not commonly necessary.

      Elevated logic effectively ignores ACLs so should be used with care.

      Note that interactions with the behavior will remain elevated until the synchronous completion of this call. You should only elevate privileges for synchronous logic.

      Parameters

      • fn: (() => void)

        the elevated logic

          • (): void
          • Returns void

      Returns void

    • Create a generic callback function that has the same properties as a Reactor.

      Like a reactor, the callback's "this" will be bound to an active Behavior instance. Because of this: The reactor MUST be a real JS function - arrow functions will not work!

      Type Parameters

      • A extends any[]
      • R

      Parameters

      Returns ((...args: A) => undefined | R)

        • (...args): undefined | R
        • Parameters

          • Rest...args: A

          Returns undefined | R

    • Behaviors are ephemeral and should not perform initialization in their constructor. They can override this method instead.

      This method may be synchronous or asyncronous. If asynchronous, the behavior will not be available for external use until initialization completes.

      Parameters

      • Optional_options: {}

        Returns MaybePromise

      • Install a Reactor.

        Important: The reactor MUST be a real JS function - arrow functions will not work!

        Type Parameters

        Parameters

        Returns void

      • Type Parameters

        Parameters

        Returns This