How to manage differences between trackers and sames AVL ID / Parameters ID

Hello everyone,

I have been developing a server for some time to support Teltonika devices.
However, I recently realized that there were some differences between the devices.

For example, if we take these two links:
https://wiki.teltonika-gps.com/view/TMT250_AVL_ID_List
https://wiki.teltonika-gps.com/view/FMB120_Teltonika_Data_Sending_Parameters_ID
Then we search for “389”.
For a TMT250, this corresponds to “Button Click”.
For an FMB120, this corresponds to “OBD OEM Total Mileage”.

The goal of this would be for my services to be able to give notification to my customers like : “Did you have an alert 255? It’s an overspeeding”.

I also have big concerns about “Parameters ID” (Page with FMB_Device_Family_Parameter_list). I would like to give my customers the possibility of configuring certain parameters of their trackers.
For example, with my web interface, they could set a speed alert to 70km/h instead of the default 90km/h.

It’s “pretty simple” normally.

But nothing tells me that I won’t have the same problem as stated above with AVL IDs.
I want to be sure that the parameters I send to the tag are the ones I have in mind.
For example: 11104. Am I sure this setting will always be linked to “Max speed” on all different trackers? That its minimum value will be 0 and its maximum value 260?

Because the user must be constrained by the application. And the server that will send the command does not send any value that the user managed to enter.

I started putting all these differences into a JSON file.
Below are the AVL IDs that interest me.
I have approximately the same thing for the Parameters ID…

But I don’t like what I have done. And I separated the trackers into “Mobility” and “Telematics”, but that was not a good idea at all.
There has to be another solution, a better way, easier…
It would be a huge job to support all the trackers and their functions that interest us…
I must not be the only one to have asked myself this question. No ?
I would very much like to have your opinion on this.
How do you manage these differences ?

Thanks a lot for your help,
Sincerely.

{
  "shared": {
    "16": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 2147483647,
      "name": "total_odometer",
      "unit": "m"
    },
    "17": {
      "value-type": "float",
      "min-value": -8000,
      "max-value": 8000,
      "precision": 0.001,
      "name": "axis_x",
      "unit": "G"
    },
    "18": {
      "value-type": "float",
      "min-value": -8000,
      "max-value": 8000,
      "precision": 0.001,
      "name": "axis_y",
      "unit": "G"
    },
    "19": {
      "value-type": "float",
      "min-value": -8000,
      "max-value": 8000,
      "precision": 0.001,
      "name": "axis_z",
      "unit": "G"
    },
    "21": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 5,
      "name": "gsm_signal"
    },
    "24": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 350,
      "name": "speed",
      "unit": "km/h"
    },
    "67": {
      "value-type": "float",
      "min-value": 0,
      "max-value": 65535,
      "precision": 0.001,
      "name": "battery_voltage",
      "unit": "V"
    },
    "68": {
      "value-type": "float",
      "min-value": 0,
      "max-value": 65535,
      "precision": 0.001,
      "name": "battery_current",
      "unit": "A"
    },
    "69": {
      "value-type": "enum",
      "values": {
        "0": "GNSS OFF",
        "1": "GNSS ON with fix",
        "2": "GNSS ON without fix",
        "3": "GNSS SLEEP"
      },
      "name": "gnss_status"
    },
    "113": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 100,
      "name": "battery_level",
      "unit": "%"
    },
    "155": {
      "value-type": "enum",
      "values": {
        "0": "Left zone",
        "1": "Entered zone",
        "2": "Overspeeding end",
        "3": "Overspeeding start"
      },
      "name": "geofence_zone_01"
    },
    "156": {
      "value-type": "enum",
      "values": {
        "0": "Left zone",
        "1": "Entered zone",
        "2": "Overspeeding end",
        "3": "Overspeeding start"
      },
      "name": "geofence_zone_02"
    },
    "157": {
      "value-type": "enum",
      "values": {
        "0": "Left zone",
        "1": "Entered zone",
        "2": "Overspeeding end",
        "3": "Overspeeding start"
      },
      "name": "geofence_zone_03"
    },
    "158": {
      "value-type": "enum",
      "values": {
        "0": "Left zone",
        "1": "Entered zone",
        "2": "Overspeeding end",
        "3": "Overspeeding start"
      },
      "name": "geofence_zone_04"
    },
    "159": {
      "value-type": "enum",
      "values": {
        "0": "Left zone",
        "1": "Entered zone",
        "2": "Overspeeding end",
        "3": "Overspeeding start"
      },
      "name": "geofence_zone_05"
    },
    "175": {
      "value-type": "bool",
      "values": {
        "0": "Left zone",
        "1": "Entered zone"
      },
      "name": "auto_geofence"
    },
    "199": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 2147483647,
      "name": "trip_odometer",
      "unit": "m"
    },
    "236": {
      "value-type": "bool",
      "values": {
        "0": "Reserved",
        "1": "Alarm event occured"
      },
      "name": "alarm",
      "unit": "m"
    },
    "240": {
      "value-type": "bool",
      "values": {
        "0": "Movement OFF",
        "1": "Movement ON"
      },
      "name": "movement"
    },
    "255": {
      "name": "overspeeding",
      "value-type": "integer",
      "min-value": 0,
      "max-value": 255
    },
    "385": {
      "name": "beacons_list",
      "value-type": "hex",
      "max-lenght": 1024
    }
  },
  "telematics": {
    "1": {
      "value-type": "bool",
      "name": "digital_input_1"
    },
    "2": {
      "value-type": "bool",
      "name": "digital_input_2"
    },
    "3": {
      "value-type": "bool",
      "name": "digital_input_3"
    },
    "6": {
      "value-type": "float",
      "min-value": 0,
      "max-value": 65535,
      "precision": 0.001,
      "name": "analog_input_2"
    },
    "9": {
      "value-type": "float",
      "min-value": 0,
      "max-value": 65535,
      "precision": 0.001,
      "name": "analog_input_1"
    },
    "66": {
      "value-type": "float",
      "min-value": 0,
      "max-value": 65535,
      "precision": 0.001,
      "name": "external_voltage"
    },
    "179": {
      "value-type": "bool",
      "name": "digital_output_1"
    },
    "180": {
      "value-type": "bool",
      "name": "digital_output_2"
    },
    "239": {
      "name": "ignition",
      "value-type": "integer",
      "min-value": 0,
      "max-value": 160
    },
    "251": {
      "name": "idling",
      "value-type": "bool",
      "values": {
        "0": "Moving",
        "1": "Idling"
      }
    },
    "389": {
      "value-type": "hex",
      "max-lenght": 2,
      "name": "button_click"
    },
    "390": {
      "value-type": "integer",
      "min-value": 0,
      "max-value": 4294967295,
      "precision": 0.1,
      "name": "odb_oem_fuel_level",
      "unit": "l"
    }
  },
  "mobility": {
    "116": {
      "value-type": "bool",
      "values": {
        "0": "Charger not connected",
        "1": "Charger connected"
      },
      "name": "charger_connected"
    },
    "242": {
      "name": "man_down",
      "value-type": "bool",
      "values": {
        "0": "Man Down deactivated",
        "1": "Man Down active"
      }
    },
    "389": {
      "value-type": "hex",
      "min-value": 0,
      "max-value": 160,
      "name": "button_click"
    },
    "390": {
      "value-type": "bool",
      "values": {
        "0": "Device turned OFF",
        "1": "Device turned ON"
      },
      "name": "power_event"
    }
  }
}

Hi,

Good day, This is how the device works, because Telematics and Mobility devices are different categories you need to create a separate AVL ID for each category.

You can also visit a site like GitHub, StackOverflow, etc. to gather feedback for this case.

Regards,
Maynard C.

Hello Mr. Castro,
Good day !
I would like to thank you for your answer.

So if I continue to separate the trackers like what I have done before, can you confirm me that for one AVL ID on telematics it will represent the same thing for all devices of this category ?
I imagine the same for the mobility devices.

Also, with the fusion of Telematics and Mobility, will the mobility devices disappear in the future ?
Or could see a standardization ?

I am sorry, but I haven’t been able to found a topic on Stack Overflow or Github about this case.
Do you have one ?

Thanks again for your time.

EDIT : After an other search, I have seen a difference between Telematics trackers. If I don’t make mistakes…
For FMC130, AVL ID 113 is “Battery Level”. For FMC640, it’s “Service Distance”.
Ok, now, I know, that I have to find a clever way to make a list of those differences…
But it will be a manual work and I will not be able to do it for every tracker… It will be a huge task…

I imagine, I should be careful about GPRS Parameters ID between trackers also.

Else, maybe do you have a CSV or Excel file that you use to create the arrays we can find here ?
https://wiki.teltonika-gps.com/view/FMC640_Teltonika_Data_Sending_Parameters_ID
(for all trackers :no_mouth:).

It could be really helpful to make what I want automatically !