Skip to content

Commit

Permalink
add monitoredItem triggering - part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
erossignon committed Mar 2, 2021
1 parent 34a09bd commit 460826d
Show file tree
Hide file tree
Showing 16 changed files with 723 additions and 130 deletions.
4 changes: 2 additions & 2 deletions packages/node-opcua-address-space/src/ua_variable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ export class UAVariable extends BaseNode implements UAVariablePublic {
}
if (
this.dataType.namespace === 0 &&
this.dataType.value == DataType.LocalizedText &&
this.dataType.value === DataType.LocalizedText &&
variant.dataType !== DataType.LocalizedText
) {
throw new Error("Variant must provide a valid LocalizedText" + variant.toString());
Expand Down Expand Up @@ -1260,7 +1260,7 @@ export class UAVariable extends BaseNode implements UAVariablePublic {
value: prepareVariantValue(dataType, this.$extensionObject[name])
}));
*/

assert(propertyNode.readValue().statusCode.equals(StatusCodes.Good));

const self = this;
Expand Down
23 changes: 13 additions & 10 deletions packages/node-opcua-client/source/client_session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ import { DataValue } from "node-opcua-data-value";
import { NodeId, NodeIdLike } from "node-opcua-nodeid";
import { IBasicSession } from "node-opcua-pseudo-session";
import { ErrorCallback } from "node-opcua-status-code";
import {
BrowseDescriptionOptions,
BrowseResult
} from "node-opcua-service-browse";
import { BrowseDescriptionOptions, BrowseResult } from "node-opcua-service-browse";
import { CallMethodRequest, CallMethodRequestOptions, CallMethodResult } from "node-opcua-service-call";
import { EndpointDescription } from "node-opcua-service-endpoints";
import { HistoryReadResult } from "node-opcua-service-history";
Expand Down Expand Up @@ -50,7 +47,10 @@ import {
SetMonitoringModeResponse,
TransferSubscriptionsRequest,
TransferSubscriptionsRequestOptions,
TransferSubscriptionsResponse
TransferSubscriptionsResponse,
SetTriggeringRequest,
SetTriggeringResponse,
SetTriggeringRequestOptions
} from "node-opcua-service-subscription";
import { BrowsePath, BrowsePathResult } from "node-opcua-service-translate-browse-path";
import { WriteValue, WriteValueOptions } from "node-opcua-service-write";
Expand Down Expand Up @@ -152,8 +152,8 @@ export interface ClientSession extends EventEmitter {
on(event: "session_closed", eventHandler: (statusCode: StatusCode) => void): this;

/**
* session_restored is raised when the session and realted subscription
* have been fullt repaired after a reconnection.
* session_restored is raised when the session and related subscription
* have been fully repaired after a reconnection.
*/
on(event: "session_restored", eventHandler: () => void): this;

Expand Down Expand Up @@ -237,7 +237,7 @@ export interface ClientSessionCallService {
* @method call
*
* @param methodsToCall {CallMethodRequest[]} the call method request array
* @param callbackstad
* @param callback
*
*
* @example :
Expand All @@ -251,9 +251,9 @@ export interface ClientSessionCallService {
* new Variant({...}),
* ]
* }];
* session.call(methodsToCall,function(err,callResutls) {
* session.call(methodsToCall,function(err,callResults) {
* if (!err) {
* const callResult = callResutls[0];
* const callResult = callResults[0];
* console.log(" statusCode = ",rep.statusCode);
* console.log(" inputArgumentResults[0] = ",callResult.inputArgumentResults[0].toString());
* console.log(" inputArgumentResults[1] = ",callResult.inputArgumentResults[1].toString());
Expand Down Expand Up @@ -403,6 +403,9 @@ export interface ClientSessionRawSubscriptionService {
deleteMonitoredItems(request: DeleteMonitoredItemsRequestLike, callback: Callback<DeleteMonitoredItemsResponse>): void;

deleteMonitoredItems(request: DeleteMonitoredItemsRequestLike): Promise<DeleteMonitoredItemsResponse>;

setTriggering(request: SetTriggeringRequestOptions): Promise<SetTriggeringResponse>;
setTriggering(request: SetTriggeringRequestOptions, callback: ResponseCallback<SetTriggeringResponse>): void;
}

// subscription service
Expand Down
23 changes: 21 additions & 2 deletions packages/node-opcua-client/source/client_subscription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import { EventEmitter } from "events";

import { DiagnosticInfo } from "node-opcua-data-model";
import { ReadValueIdOptions, TimestampsToReturn } from "node-opcua-service-read";
import { MonitoringParametersOptions, NotificationMessage } from "node-opcua-service-subscription";
import {
MonitoringMode,
MonitoringParametersOptions,
NotificationMessage,
SetTriggeringResponse
} from "node-opcua-service-subscription";
import { StatusCode } from "node-opcua-status-code";
import { ErrorCallback } from "node-opcua-status-code";

Expand Down Expand Up @@ -160,12 +165,14 @@ export interface ClientSubscription extends EventEmitter {
monitor(
itemToMonitor: ReadValueIdOptions,
requestedParameters: MonitoringParametersOptions,
timestampsToReturn: TimestampsToReturn
timestampsToReturn: TimestampsToReturn,
monitoringMode?: MonitoringMode
): Promise<ClientMonitoredItem>;
monitor(
itemToMonitor: ReadValueIdOptions,
requestedParameters: MonitoringParametersOptions,
timestampsToReturn: TimestampsToReturn,
monitoringMode: MonitoringMode,
done: (err: Error | null, monitoredItem?: ClientMonitoredItem) => void
): void;

Expand Down Expand Up @@ -201,6 +208,18 @@ export interface ClientSubscription extends EventEmitter {
getMonitoredItems(): Promise<MonitoredItemData>;
getMonitoredItems(callback: (err: Error | null, result?: MonitoredItemData) => void): void;

setTriggering(
triggeringItem: ClientMonitoredItemBase,
linksToAdd: ClientMonitoredItemBase[] | null,
linksToRemove: ClientMonitoredItemBase[] | null,
callback: (err: Error | null, response?: SetTriggeringResponse) => void
): void;
setTriggering(
triggeringItem: ClientMonitoredItemBase,
linksToAdd: ClientMonitoredItemBase[] | null,
linksToRemove: ClientMonitoredItemBase[] | null
): Promise<SetTriggeringResponse>;

terminate(): Promise<void>;
terminate(callback: ErrorCallback): void;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ export class ClientMonitoredItemGroupImpl extends EventEmitter implements Client
subscription: ClientSubscription,
itemsToMonitor: any[],
monitoringParameters: any,
timestampsToReturn: TimestampsToReturn
timestampsToReturn: TimestampsToReturn,
monitoringMode: MonitoringMode = MonitoringMode.Reporting
) {
super();
assert(Array.isArray(itemsToMonitor));
Expand All @@ -56,13 +57,18 @@ export class ClientMonitoredItemGroupImpl extends EventEmitter implements Client
assert(subscription.constructor.name === "ClientSubscriptionImpl");

this.subscription = subscription;
this.timestampsToReturn = timestampsToReturn;
this.monitoringMode = monitoringMode;

this.monitoredItems = itemsToMonitor.map((itemToMonitor) => {
return new ClientMonitoredItemImpl(subscription, itemToMonitor, monitoringParameters, TimestampsToReturn.Both);
return new ClientMonitoredItemImpl(
subscription,
itemToMonitor,
monitoringParameters,
TimestampsToReturn.Both,
this.monitoringMode
);
});

this.timestampsToReturn = timestampsToReturn;
this.monitoringMode = MonitoringMode.Reporting;
}

public toString(): string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export class ClientMonitoredItemImpl extends EventEmitter implements ClientMonit
subscription: ClientSubscription,
itemToMonitor: ReadValueIdOptions,
monitoringParameters: MonitoringParametersOptions,
timestampsToReturn: TimestampsToReturn
timestampsToReturn: TimestampsToReturn,
monitoringMode: MonitoringMode = MonitoringMode.Reporting
) {
super();

Expand All @@ -78,7 +79,7 @@ export class ClientMonitoredItemImpl extends EventEmitter implements ClientMonit

this.itemToMonitor = new ReadValueId(itemToMonitor);
this.monitoringParameters = new MonitoringParameters(monitoringParameters);
this.monitoringMode = MonitoringMode.Reporting;
this.monitoringMode = monitoringMode;
assert(this.monitoringParameters.clientHandle === 0xffffffff, "should not have a client handle yet");

assert(subscription.session, "expecting session");
Expand Down Expand Up @@ -335,7 +336,8 @@ ClientMonitoredItem.create = (
subscription: ClientSubscription,
itemToMonitor: ReadValueIdOptions,
monitoringParameters: MonitoringParametersOptions,
timestampsToReturn: TimestampsToReturn
timestampsToReturn: TimestampsToReturn,
monitoringMode: MonitoringMode = MonitoringMode.Reporting
): ClientMonitoredItem => {
return ClientMonitoredItem_create(subscription, itemToMonitor, monitoringParameters, timestampsToReturn);
return ClientMonitoredItem_create(subscription, itemToMonitor, monitoringParameters, timestampsToReturn, monitoringMode);
};
20 changes: 10 additions & 10 deletions packages/node-opcua-client/source/private/client_session_impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ import {
SetMonitoringModeResponse,
SetPublishingModeRequest,
SetPublishingModeResponse,
SetTriggeringRequestOptions,
SetTriggeringResponse,
SetTriggeringRequest,
TransferSubscriptionsRequest,
TransferSubscriptionsResponse
} from "node-opcua-service-subscription";
Expand Down Expand Up @@ -472,9 +475,8 @@ export class ClientSessionImpl extends EventEmitter implements ClientSession {
callback: ResponseCallback<BrowseResult[]>
): void;

public browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean): Promise<BrowseResult>;

public browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean): Promise<BrowseResult[]>;
public async browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean): Promise<BrowseResult>;
public async browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean): Promise<BrowseResult[]>;
public browseNext(...args: any[]): any {
const arg0 = args[0];
const isArray = Array.isArray(arg0);
Expand Down Expand Up @@ -1251,20 +1253,17 @@ export class ClientSessionImpl extends EventEmitter implements ClientSession {
});
}

/**
* @method deleteSubscriptions
* @async
* @example:
*
* session.deleteSubscriptions(request,function(err,response) {} );
*/
public deleteSubscriptions(
options: DeleteSubscriptionsRequestLike,
callback?: ResponseCallback<DeleteSubscriptionsResponse>
): any {
this._defaultRequest(DeleteSubscriptionsRequest, DeleteSubscriptionsResponse, options, callback);
}

public setTriggering(request: SetTriggeringRequestOptions, callback?: ResponseCallback<SetTriggeringResponse>): any {
this._defaultRequest(SetTriggeringRequest, SetTriggeringResponse, request, callback);
}

/**
* @method transferSubscriptions
* @async
Expand Down Expand Up @@ -2284,6 +2283,7 @@ ClientSessionImpl.prototype.transferSubscriptions = thenify.withCallback(ClientS
ClientSessionImpl.prototype.createMonitoredItems = thenify.withCallback(ClientSessionImpl.prototype.createMonitoredItems, opts);
ClientSessionImpl.prototype.modifyMonitoredItems = thenify.withCallback(ClientSessionImpl.prototype.modifyMonitoredItems, opts);
ClientSessionImpl.prototype.modifySubscription = thenify.withCallback(ClientSessionImpl.prototype.modifySubscription, opts);
ClientSessionImpl.prototype.setTriggering = thenify.withCallback(ClientSessionImpl.prototype.setTriggering, opts);
ClientSessionImpl.prototype.setMonitoringMode = thenify.withCallback(ClientSessionImpl.prototype.setMonitoringMode, opts);
ClientSessionImpl.prototype.publish = thenify.withCallback(ClientSessionImpl.prototype.publish, opts);
ClientSessionImpl.prototype.republish = thenify.withCallback(ClientSessionImpl.prototype.republish, opts);
Expand Down

0 comments on commit 460826d

Please sign in to comment.