leonas5555
leonas5555

Reputation: 83

node.js opc ua many monitored items

I use node-opcua module and I would like to monitor many opc ua nodes with subscription I see result like: user in html UI choose what nodes to monitor, then click Monitor button that sent these nodeIds as parameters and then for every nodeid will be set subscription and .on("changed") works for every of these items like in parallel. Now code looks like:

 var monitoredItem  = the_subscription.monitor({
       nodeId: opcua.resolveNodeId("ns=6;s=S71500ET200MP station_1.Master.111"),
       attributeId: 13
   },
   {
       samplingInterval: 100,
       discardOldest: true,
       queueSize: 10
   },
   opcua.read_service.TimestampsToReturn.Both
   );
   console.log("-------------------------------------");
   var nodes = [];

   monitoredItem.on("changed",function(dataValue){
      //console.log(" value = ",dataValue.value.value);
      //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString());
      //console.log(JSON.stringify(dataValue));
      var Node = {nodeId: "ns=6;s=S71500ET200MP station_1.Master.111", nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()};
      var arrayNode = Object.keys(Node).map(function(k) { return Node[k] });
      //console.log(JSON.stringify(Node));
      nodes.push(arrayNode);

    //  console.log(nodes);
   });
},

Right now if I want to set new item to monitor it just add many vars MonitorItem1 , ..2 , ..3 etc.

How to do it in more agile/dynamic way? if I have array(strings) of nodeIds and I want each of these to be monitored in subscription. Code is part of async.series([ code ])

Upvotes: 5

Views: 4045

Answers (2)

Oleg Averkov
Oleg Averkov

Reputation: 342

Now you can use the method the_subscription.monitorItems()

Upvotes: 1

leonas5555
leonas5555

Reputation: 83

solved using async.each method

async.each(nodeIdArr, function(nodeid, callback) {

     var monitoredItem  = the_subscription.monitor({
           nodeId: opcua.resolveNodeId(nodeid),
           attributeId: 13
       },
       {
           samplingInterval: 100,
           discardOldest: true,
           queueSize: 10
       },
       opcua.read_service.TimestampsToReturn.Both
       );
       console.log("-------------------------------------");


       monitoredItem.on("changed",function(dataValue){
          //console.log(" value = ",dataValue.value.value);
          //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString());
          //console.log(JSON.stringify(dataValue));
          var Node = {nodeId: nodeid, nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()};
          var arrayNode = Object.keys(Node).map(function(k) { return Node[k] });
          //console.log(JSON.stringify(Node));
          nodes.push(arrayNode);

        //  console.log(nodes);
      });

Upvotes: 3

Related Questions