The following examples illustrate how to use the API objects to write InSight Alert Scripts.
This example causes an alert to trigger when a vehicle sends a report from a marker in a specified category on a weekend.
-
Because this alert involves time values, you might want to turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Unit.
-
The script does not make use of the global State variable, so clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create a single parameter:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
Marker_Category |
Category |
Vehicles at markers of this category on a weekend trigger the alert. |
ConditionMet = function (Context) { // Check whether it is a weekend and the vehicle is at a marker in the specified category if ((Context.Time.DayOfWeek.Equals(System.DayOfWeek.Saturday) || Context.Time.DayOfWeek.Equals(System.DayOfWeek.Sunday)) && Context.Unit.IsAtMarkerInCategory(Marker_Category)) { return true; } return false; };
This example causes an alert to trigger when a vehicle first moves a specified distance from a specified marker.
-
Because this alert does not need to support a time to trigger or aggressive property, the Condition Type is ScriptedCondition.
-
The Target Type of this script is Unit.
-
The script makes use of the global State variable, so you must select the Keep a persistent state for this script check box. This script defines a value called insideCustomRadius.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create two parameters:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
HQ |
Marker |
The marker that vehicles must leave to trigger the alert. |
Radius |
Number |
The distance, in feet, that the vehicle must be separated from the marker to count as having left the marker. |
ConditionMet = function (Context) { // Check whether the vehicle has moved inside the custom radius if (!State.insideCustomRadius && HQ.ContainsLatLonCustomRadius(Context.Unit.Location, Radius))) { // Remember that vehicle is inside the custom radius State.insideCustomRadius = true; } // Check whether the vehicle was inside the custom radius but has now moved out if (State.insideCustomRadius && !HQ.ContainsLatLonCustomRadius(Context.Unit.Location, Radius)) { // Remember that vehicle is not inside the custom radius any more State.insideCustomRadius = false; // Trigger the alert because vehicle just left return true; } // The alert condition is not met (vehicle is inside the radius, or did not just leave) return false; };
This example causes an alert to trigger when a vehicle leaves a specified marker and does not return within 30 minutes.
-
Because this alert involves time values, you might want to turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Unit.
-
The script makes use of the global State variable, so you must select the Keep a persistent state for this script check box. This script defines values named TimeLeftMarker and LastMarkerId.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create one parameter:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
SpecifiedMarker |
Marker |
The marker that vehicles must return to within half an hour. |
ConditionMet = function (Context) { var currentMarkerId = Context.Unit.HasCurrentMarker ? Context.Unit.CurrentMarker.Id : 0; if ((!State.TimeLeftMarker) || ( currentMarkerId === SpecifiedMarker.Id)) { // If at the marker, set TimeLeftMarker to -1 State.TimeLeftMarker = -1; } // Check whether Vehicle has moved outside the specified Marker for first time if (State.LastMarkerId === SpecifiedMarker.Id && currentMarkerId !== SpecifiedMarker.Id && State.TimeLeftMarker === -1) { State.TimeLeftMarker = Context.Time; } State.LastMarkerId = currentMarkerId; // Check if vehicle left the specified marker (TimeLeftMarker is set) and has been gone for more than 30 minutes if (State.TimeLeftMarker !== -1 && ((Context.Time - State.TimeLeftMarker) > 1800000)) { return true; } return false; };
This example causes an alert to trigger when a vehicle idles for more than 30 minutes if it is in California, or for more than 60 minutes if it is in Texas.
-
Because this alert involves time values, turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Unit.
-
The script makes use of the global State variable, so you must select the Keep a persistent state for this script check box. This script defines values called LastStatus, IsIdle, and IdleStatusTime.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script does not use any parameters.
ConditionMet = function (Context) { // To determine the state (California or Texas), we need to check the address // So this alert only triggers if we have a street address if (Context.Unit.HasCurrentStreetAddress) { // The global State variable holds the vehicle (unit) status and when it started idling if ((State.LastStatus != Context.Unit.Status)) { // only set State variables if vehicle status has changed State.LastStatus = Context.Unit.Status; if (State.LastStatus == 1) { State.IsIdle = true; State.IdleStatusTime = Context.TimeUtc; } else { State.IsIdle = false; State.IdleStatusTime = ''; } } // Alert can only trigger if the vehicle is idling if (State.IsIdle) { if (Context.Unit.CurrentStreetAddress.Region == "California") { // Check idling time - time of message minus time when vehicle started idling if (Context.TimeUtc.Subtract(State.IdleStatusTime).TotalSeconds >= 1800) { return true; } } else if (Context.Unit.CurrentStreetAddress.Region == "Texas") { // Check idling time - time of message minus time when vehicle started idling if (Context.TimeUtc.Subtract(State.IdleStatusTime).TotalSeconds >= 3600) { return true; } } } } return false; };
This example causes an alert to trigger when the vehicle has its rear door open (diagnostic TID 808) and the vehicle is not at a marker in a specified category.
-
Because this alert does not involve time values, you can set the Condition Type to ScriptedCondition.
-
The Target Type of this script is Unit.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create a single parameter:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
Marker_Category |
Category |
The rear door should only be opened at markers in this category. |
ConditionMet = function (Context) { // Unit has rear door TID (808), rear door is open if (Context.Unit.HasDiagnosticValue(808) && (Context.Unit.GetDiagnosticValue(808) > 0) && (!Context.Unit.IsAtMarkerInCategory(Marker_Category))) { return true; } return false; };
This example causes an alert to trigger when the vehicle has its rear door open (diagnostic TID 808) and the vehicle is at a marker in a specified category.
-
Because this alert does not involve time values, you can set the Condition Type to ScriptedCondition.
-
The Target Type of this script is Unit.
-
The script uses the global State variable, so you must select the Keep a persistent state for this script check box. This script defines a value called “Trigger AssignedMarkerId”.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create a single parameter:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
Marker_Category |
Category |
The rear door notification will only be triggered at markers in this category. |
/*Parameters for the following: Marker_Category - The configured Marker Category */ const name_TriggerMarkerId = 'Trigger AssignedMarkerId'; const name_OnMarkerId = 'On AssignedMarkerId'; const name_OffMarkerId = 'Off AssignedMarkerId'; ConditionMet = function (Context) { var unit = Context.Unit; if(!(unit && Marker_Category)) { State.Triggered = false; return false; } // Unit has rear door TID (808), rear door is open if (!(Context.Unit.HasDiagnosticValue(808) && (Context.Unit.GetDiagnosticValue(808) > 0))) { State.Triggered = false; return false; } //Get a marker only when it belongs to the category, and the unit is currently inside it var marker = Marker_Category.GetNearestMarker(unit.Location, true); if(!marker) { State.Triggered = false; return false; } State[name_TriggerMarkerId] = marker.Id; State.Triggered = true; return true; };
This example causes an alert to trigger when the vehicle sends a DTC code.
-
To allow users to make this alert aggressive, set the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Unit.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script does not require any parameters.
ConditionMet = function (Context) { if (Context.Unit.HasAnyDtc(801)) { // 801 is tid for "OBDII DTC" // Add to the global EmailFields so that the DTC codes are reported in alert emails EmailFields["OBDII DTC"] = Context.Unit.GetAllDtcCodes(801); return true; } else { return false; } };
This example causes an alert to trigger when a driver is on site at the last job of his or her scheduled route.
-
Because this alert involves time, turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Driver.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script does not require you to define any parameters.
ConditionMet = function (Context) { if (Context.Driver.CurrentRoute) { if ((CurrentRoute.LastJob.Status.IsCurrent) && (CurrentRoute.LastJob.Status.Status == 3)) { return true; } return false; } };
This example causes an alert to trigger when a vehicle exceeds the speed limit, adjusting the speed limit down by 10% if it is raining.
-
Because this alert involves time, turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Unit.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script does not require you to define any parameters.
ConditionMet = function (Context) { var limit = 100.0 // initialize // the speed limit is stored on the address, so check that we have both vehicle speed and limit if (Context.Unit.HasCurrentStreetAddress && Context.Unit.HasSpeed) { limit = Context.Unit.CurrentStreetAddress.SpeedLimit * 1.8520 // convert knots to km/h // Check Diagnostic TID 717 (raining) and adjust limit if necessary if (Context.Unit.HasDiagnosticValue(717) && Context.Unit.GetDiagnosticValue(717)) {//raining limit = limit * 0.90; if (Context.Unit.SpeedKph > limit) return true; } return false; }
This example causes an alert to trigger when a vehicle with a specified tag starts moving and the assigned driver does not also have the same tag.
-
Because this alert involves time, turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Driver.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Be sure that the This script does not require message from vehicles check box is clear.
-
The script requires you to create a single parameter:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
tagName |
string |
The name of the tag on the vehicle that should match a driver tag. |
// Note that this script makes use of a helper function (defined below) called 'contains'
ConditionMet = function (Context) {
var unit = Context.Driver.Unit;
if (unit) {
// Check whether the assigned vehicle is moving and has the specified tag
if (unit.Status === 2 && unit.Tags !== null && contains(unit.Tags,tagName)){
if(Context.Driver.Tags === null || !contains(Context.Driver.Tags,tagName)){
// The driver does not have the same tag
return true;
}
}
}
return false;
};
//returns true if the specified item is in the given array
function contains(array, item) {
for (var i = 0; i < array.length-1; i++) {
if (array[i] === item) {
return true;
}
}
return false;
}
This example causes an alert to trigger when a driver assigned to a vehicle in a specified fleet does not have a specified class of license.
-
Because this alert involves time, turn on aggressive and time to trigger by setting the Condition Type to ScriptedTimeRangeCondition.
-
The Target Type of this script is Driver.
-
The script does not use the global State variable, so you should clear the Keep a persistent state for this script check box.
-
Select the This script does not require message from vehicles check box.
-
The script requires you to create the following parameters:
Parameter Name |
Parameter Type |
Meaning |
---|---|---|
expected_class |
string |
The class of license the driver should have to drive vehicles in the specified fleet. |
big_fleet |
Fleet |
The fleet that requires the special license class. |
ConditionMet = function (Context) { if (Context.Driver.LicenseClass !== expected_class) { // Check whether the assigned vehicle is in the specified fleet if(!big_fleet.IsMember(Context.Driver.Unit)){ return true; } } return false; };
Comments
0 comments
Please sign in to leave a comment.