I got it resolved with a workaround. I'm going to post what I did for posterity and to hopefully help anyone who might come across the same issue in the future.
What I ended up doing is creating a scripting data source. The datasource uses Rhino as its scripting engine so you can use some Java in it. With the Java, you can read/write to files and leverage the "Everything is a file" philosophy in *nix systems.
The code:
// import the file reader
var FileReader = java.io.FileReader;
var BufferedReader = java.io.BufferedReader;
// import the writer. We must use OutputStreamWriter to write to device files
var OutputStreamWriter = java.io.OutputStreamWriter;
var FileOutputStream = java.io.FileOutputStream;
// Be careful because this could change on us depending on how many USB devices
// are plugged in
var serial_port = "/dev/ttyUSB0";
// Initialize a bunch of blank strings to store measurements
var max_time_measurements,
temp_and_pressure,
wind_attrs,
solar_and_precip = new String();
// Set up the writer
var file = new FileOutputStream(serial_port);
var output = new OutputStreamWriter(file);
// Set up the streamer
var fr = new FileReader(serial_port);
var br = new BufferedReader(fr);
// Write the measurement command to the serial port and flush to ensure the
// buffer is empty for the next command.
output.write("0M!\r\n");
output.flush();
// The sensor takes around 3 seconds to return 9 values, so we sleep for 4
// seconds to give it a generous margin
RuntimeManager.sleep(4000);
// Now we write our data commands to get it all.
output.write("0D0!\r\n");
output.flush();
output.write("0D1!\r\n");
output.flush();
output.write("0D2!\r\n");
output.flush();
output.close();
// readLine will read the return values
max_time_measurements = br.readLine();
solar_and_precip = br.readLine();
wind_attrs = br.readLine();
temp_and_pressure = br.readLine();
//split the 0D0! result
var solar_and_precip_array = solar_and_precip.split("+");
solarRad.set(solar_and_precip_array[1]);
precipitation.set(solar_and_precip_array[2]);
lightningStrikes.set(solar_and_precip_array[3]);
//split the 0D1! result
var wind_attrs_array = wind_attrs.split("+");
windSpeed.set(wind_attrs_array[1]);
windDirection.set(wind_attrs_array[2]);
gustWindSpeed.set(wind_attrs_array[3]);
//split the 0D2! result
var temp_and_pressure_array = temp_and_pressure.split("+");
temp.set(temp_and_pressure_array[1]);
vaporPressure.set(temp_and_pressure_array[2]);
atmosphericPressure.set(temp_and_pressure_array[3]);
The code isn't the prettiest or most elegant but it does work. Just make sure you have the necessary variables created as data points and that they're settable and you're all good to go.