Hello,
since you are using "2" for the "namespace", I can guess that it is not the actual namespace - it is its index in so-called "namespace table" in the UA Server. The namespace indexes are used for efficiency, but they are not guaranteed to remain the same over the time (new sessions). In general case, they are therefore not suitable for direct persistence (or to be included in the code) on the client side. The UA client should persist/contain the namespace string, read the server's namespace table, convert the namespace string(s) to the indices, and then use the indices as needed.
QuickOPC-UA does this automatically - so you are supposed to actually specify the namespace string in the Node ID, not the index. Namespace strings look like URLs or URNs. For example,
opcfoundation.org/UA/ is a fixed namespace string (for index 0) reserved by the OPC Foundation. There will be more namespaces in your server.
You should be able to find the namespace strings in the server's documentation, or by browsing using e.g. our EasyOpcUAConsole utility (included with the product). The namespace table should also be available as a readable array from the server itself, at NodeId "nsu=http://opcfoundation.org/UA/;i=2255".
If you browse the server using methods in QuickOPC-UA, the Node IDs will be returned already in the proper format.
After figuring out the namespace string, your NodeId will probably look more like "nsu=http://servervendor.com/UA/something;s=PowerHub.LU1.WatchdogDevelopment", i.e. the "2" in your original will be replaced by something longer. Also note that "nsu" (for "Namespace URI") is used instad of "ns".
Best regards,