### Mutation Use this mutation to import a template specifically designed to work with the `DistanceTrackerDevice` type provided in the `location_tracker_devices.graphql` schema extension. This template uses Zabbix Agent 2 MQTT keys (`mqtt.get`) to subscribe to a broker and retrieve device data, which is then parsed into a hierarchical structure compatible with the GraphQL API's dynamic resolvers. ```graphql mutation ImportDistanceTrackerTemplate($templates: [CreateTemplate!]!) { importTemplates(templates: $templates) { host templateid message error { message code data } } } ``` ### Variables The following sample defines the `DISTANCE_TRACKER` template. Note the `deviceType` tag set to `DistanceTrackerDevice`, which instructs the GraphQL API to resolve this host using the specialized `DistanceTrackerDevice` type. The item keys use the `json_` prefix where appropriate (e.g. `state.current.json_distances`) to ensure that the JSON strings received from Zabbix are automatically parsed into objects/arrays by the GraphQL resolver. ```json { "templates": [ { "host": "DISTANCE_TRACKER", "name": "Distance Tracker Device Template", "groupNames": ["Templates/Roadwork/Devices"], "templates": [ { "name": "ROADWORK_DEVICE" } ], "tags": [ { "tag": "class", "value": "roadwork" }, { "tag": "deviceType", "value": "DistanceTrackerDevice" } ], "items": [ { "name": "MQTT Master Data", "type": 0, "key": "mqtt.get[\"tcp://mqtt-broker:1883\",\"device/distance_tracker/data\"]", "value_type": 4, "history": "0", "description": "Master item receiving full JSON payload via MQTT Agent 2" }, { "name": "Device Count", "type": 18, "key": "state.current.count", "value_type": 3, "history": "7d", "master_item": { "key": "mqtt.get[\"tcp://mqtt-broker:1883\",\"device/distance_tracker/data\"]" }, "preprocessing": [ { "type": 12, "params": ["$.count"] } ] }, { "name": "Time From", "type": 18, "key": "state.current.timeFrom", "value_type": 4, "history": "7d", "master_item": { "key": "mqtt.get[\"tcp://mqtt-broker:1883\",\"device/distance_tracker/data\"]" }, "preprocessing": [ { "type": 12, "params": ["$.timeFrom"] } ] }, { "name": "Time Until", "type": 18, "key": "state.current.timeUntil", "value_type": 4, "history": "7d", "master_item": { "key": "mqtt.get[\"tcp://mqtt-broker:1883\",\"device/distance_tracker/data\"]" }, "preprocessing": [ { "type": 12, "params": ["$.timeUntil"] } ] }, { "name": "Nearby Distances", "type": 18, "key": "state.current.json_distances", "value_type": 4, "history": "7d", "master_item": { "key": "mqtt.get[\"tcp://mqtt-broker:1883\",\"device/distance_tracker/data\"]" }, "preprocessing": [ { "type": 12, "params": ["$.distances"] } ] } ] } ] } ``` ### Technical Note: Hierarchical Mapping The `DistanceTrackerDevice` type in the schema extension is mapped using `createHierarchicalValueFieldResolver`. This resolver expects Zabbix items to follow a naming convention that mirrors the GraphQL structure: - `state.current.count` maps to `state { current { count } }` - `state.current.json_distances` maps to `state { current { distances } }` (with automatic JSON parsing due to the `json_` prefix) The `mqtt.get` keys replace the older `mqtt.trap` style, leveraging the Zabbix Agent 2 MQTT plugin for active topic subscriptions.