Import javascript library
-
@phildunlap do we have any sample javascripts that cna be used in node.js that use mangoapi? like retrieving values by XID and setting values? Thanks.
-
Yeah you might be able to get what you're looking for from the tests we've implemented in node: https://github.com/infiniteautomation/node-mango-client
-
@phildunlap Thanks. I get this error when i try to run the example:
$node example.js
(node:24509) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: connect ECONNREFUSED 127.0.0.1:8443 -
You would have to point it at your running Mango instance and port. It's from this section of example.js:
const client = new MangoClient({ protocol: 'https', host: 'localhost', port: 8443, rejectUnauthorized: false });
-
@phildunlap said in Import javascript library:
You would have to point it at your running Mango instance and port. It's from this section of example.js:
const client = new MangoClient({ protocol: 'https', host: 'localhost', port: 8443, rejectUnauthorized: false });
Its running locally on the same box. shouldnt localhost be enough? Thanks
-
No. It is using the HTTP API which is over TCP/IP and all TCP/IP connections require an address and a port. Edit: yes localhost is the host if its the same machine (usually, localhost means 127.0.0.1 usually)
-
@phildunlap said in Import javascript library:
No. It is using the HTTP API which is over TCP/IP and all TCP/IP connections require an address and a port. Edit: yes localhost is the host if its the same machine (usually, localhost means 127.0.0.1 usually)
ok, so im on the same machine and tried the local ip of the machine and still the samething.
Unhandled promise rejection (rejection id: 1): Error: connect ECONNREFUSED 192.168.1.125:8443ami i missing something?
-
Mango is not running on port 8443?
-
@phildunlap said in Import javascript library:
Mango is not running on port 8443?
mmm, where can i check it?
-
It's the web.port property in your Mango/overrides/properties/env.properties file or Mango/classes/env.properties files as "web.port". Judging from your earlier port of the HTTP Retriever data source, it's 85, but i have no way of knowing. It's 8080 by default.
-
@phildunlap said in Import javascript library:
It's the web.port property in your Mango/overrides/properties/env.properties file or Mango/classes/env.properties files as "web.port". Judging from your earlier port of the HTTP Retriever data source, it's 85, but i have no way of knowing. It's 8080 by default.
ok, web.port=8080 but i still get the same error as before.
$node example.js
(node:7075) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: connect ECONNREFUSED 192.168.1.125:8080 -
Mango is probably not running. Connection refused means the port isn't open.
-
@phildunlap said in Import javascript library:
Mango is probably not running. Connection refused means the port isn't open.
I know it does as i can login into the web admin panel.
-
Is https://192.168.1.125:8080 typed into your address bar?
Edit: In the end HTTP localhost 80 prevailed
-
@phildunlap said in Import javascript library:
Is https://192.168.1.125:8080 typed into your address bar?
Edit: In the end HTTP localhost 80 prevailed
ok, i managed to get it working on port 80 and also changing https to http.
Now i see only getValue function in datapoints.js. Is there any sort of setValue function available? Thanks. -
No you would have to add it, something like,
static setValue(xid, valueTime) { return client.restRequest({ method: 'PUT', path: '/rest/v1/point-values/' + encodeURIComponent(xid), data: { "dataType": "NUMERIC", "value": valueTime.value, "timestamp": valueTime.time, "annotation": "annotation" in valueTime ? valueTime.annotation : null } }).then(response => { return response.data; }); } setValue(valueTime) { return this.constructor.setValue(this.xid, valueTime); }
Which should work for numeric points. You would have to do something more clever to make this fully general purpose as currently the DataPoint object doesn't know its data type.
The node library is definitely not a finished product and anything you create is certainly encouraged to be shared.
-
Also be sure to check out test/pointValue.spec.js
-
@phildunlap said in Import javascript library:
No you would have to add it, something like,
static setValue(xid, valueTime) { return client.restRequest({ method: 'PUT', path: '/rest/v1/point-values/' + encodeURIComponent(xid), data: { "dataType": "NUMERIC", "value": valueTime.value, "timestamp": valueTime.time, "annotation": "annotation" in valueTime ? valueTime.annotation : null } }).then(response => { return response.data; }); } setValue(valueTime) { return this.constructor.setValue(this.xid, valueTime); }
Which should work for numeric points. You would have to do something more clever to make this fully general purpose as currently the DataPoint object doesn't know its data type.
The node library is definitely not a finished product and anything you create is certainly encouraged to be shared.
it complains about TypeError: Cannot use 'in' operator to search for 'annotation' in 2118.7704248055056
-
this is what i am calling
DataPoint.setValue('DP_540483','2118.7704248055056');
-
DataPoint.setValue('DP_540483','2118.7704248055056')
should be more like...
DataPoint.setValue('DP_540483', {'value': 2118.7704248055056, 'time': new Date().getTime()});