[{"data":1,"prerenderedAt":1026},["ShallowReactive",2],{"docs:/docs/guides/iot":3},{"id":4,"title":5,"body":6,"description":1019,"extension":1020,"meta":1021,"navigation":68,"path":1022,"seo":1023,"stem":1024,"__hash__":1025},"docs/docs/guides/iot.md","IoT & Tracking",{"type":7,"value":8,"toc":1011},"minimark",[9,13,17,22,25,29,644,648,651,928,932,967,971,988,992,1007],[10,11,5],"h1",{"id":12},"iot-tracking",[14,15,16],"p",{},"Build real-time IoT applications and tracking systems with NoLag.",[18,19,21],"h2",{"id":20},"overview","Overview",[14,23,24],{},"NoLag is ideal for IoT applications that require real-time data streaming from devices. Whether you're tracking vehicles, monitoring sensors, or controlling smart devices, NoLag provides the low-latency infrastructure you need.",[18,26,28],{"id":27},"fleet-tracking-example","Fleet Tracking Example",[30,31,32,343,495],"code-tabs",{},[33,34,40],"pre",{"className":35,"code":36,"filename":37,"language":38,"meta":39,"style":39},"language-typescript shiki shiki-themes github-light github-dark","import { NoLag } from '@nolag/js-sdk'\n\nconst client = NoLag('device_access_token')\nawait client.connect()\n\nconst fleet = client.setApp('fleet-tracker').setRoom('vehicles')\n\n// Subscribe to all vehicle updates\nfleet.subscribe('location')\nfleet.subscribe('telemetry')\n\n// Handle location updates\nfleet.on('location', (data) => {\n  updateMapMarker(data.vehicleId, {\n    lat: data.latitude,\n    lng: data.longitude,\n    heading: data.heading,\n    speed: data.speed\n  })\n})\n\n// Handle telemetry data\nfleet.on('telemetry', (data) => {\n  updateVehicleStatus(data.vehicleId, {\n    fuel: data.fuelLevel,\n    engine: data.engineStatus,\n    battery: data.batteryVoltage\n  })\n})\n","TypeScript","typescript","",[41,42,43,63,70,96,111,116,149,154,161,177,191,196,202,230,239,245,251,257,263,269,275,280,286,307,315,321,327,333,338],"code",{"__ignoreMap":39},[44,45,48,52,56,59],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"szBVR","import",[44,53,55],{"class":54},"sVt8B"," { NoLag } ",[44,57,58],{"class":50},"from",[44,60,62],{"class":61},"sZZnC"," '@nolag/js-sdk'\n",[44,64,66],{"class":46,"line":65},2,[44,67,69],{"emptyLinePlaceholder":68},true,"\n",[44,71,73,76,80,83,87,90,93],{"class":46,"line":72},3,[44,74,75],{"class":50},"const",[44,77,79],{"class":78},"sj4cs"," client",[44,81,82],{"class":50}," =",[44,84,86],{"class":85},"sScJk"," NoLag",[44,88,89],{"class":54},"(",[44,91,92],{"class":61},"'device_access_token'",[44,94,95],{"class":54},")\n",[44,97,99,102,105,108],{"class":46,"line":98},4,[44,100,101],{"class":50},"await",[44,103,104],{"class":54}," client.",[44,106,107],{"class":85},"connect",[44,109,110],{"class":54},"()\n",[44,112,114],{"class":46,"line":113},5,[44,115,69],{"emptyLinePlaceholder":68},[44,117,119,121,124,126,128,131,133,136,139,142,144,147],{"class":46,"line":118},6,[44,120,75],{"class":50},[44,122,123],{"class":78}," fleet",[44,125,82],{"class":50},[44,127,104],{"class":54},[44,129,130],{"class":85},"setApp",[44,132,89],{"class":54},[44,134,135],{"class":61},"'fleet-tracker'",[44,137,138],{"class":54},").",[44,140,141],{"class":85},"setRoom",[44,143,89],{"class":54},[44,145,146],{"class":61},"'vehicles'",[44,148,95],{"class":54},[44,150,152],{"class":46,"line":151},7,[44,153,69],{"emptyLinePlaceholder":68},[44,155,157],{"class":46,"line":156},8,[44,158,160],{"class":159},"sJ8bj","// Subscribe to all vehicle updates\n",[44,162,164,167,170,172,175],{"class":46,"line":163},9,[44,165,166],{"class":54},"fleet.",[44,168,169],{"class":85},"subscribe",[44,171,89],{"class":54},[44,173,174],{"class":61},"'location'",[44,176,95],{"class":54},[44,178,180,182,184,186,189],{"class":46,"line":179},10,[44,181,166],{"class":54},[44,183,169],{"class":85},[44,185,89],{"class":54},[44,187,188],{"class":61},"'telemetry'",[44,190,95],{"class":54},[44,192,194],{"class":46,"line":193},11,[44,195,69],{"emptyLinePlaceholder":68},[44,197,199],{"class":46,"line":198},12,[44,200,201],{"class":159},"// Handle location updates\n",[44,203,205,207,210,212,214,217,221,224,227],{"class":46,"line":204},13,[44,206,166],{"class":54},[44,208,209],{"class":85},"on",[44,211,89],{"class":54},[44,213,174],{"class":61},[44,215,216],{"class":54},", (",[44,218,220],{"class":219},"s4XuR","data",[44,222,223],{"class":54},") ",[44,225,226],{"class":50},"=>",[44,228,229],{"class":54}," {\n",[44,231,233,236],{"class":46,"line":232},14,[44,234,235],{"class":85},"  updateMapMarker",[44,237,238],{"class":54},"(data.vehicleId, {\n",[44,240,242],{"class":46,"line":241},15,[44,243,244],{"class":54},"    lat: data.latitude,\n",[44,246,248],{"class":46,"line":247},16,[44,249,250],{"class":54},"    lng: data.longitude,\n",[44,252,254],{"class":46,"line":253},17,[44,255,256],{"class":54},"    heading: data.heading,\n",[44,258,260],{"class":46,"line":259},18,[44,261,262],{"class":54},"    speed: data.speed\n",[44,264,266],{"class":46,"line":265},19,[44,267,268],{"class":54},"  })\n",[44,270,272],{"class":46,"line":271},20,[44,273,274],{"class":54},"})\n",[44,276,278],{"class":46,"line":277},21,[44,279,69],{"emptyLinePlaceholder":68},[44,281,283],{"class":46,"line":282},22,[44,284,285],{"class":159},"// Handle telemetry data\n",[44,287,289,291,293,295,297,299,301,303,305],{"class":46,"line":288},23,[44,290,166],{"class":54},[44,292,209],{"class":85},[44,294,89],{"class":54},[44,296,188],{"class":61},[44,298,216],{"class":54},[44,300,220],{"class":219},[44,302,223],{"class":54},[44,304,226],{"class":50},[44,306,229],{"class":54},[44,308,310,313],{"class":46,"line":309},24,[44,311,312],{"class":85},"  updateVehicleStatus",[44,314,238],{"class":54},[44,316,318],{"class":46,"line":317},25,[44,319,320],{"class":54},"    fuel: data.fuelLevel,\n",[44,322,324],{"class":46,"line":323},26,[44,325,326],{"class":54},"    engine: data.engineStatus,\n",[44,328,330],{"class":46,"line":329},27,[44,331,332],{"class":54},"    battery: data.batteryVoltage\n",[44,334,336],{"class":46,"line":335},28,[44,337,268],{"class":54},[44,339,341],{"class":46,"line":340},29,[44,342,274],{"class":54},[33,344,349],{"className":345,"code":346,"filename":347,"language":348,"meta":39,"style":39},"language-python shiki shiki-themes github-light github-dark","from nolag import NoLag\n\nclient = NoLag('device_access_token')\nawait client.connect()\n\nfleet = client.set_app('fleet-tracker').set_room('vehicles')\n\n# Subscribe to all vehicle updates\nawait fleet.subscribe('location')\nawait fleet.subscribe('telemetry')\n\n# Handle location updates\ndef on_location(data, meta):\n    update_map_marker(data['vehicleId'], {\n        'lat': data['latitude'],\n        'lng': data['longitude'],\n        'heading': data['heading'],\n        'speed': data['speed']\n    })\n\n# Handle telemetry data\ndef on_telemetry(data, meta):\n    update_vehicle_status(data['vehicleId'], {\n        'fuel': data['fuelLevel'],\n        'engine': data['engineStatus'],\n        'battery': data['batteryVoltage']\n    })\n\nfleet.on('location', on_location)\nfleet.on('telemetry', on_telemetry)\n","Python","python",[41,350,351,356,360,365,370,374,379,383,388,393,398,402,407,412,417,422,427,432,437,442,446,451,456,461,466,471,476,480,484,489],{"__ignoreMap":39},[44,352,353],{"class":46,"line":47},[44,354,355],{},"from nolag import NoLag\n",[44,357,358],{"class":46,"line":65},[44,359,69],{"emptyLinePlaceholder":68},[44,361,362],{"class":46,"line":72},[44,363,364],{},"client = NoLag('device_access_token')\n",[44,366,367],{"class":46,"line":98},[44,368,369],{},"await client.connect()\n",[44,371,372],{"class":46,"line":113},[44,373,69],{"emptyLinePlaceholder":68},[44,375,376],{"class":46,"line":118},[44,377,378],{},"fleet = client.set_app('fleet-tracker').set_room('vehicles')\n",[44,380,381],{"class":46,"line":151},[44,382,69],{"emptyLinePlaceholder":68},[44,384,385],{"class":46,"line":156},[44,386,387],{},"# Subscribe to all vehicle updates\n",[44,389,390],{"class":46,"line":163},[44,391,392],{},"await fleet.subscribe('location')\n",[44,394,395],{"class":46,"line":179},[44,396,397],{},"await fleet.subscribe('telemetry')\n",[44,399,400],{"class":46,"line":193},[44,401,69],{"emptyLinePlaceholder":68},[44,403,404],{"class":46,"line":198},[44,405,406],{},"# Handle location updates\n",[44,408,409],{"class":46,"line":204},[44,410,411],{},"def on_location(data, meta):\n",[44,413,414],{"class":46,"line":232},[44,415,416],{},"    update_map_marker(data['vehicleId'], {\n",[44,418,419],{"class":46,"line":241},[44,420,421],{},"        'lat': data['latitude'],\n",[44,423,424],{"class":46,"line":247},[44,425,426],{},"        'lng': data['longitude'],\n",[44,428,429],{"class":46,"line":253},[44,430,431],{},"        'heading': data['heading'],\n",[44,433,434],{"class":46,"line":259},[44,435,436],{},"        'speed': data['speed']\n",[44,438,439],{"class":46,"line":265},[44,440,441],{},"    })\n",[44,443,444],{"class":46,"line":271},[44,445,69],{"emptyLinePlaceholder":68},[44,447,448],{"class":46,"line":277},[44,449,450],{},"# Handle telemetry data\n",[44,452,453],{"class":46,"line":282},[44,454,455],{},"def on_telemetry(data, meta):\n",[44,457,458],{"class":46,"line":288},[44,459,460],{},"    update_vehicle_status(data['vehicleId'], {\n",[44,462,463],{"class":46,"line":309},[44,464,465],{},"        'fuel': data['fuelLevel'],\n",[44,467,468],{"class":46,"line":317},[44,469,470],{},"        'engine': data['engineStatus'],\n",[44,472,473],{"class":46,"line":323},[44,474,475],{},"        'battery': data['batteryVoltage']\n",[44,477,478],{"class":46,"line":329},[44,479,441],{},[44,481,482],{"class":46,"line":335},[44,483,69],{"emptyLinePlaceholder":68},[44,485,486],{"class":46,"line":340},[44,487,488],{},"fleet.on('location', on_location)\n",[44,490,492],{"class":46,"line":491},30,[44,493,494],{},"fleet.on('telemetry', on_telemetry)\n",[33,496,501],{"className":497,"code":498,"filename":499,"language":500,"meta":39,"style":39},"language-go shiki shiki-themes github-light github-dark","package main\n\nimport nolag \"github.com/NoLagApp/go-sdk\"\n\nfunc main() {\n    client := nolag.New(\"device_access_token\")\n    client.Connect()\n\n    fleet := client.SetApp(\"fleet-tracker\").SetRoom(\"vehicles\")\n\n    // Subscribe to all vehicle updates with handlers\n    fleet.Subscribe(\"location\", func(data any, meta nolag.MessageMeta) {\n        d, _ := data.(map[string]any)\n        updateMapMarker(d[\"vehicleId\"].(string), MapPosition{\n            Lat:     d[\"latitude\"].(float64),\n            Lng:     d[\"longitude\"].(float64),\n            Heading: d[\"heading\"].(float64),\n            Speed:   d[\"speed\"].(float64),\n        })\n    })\n\n    fleet.Subscribe(\"telemetry\", func(data any, meta nolag.MessageMeta) {\n        d, _ := data.(map[string]any)\n        updateVehicleStatus(d[\"vehicleId\"].(string), VehicleStatus{\n            Fuel:    d[\"fuelLevel\"].(float64),\n            Engine:  d[\"engineStatus\"].(string),\n            Battery: d[\"batteryVoltage\"].(float64),\n        })\n    })\n}\n","Go","go",[41,502,503,508,512,517,521,526,531,536,540,545,549,554,559,564,569,574,579,584,589,594,598,602,607,611,616,621,626,631,635,639],{"__ignoreMap":39},[44,504,505],{"class":46,"line":47},[44,506,507],{},"package main\n",[44,509,510],{"class":46,"line":65},[44,511,69],{"emptyLinePlaceholder":68},[44,513,514],{"class":46,"line":72},[44,515,516],{},"import nolag \"github.com/NoLagApp/go-sdk\"\n",[44,518,519],{"class":46,"line":98},[44,520,69],{"emptyLinePlaceholder":68},[44,522,523],{"class":46,"line":113},[44,524,525],{},"func main() {\n",[44,527,528],{"class":46,"line":118},[44,529,530],{},"    client := nolag.New(\"device_access_token\")\n",[44,532,533],{"class":46,"line":151},[44,534,535],{},"    client.Connect()\n",[44,537,538],{"class":46,"line":156},[44,539,69],{"emptyLinePlaceholder":68},[44,541,542],{"class":46,"line":163},[44,543,544],{},"    fleet := client.SetApp(\"fleet-tracker\").SetRoom(\"vehicles\")\n",[44,546,547],{"class":46,"line":179},[44,548,69],{"emptyLinePlaceholder":68},[44,550,551],{"class":46,"line":193},[44,552,553],{},"    // Subscribe to all vehicle updates with handlers\n",[44,555,556],{"class":46,"line":198},[44,557,558],{},"    fleet.Subscribe(\"location\", func(data any, meta nolag.MessageMeta) {\n",[44,560,561],{"class":46,"line":204},[44,562,563],{},"        d, _ := data.(map[string]any)\n",[44,565,566],{"class":46,"line":232},[44,567,568],{},"        updateMapMarker(d[\"vehicleId\"].(string), MapPosition{\n",[44,570,571],{"class":46,"line":241},[44,572,573],{},"            Lat:     d[\"latitude\"].(float64),\n",[44,575,576],{"class":46,"line":247},[44,577,578],{},"            Lng:     d[\"longitude\"].(float64),\n",[44,580,581],{"class":46,"line":253},[44,582,583],{},"            Heading: d[\"heading\"].(float64),\n",[44,585,586],{"class":46,"line":259},[44,587,588],{},"            Speed:   d[\"speed\"].(float64),\n",[44,590,591],{"class":46,"line":265},[44,592,593],{},"        })\n",[44,595,596],{"class":46,"line":271},[44,597,441],{},[44,599,600],{"class":46,"line":277},[44,601,69],{"emptyLinePlaceholder":68},[44,603,604],{"class":46,"line":282},[44,605,606],{},"    fleet.Subscribe(\"telemetry\", func(data any, meta nolag.MessageMeta) {\n",[44,608,609],{"class":46,"line":288},[44,610,563],{},[44,612,613],{"class":46,"line":309},[44,614,615],{},"        updateVehicleStatus(d[\"vehicleId\"].(string), VehicleStatus{\n",[44,617,618],{"class":46,"line":317},[44,619,620],{},"            Fuel:    d[\"fuelLevel\"].(float64),\n",[44,622,623],{"class":46,"line":323},[44,624,625],{},"            Engine:  d[\"engineStatus\"].(string),\n",[44,627,628],{"class":46,"line":329},[44,629,630],{},"            Battery: d[\"batteryVoltage\"].(float64),\n",[44,632,633],{"class":46,"line":335},[44,634,593],{},[44,636,637],{"class":46,"line":340},[44,638,441],{},[44,640,641],{"class":46,"line":491},[44,642,643],{},"}\n",[18,645,647],{"id":646},"device-publishing","Device Publishing",[14,649,650],{},"On the IoT device, publish updates at regular intervals:",[30,652,653,770,847],{},[33,654,656],{"className":35,"code":655,"filename":37,"language":38,"meta":39,"style":39},"// On the IoT device: publish location updates\nsetInterval(() => {\n  const location = gps.getLocation()\n\n  device.emit('location', {\n    vehicleId: DEVICE_ID,\n    latitude: location.lat,\n    longitude: location.lng,\n    heading: location.heading,\n    speed: location.speed,\n    timestamp: Date.now()\n  })\n}, 5000) // Every 5 seconds\n",[41,657,658,663,675,693,697,712,723,728,733,738,743,753,757],{"__ignoreMap":39},[44,659,660],{"class":46,"line":47},[44,661,662],{"class":159},"// On the IoT device: publish location updates\n",[44,664,665,668,671,673],{"class":46,"line":65},[44,666,667],{"class":85},"setInterval",[44,669,670],{"class":54},"(() ",[44,672,226],{"class":50},[44,674,229],{"class":54},[44,676,677,680,683,685,688,691],{"class":46,"line":72},[44,678,679],{"class":50},"  const",[44,681,682],{"class":78}," location",[44,684,82],{"class":50},[44,686,687],{"class":54}," gps.",[44,689,690],{"class":85},"getLocation",[44,692,110],{"class":54},[44,694,695],{"class":46,"line":98},[44,696,69],{"emptyLinePlaceholder":68},[44,698,699,702,705,707,709],{"class":46,"line":113},[44,700,701],{"class":54},"  device.",[44,703,704],{"class":85},"emit",[44,706,89],{"class":54},[44,708,174],{"class":61},[44,710,711],{"class":54},", {\n",[44,713,714,717,720],{"class":46,"line":118},[44,715,716],{"class":54},"    vehicleId: ",[44,718,719],{"class":78},"DEVICE_ID",[44,721,722],{"class":54},",\n",[44,724,725],{"class":46,"line":151},[44,726,727],{"class":54},"    latitude: location.lat,\n",[44,729,730],{"class":46,"line":156},[44,731,732],{"class":54},"    longitude: location.lng,\n",[44,734,735],{"class":46,"line":163},[44,736,737],{"class":54},"    heading: location.heading,\n",[44,739,740],{"class":46,"line":179},[44,741,742],{"class":54},"    speed: location.speed,\n",[44,744,745,748,751],{"class":46,"line":193},[44,746,747],{"class":54},"    timestamp: Date.",[44,749,750],{"class":85},"now",[44,752,110],{"class":54},[44,754,755],{"class":46,"line":198},[44,756,268],{"class":54},[44,758,759,762,765,767],{"class":46,"line":204},[44,760,761],{"class":54},"}, ",[44,763,764],{"class":78},"5000",[44,766,223],{"class":54},[44,768,769],{"class":159},"// Every 5 seconds\n",[33,771,773],{"className":345,"code":772,"filename":347,"language":348,"meta":39,"style":39},"# On the IoT device: publish location updates\nasync def publish_location():\n    while True:\n        location = gps.get_location()\n\n        await device.emit('location', {\n            'vehicleId': DEVICE_ID,\n            'latitude': location.lat,\n            'longitude': location.lng,\n            'heading': location.heading,\n            'speed': location.speed,\n            'timestamp': time.time()\n        })\n\n        await asyncio.sleep(5)  # Every 5 seconds\n",[41,774,775,780,785,790,795,799,804,809,814,819,824,829,834,838,842],{"__ignoreMap":39},[44,776,777],{"class":46,"line":47},[44,778,779],{},"# On the IoT device: publish location updates\n",[44,781,782],{"class":46,"line":65},[44,783,784],{},"async def publish_location():\n",[44,786,787],{"class":46,"line":72},[44,788,789],{},"    while True:\n",[44,791,792],{"class":46,"line":98},[44,793,794],{},"        location = gps.get_location()\n",[44,796,797],{"class":46,"line":113},[44,798,69],{"emptyLinePlaceholder":68},[44,800,801],{"class":46,"line":118},[44,802,803],{},"        await device.emit('location', {\n",[44,805,806],{"class":46,"line":151},[44,807,808],{},"            'vehicleId': DEVICE_ID,\n",[44,810,811],{"class":46,"line":156},[44,812,813],{},"            'latitude': location.lat,\n",[44,815,816],{"class":46,"line":163},[44,817,818],{},"            'longitude': location.lng,\n",[44,820,821],{"class":46,"line":179},[44,822,823],{},"            'heading': location.heading,\n",[44,825,826],{"class":46,"line":193},[44,827,828],{},"            'speed': location.speed,\n",[44,830,831],{"class":46,"line":198},[44,832,833],{},"            'timestamp': time.time()\n",[44,835,836],{"class":46,"line":204},[44,837,593],{},[44,839,840],{"class":46,"line":232},[44,841,69],{"emptyLinePlaceholder":68},[44,843,844],{"class":46,"line":241},[44,845,846],{},"        await asyncio.sleep(5)  # Every 5 seconds\n",[33,848,850],{"className":497,"code":849,"filename":499,"language":500,"meta":39,"style":39},"// On the IoT device: publish location updates\nfunc publishLocation() {\n    ticker := time.NewTicker(5 * time.Second)\n    for range ticker.C {\n        location := gps.GetLocation()\n\n        device.Emit(\"location\", map[string]any{\n            \"vehicleId\": DEVICE_ID,\n            \"latitude\":  location.Lat,\n            \"longitude\": location.Lng,\n            \"heading\":   location.Heading,\n            \"speed\":     location.Speed,\n            \"timestamp\": time.Now().Unix(),\n        })\n    }\n}\n",[41,851,852,856,861,866,871,876,880,885,890,895,900,905,910,915,919,924],{"__ignoreMap":39},[44,853,854],{"class":46,"line":47},[44,855,662],{},[44,857,858],{"class":46,"line":65},[44,859,860],{},"func publishLocation() {\n",[44,862,863],{"class":46,"line":72},[44,864,865],{},"    ticker := time.NewTicker(5 * time.Second)\n",[44,867,868],{"class":46,"line":98},[44,869,870],{},"    for range ticker.C {\n",[44,872,873],{"class":46,"line":113},[44,874,875],{},"        location := gps.GetLocation()\n",[44,877,878],{"class":46,"line":118},[44,879,69],{"emptyLinePlaceholder":68},[44,881,882],{"class":46,"line":151},[44,883,884],{},"        device.Emit(\"location\", map[string]any{\n",[44,886,887],{"class":46,"line":156},[44,888,889],{},"            \"vehicleId\": DEVICE_ID,\n",[44,891,892],{"class":46,"line":163},[44,893,894],{},"            \"latitude\":  location.Lat,\n",[44,896,897],{"class":46,"line":179},[44,898,899],{},"            \"longitude\": location.Lng,\n",[44,901,902],{"class":46,"line":193},[44,903,904],{},"            \"heading\":   location.Heading,\n",[44,906,907],{"class":46,"line":198},[44,908,909],{},"            \"speed\":     location.Speed,\n",[44,911,912],{"class":46,"line":204},[44,913,914],{},"            \"timestamp\": time.Now().Unix(),\n",[44,916,917],{"class":46,"line":232},[44,918,593],{},[44,920,921],{"class":46,"line":241},[44,922,923],{},"    }\n",[44,925,926],{"class":46,"line":247},[44,927,643],{},[18,929,931],{"id":930},"use-cases","Use Cases",[933,934,935,943,949,955,961],"ul",{},[936,937,938,942],"li",{},[939,940,941],"strong",{},"Fleet management"," - Track vehicles, deliveries, and drivers",[936,944,945,948],{},[939,946,947],{},"Asset tracking"," - Monitor equipment and inventory location",[936,950,951,954],{},[939,952,953],{},"Sensor networks"," - Collect data from environmental sensors",[936,956,957,960],{},[939,958,959],{},"Smart home"," - Control and monitor IoT devices",[936,962,963,966],{},[939,964,965],{},"Wearables"," - Stream health and fitness data",[18,968,970],{"id":969},"best-practices","Best Practices",[933,972,973,976,979,982,985],{},[936,974,975],{},"Use device-type actors for IoT devices",[936,977,978],{},"Batch telemetry data to reduce message frequency",[936,980,981],{},"Use QoS 1 for important status updates",[936,983,984],{},"Implement reconnection logic for unreliable networks",[936,986,987],{},"Consider data retention and historical storage needs",[18,989,991],{"id":990},"next-steps","Next Steps",[933,993,994,1001],{},[936,995,996],{},[997,998,1000],"a",{"href":999},"/docs/concepts/qos","Quality of Service",[936,1002,1003],{},[997,1004,1006],{"href":1005},"/docs/authentication","Device Authentication",[1008,1009,1010],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":39,"searchDepth":65,"depth":65,"links":1012},[1013,1014,1015,1016,1017,1018],{"id":20,"depth":65,"text":21},{"id":27,"depth":65,"text":28},{"id":646,"depth":65,"text":647},{"id":930,"depth":65,"text":931},{"id":969,"depth":65,"text":970},{"id":990,"depth":65,"text":991},"Build IoT applications and real-time tracking systems with NoLag.","md",{},"/docs/guides/iot",{"title":5,"description":1019},"docs/guides/iot","gxIhVA3zVwqz95Mv8NWtSRq0HWmWiWTvJehCch36geM",1788160343512]