Chinese brand PSU_monitoring rs485 and Mango
-
Nice! That looks like the ASCII (since it doesn't begin with HEX) payload perhaps? Maybe it would be better to just do the regex parsing on the Serial Data source points, then, if you don't have to do any of the conversion to or from hex.
-
I had a little throwback....
after i did get this response i was lost in how everything worked in Mango,
so i thought it would be good to start over from scratch.also i changed the source from "serial data source" to " tcp/ip" data source ( as that is what i need to use in the end )
( the PSU happens to have both options to get the information )that shouldn't make a big difference in the working flow of mango i think.
i tested the commands over tcp/ip with SerialComm program to confirm and it works just like Serial.
-
"Shouldn't make a big difference..."
I wouldn't think so either. Do you still have the same setting for sending hex? You can always test the TCP/IP data source against netcat, to see what's coming out of it. Simply
nc -l 9876
and point the TCP/IP data source at that machine's 9876 port. -
9876 would than be the port i use i guess ? ( which is 9999 in my case )
-
This post is deleted! -
I used tcpdump , and looks like there is interaction,
-
Yes , data is incoming.
now whats next ?
-
i know i have to get the values out of the returned Hex, with some ( java? ) code
( in the script like in the second post probably ).how does such code typical looks like.
get states of modules :
returned code :
7e30323030303134323030303032373432353641334437424543434343434430303030303030303345393939393941303030303030303034314338303030303431433830303030303134314338303030303030303030303031 3030303145350dfollowing manuals :
7e3032303030313432303030303237 ( length of data )
3432353641334437 Bus voltage-float: D7A35642=53.66
4245434343434344 Battery 1 voltage
3030303030303030 Battery 2 voltage
3345393939393941 Load current
3030303030303030 Total module current
3431433830303030 Battery temperature-float: 0000c841=25
3431 Number of modules:
4338303030303031 Environment humidity
3431 System alarms
4338303030303030 Batteries and environmental alarms
3030 Reservation
3031 State of charge: 1 float charging
30 30 Relay alarm high byte
30 31 Relay alarm low byte
45 35 0D -
You could get the hex for any of these by doing something like...
var busVoltage = /[0-9A-Fa-f]{46}([0-9A-Fa-f]{8}).*/.exec(messsage); var extractedValue = busVoltage[1];
Using the position in the message to know where to extract them (so, after 46 characters, capture the next 8 is what that regular expression suggests). I'm not sure what the float encoding is (how does D7A35642=53.66?), so I can't really offer too much help there. Some people are talking about a hex to float function here: http://stackoverflow.com/questions/5055723/converting-hexadecimal-to-float-in-javascript
It looks like you're working with the ASCII encoded values again, so while you're playing with the script check out the output of
function toASCII(message) { var result = ""; while(message.length > 1) { //parse two characters at a time var charCode = message.substr(0, 2); result += String.fromCharCode( "0x" + charCode ); message = message.substr(2); } return result; } print( toASCII(message) );
In case that's useful.
-
yes, that float things is special, i figured out is has something do do with "reversed"
http://www.scadacore.com/field-applications/programming-calculators/online-hex-converter/
-
pffff, drives me crazy. putting pieces of code in the script only complains about no variable set and stuff and i don t know in what order and place to put the code.
so,
now i started again from scratch. but same settings do not get any data anymore.
( i see it coming in tcpdump )only in terminal i see :
removing everything. start from beginning. same result. this happened me twice now.
rebooting..
-
Perhaps the device holds open the connection and your timeout is set to 0? I would give it a try with a 1000ms timeout or so.
-
Nope, reboot did not help, rebooting device and connections did not help.
settings :
-
Your value index is wrong. It should be 0. and your value regex can just be
.*
-
i removed everything and restarted Mango.
The "value index: set to 1 was indeed the bottleneck. ( i checked to see what difference 0 or 1 made.
so i have data again,
The errors
"
WARN 2016-10-31 23:57:49,316 (com.serotonin.m2m2.rt.dataSource.PollingDataSource$2.execute:228) - PSU-tcp_ip: poll scheduled at 2016/10/31 23:57:49.316 aborted because Task Currently Runnining
"
in terminal are still there do.i don t care at the moment, as getting things running is more important to me at the moment.
now i start building COMMAND and RESPONSE from the beginning of the forum..
-
I mentioned how to fix that, you would turn your timeout down from 50000 ms to less than your polling interval, so less than 5000.
-
That fixed it indeed.
i noticed i can check scripting code by clicking on the "little green Script dot".
Its still not clear to me.
-
Data source collects makes connection to device. ( interval for set here )
that is the easy part, -
tcp/ip Data point asks for data ( command data point )
-
tcp/ip Data point response listen for data
-
tcp/ip Data point "link" this to Scripting data point, "message queue" datapoint.
-
in the "link" script screen i put in ?? which pieces of code ?
-
in the Script Data source i also put in which pieces ?
i tried a lot of combinations, but i don t see it.
-
-
Response --> Point Link to parse values --> Scripting Data Source to process message queue into points' values
-
Alright i got it. thnx.
i had little play with :
var busVoltage = /[0-9A-Fa-f]{46}([0-9A-Fa-f]{8}).*/.exec(source.value);
var extractedValue = busVoltage[1];print (busVoltage[1]);
Script result:
42453939so that works, i found code for converting the hex to float, but no knowledge of writing (java) coding structure is a show stopper at the moment. but i do have fun learning , gehehe
-
Nice!
All the scripts use JavaScript.