title: create variable in Kepserver with node-opcua
body: <p>I have a Siemens 1200 PLC. Using <code>node-opcua</code> client and Kepserver I am able to read the variables and to change the values. 
  Now I would like to create a new variable in the PLC from node-opcua in KepServer.
  <a href="https://i.stack.imgur.com/Wq2lM.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/Wq2lM.jpg" alt="enter image description here"></a></p>
  
  <p>I've tried to use node-opcua server because in the examples I've seen how to create variables, but I get an error because I am trying to connect to the same port that KepServer does.</p>
  
  <pre><code>var server = new opcua.OPCUAServer({
      port: 49320, // the port of the listening socket of the server
      resourcePath: "", // this path will be added to the endpoint resource name
       buildInfo : {
          productName: "MySampleServer1",
          buildNumber: "7658",
          buildDate: new Date(2014,5,2)
      }
  });
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/7a5t9.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/7a5t9.jpg" alt="enter image description here"></a></p>
  
  <p>How could I deal to create a new variable? and to create a group tag from node-opcua?</p>
  
  <p>Is it possible to have a opcua server in Kepserver and create variables connecting to that server directly?
  My Kepserver is in: opc.tcp://localhost:49320
  To connect to this Kepserver I use the nodeopcua client:</p>
  
  <pre><code>var opcua = require("node-opcua");
  var client = new opcua.OPCUAClient();
  var endpointUrl = "opc.tcp://127.0.0.1:49320";
  var the_session = null;
  async.series([
  
  
      // step 1 : connect to
      function(callback)  {
  
          client.connect(endpointUrl,function (err) {
  
              if(err) {
                  console.log(" cannot connect to endpoint :" , endpointUrl );
              } else {
                  console.log("connected !");
              }
              callback(err);
          });
      },
      // step 2 : createSession
      function(callback) {
          client.createSession( function(err,session) {
              if(!err) {
                  the_session = session;
              }
              callback(err);
          });
  
      },
      // step 3 : browse
      function(callback) {
  
          the_session.browse("RootFolder", function(err,browse_result,diagnostics){
              if(!err) {
                  browse_result[0].references.forEach(function(reference) {
                      console.log( reference.browseName);
                  });
              }
              callback(err);
          });
      },
      // step 4 : read a variable
      function(callback) {
          the_session.readVariableValue("ns=2;s=S7.1200.nombre", function(err,dataValue) {
              if (!err) {
                  console.log(" temperature = " , dataValue.toString());
              }
              callback(err);
          })
      },
  
      // step 5: install a subscription and monitored item
      //
      // -----------------------------------------
      // create subscription
      function(callback) {
  
          the_subscription=new opcua.ClientSubscription(the_session,{
              requestedPublishingInterval: 1000,
              requestedLifetimeCount: 10,
              requestedMaxKeepAliveCount: 200,
              maxNotificationsPerPublish: 10,
              publishingEnabled: true,
              priority: 10
          });
          the_subscription.on("started",function(){
              console.log("subscription started for 2 seconds - subscriptionId=",the_subscription.subscriptionId);
          }).on("keepalive",function(){
              console.log("keepalive");
          }).on("terminated",function(){
              callback();
          });
          setTimeout(function(){
              the_subscription.terminate();
          },100000);
  
  
          // install monitored item
          //
          var monitoredItem  = the_subscription.monitor({
              nodeId: opcua.resolveNodeId("ns=2;s=S7.1200.nombre"),
              attributeId: 13
            //, dataEncoding: { namespaceIndex: 0, name:null }
          },
          { 
              samplingInterval: 100,
              discardOldest: true,
              queueSize: 10 
          });
          console.log("-------------------------------------");
  
          // subscription.on("item_added",function(monitoredItem){
          //xx monitoredItem.on("initialized",function(){ });
          //xx monitoredItem.on("terminated",function(value){ });
  
  
          monitoredItem.on("changed",function(value){
             console.log(" New Value = ",value.toString());
          });
  
      },
  
      // ------------------------------------------------
      // closing session
      //
      function(callback) {
          console.log(" closing session");
          the_session.close(function(err){
  
              console.log(" session closed");
              callback();
          });
      },
  
  
  ],
      function(err) {
          if (err) {
              console.log(" failure ",err);
          } else {
              console.log("done!")
          }
          client.disconnect(function(){});
  });
  </code></pre>
  
  <p>I would like to create new variables from code in my Kepserver. I've seen that with the nodeopcua server code there's a way of creating variables: 
  <a href="https://github.com/node-opcua/node-opcua/blob/master/documentation/creating_a_server.md" rel="noreferrer">Creating a Simple Server</a></p>
  
  <p>I would like to use something such as in KepServer:</p>
  
  <pre><code>server.engine.addressSpace.addVariable
  </code></pre>
  
  <p>What could I do to solve my problem?</p>