REGEX with Serial Input Data Point
-
In my lab I periodically run a moisture test on the germination and kilning of the malt. I use a moisture balance that outputs the test results as ASCII text on a RS232 serial port. I need some help extracting the moisture value from the output strings to enter as a data point.
The output looks like this:
***** AUTO STOP *****
LAST TEMP: 131 C
FINAL MASS: 12.215 g
TEST TIME: 56:15
MASS LOST: 8.531 g
RESULT: 41.12 %M
----------------------------- (the dashes are mine)
I need to extract just the value (in this case 41.12) from the "RESULT:" line using REGEX. I am NOT very good with regular expressions and have been pulling my hair out all morning. The best I have come up with is: "/RESULT:\s*([\d][\d].[\d][\d])\s%M*/g" but that selects the entire line, not just the value. Any help would be very appreciated. -
Hi thutchis,
You are using a serial data source?
It sounds like if you used a value index of 1 instead of 0 you should be extracting your value, currently. You don't need to use the
/.../g
type format to input the regex, you can enter what would come between the slashes for the serial data source fields.I always encourage people to do their troubleshooting using a setup that will catch all the values, for your data, that might mean something like...
DATA SOURCE:
Use terminator: No
Message Regex: ()[^;]+
Point Identifier Group: 1
Configuration in Hex: NoDATA POINT:
Data Type: Alphanumeric
Point Identifier:
Value Group: 0
Value Regex [^;]+I am using [^;]+ because you do not have any semicolons in your example data, so it will match everything. You could probably get the specific value you're looking for with a serial data point setup on that data source like,
DATA POINT: Data Type: Alphanumeric Point Identifier: Value Group: 1 Value Regex [^;]+RESULT: (\d+\.?\d*) %M.*
-
Thanks Phil,
Yes, I plan to use a Serial Data Source.I am using a Regex tester at: https://regexr.com/ to work out the correct syntax for getting my desired value into a data point. If I put your suggestion, " [^;]+RESULT: (\d+.?\d*) %M.* " in the tester it shows "no match". I would assume the Mango REGEX parser would perform the same.
-
Hmm, that is not my experience with that website:
Perhaps it is from the extra spaces inside your quote marks?
-
@phildunlap said in REGEX with Serial Input Data Point:
[^;]+
Strange, I didn't use the spaces after/before the double quotes, they was only to indicate the quotes were not included in the expression I was trying to convey to the reader. But I still don't get a match. Your screen shot shows the entire message was matched, not just the value between "RESULT:" and "%M".
-
It shows that value was extracted as group #1, which would be the value group index in Mango.
It looks like I was supposed to have written
(\d+\.?\d*)
but the \ before the dot was removed the forum's formatting, and so I didn't copy it into the image. But, it would work either way. -
I was able to get the REGEX tester to duplicate your results and got the value as group 1.
Thanks for your help today, I learned a lot. I plan to connect the serial data source to the Mango server tomorrow. I'll see what happens then.
Tom
-
I connected the moisture balance as a serial data source and it works. I get the percent moisture value as an alpha-numeric which is fine for logging. I don't need any charting. I changed the Regex to include "%M" so a unit is displayed when looking at point details.
The data source (moisture balance RS232) sends a 0x04 (EOT End Of Transmission) at the end of each message. If I try to use a terminator string of 0x04 it won't work. If I ignore the terminator it does work, so no big deal. Just curious why I cant use the hex value 0x04 as a terminator. Is there another encoding that would work?
Now I need to figure out how to have the result emailed to me when the data point is logged.
Tom -
Hi Tom,
At the bottom of the edit point page is a section for event detectors. You're either looking for a Change or Update detector. After the event detector is created, you will need to create an Email event handler on the /event_handlers.shtm page for the event, and you will need to configure your SMTP server in the system settings.