Community Tip - Did you know you can set a signature that will be added to all your posts? Set it here! X
The following script takes a parameter of a model name, a device serial number and a data item name, finds the asset location and uses that longitude to determine the current TimeZone. It then converts the Timezone of the data item timestamp to an Eastern Standard Timezone timestamp.
import groovy.xml.MarkupBuilder
import com.axeda.drm.sdk.Context
import java.util.TimeZone
import com.axeda.drm.sdk.data.*
import com.axeda.drm.sdk.device.*
import com.axeda.common.sdk.jdbc.*;
import net.sf.json.JSONObject
import net.sf.json.JSONArray
import com.axeda.drm.sdk.mobilelocation.MobileLocationFinder
import com.axeda.drm.sdk.mobilelocation.MobileLocation
import com.axeda.drm.sdk.mobilelocation.CurrentMobileLocationFinder
def response
try {
Context ctx = Context.getUserContext()
ModelFinder mfinder = new ModelFinder(ctx)
mfinder.setName(parameters.model_name)
Model m = mfinder.find()
DeviceFinder dfinder = new DeviceFinder(ctx)
dfinder.setModel(m);
dfinder.setSerialNumber(parameters.device)
Device d = dfinder.find()
CurrentMobileLocationFinder cmlFinder = new CurrentMobileLocationFinder(ctx);
cmlFinder.setDeviceId(d.id.getValue());
MobileLocation ml = cmlFinder.find();
def lng = -72.158203125
if (ml?.lng){
lng = ml?.lng
}
// set boundaries for timezones - longitudes
def est = setUSTimeZone(-157.95415000000003)
def tz = setUSTimeZone(lng)
CurrentDataFinder cdfinder = new CurrentDataFinder(ctx, d)
DataValue dvalue = cdfinder.find(parameters.data_item_name)
def adjtime = convertToNewTimeZone(dvalue.getTimestamp(),tz,est)
def results = JSONObject.fromObject(lat: ml?.lat, lng: ml?.lng, current: [name: dvalue.dataItem.name, time: adjtime.format("MM/dd/yyyy HH:mm"), value: dvalue.asString()]).toString(2)
response = results
}
catch (Exception e) {
response = [
message: "Error: " + e.message
]
response = JSONObject.fromObject(response).toString(2)
}
return ['Content-Type': 'application/json', 'Cache-Control':'no-cache', 'Content': response]
def setUSTimeZone(lng){
TimeZone tz
// set boundaries for US timezones by longitude
if (lng <= -67.1484375 && lng > -85.517578125){
tz = TimeZone.getTimeZone("EST");
}
else if (lng <= -85.517578125 && lng > -96.591796875){
tz = TimeZone.getTimeZone("CST");
}
else if (lng <= -96.591796875 && lng > -113.90625){
tz = TimeZone.getTimeZone("MST");
}
else if (lng <= -113.90625){
tz = TimeZone.getTimeZone("PST");
}
logger.info(tz)
return tz
}
public Date convertToNewTimeZone(Date date, TimeZone oldTimeZone, TimeZone newTimeZone){
long oldDateinMilliSeconds=date.time - oldTimeZone.rawOffset
// oldtimeZone.rawOffset returns the difference(in milliSeconds) of time in that timezone with the time in GMT
// date.time returns the milliseconds of the date
Date dateInGMT=new Date(oldDateinMilliSeconds)
long convertedDateInMilliSeconds = dateInGMT.time + newTimeZone.rawOffset
Date convertedDate = new Date(convertedDateInMilliSeconds)
return convertedDate
}