مرجع API دستگاه MQTT

شروع کار

مبانی MQTT

پروتکل MQTT یک پروتکل پیام‌رسانی سبک است که احتمالاً به دلیل سبک‌وزنی آن، بیشترین تناسب را برای دستگاه‌های مختلف اینترنت اشیا دارد. می‌توانید اطلاعات بیشتری در مورد MQTT اینجا پیدا کنید.

گره‌های سرور ThingsBoard به عنوان یک MQTT Broker عمل می‌کنند که از سطح‌های کیفیت خدمات (QoS) ۰ (حداکثر یک بار) و ۱ (حداقل یک بار) و مجموعه‌ای از موضوعات قابل تنظیم پشتیبانی می‌کنند.

تنظیم کتابخانه‌های کلاینت

می‌توانید تعداد زیادی از کتابخانه‌های کلاینت MQTT را در وب پیدا کنید. مثال‌های این مقاله بر اساس Mosquitto و MQTT.js هستند. برای تنظیم یکی از این ابزارها، می‌توانید از دستورالعمل‌های موجود در راهنمای Hello World ما استفاده کنید.

اتصال MQTT

در این مقاله، از اعتبار دستگاه با استفاده از توکن دسترسی استفاده خواهیم کرد و این توکن با نام $ACCESS_TOKEN اشاره خواهد شد. برنامه باید پیام MQTT CONNECT را با نام کاربری که شامل $ACCESS_TOKEN است، ارسال کند.

کدهای بازگشت احتمالی و دلایل آن‌ها در طول مراحل اتصال:

  • 0x00 اتصال برقرار شد - به طور موفقیت‌آمیز به سرور MQTT ThingsBoard متصل شد.
  • 0x04 اتصال رد شد، نام کاربری یا رمز عبور نادرست است - نام کاربری خالی است.
  • 0x05 اتصال رد شد، مجاز نیست - نام کاربری حاوی $ACCESS_TOKEN نامعتبر است.

گزینه دیگر برای احراز هویت استفاده از گواهینامه‌های X.509 یا اعتبارنامه‌های MQTT پایه است - ترکیبی از شناسه کلاینت، نام کاربری و رمز عبور.

حالا آماده هستید تا داده‌های تلماتری را از طرف دستگاه خود منتشر کنید. در این مثال از دستورات ساده‌ای برای انتشار داده از طریق MQTT استفاده خواهیم کرد. سیستم‌عامل خود را انتخاب کنید.

MQTT ویندوز
MQTT لینوکس یا macOS

برای دانلود، نصب، تنظیم و اجرای mosquitto_pub در ویندوز از دستورالعمل‌های زیر استفاده کنید:

  1. دانلود و نصب Eclipse Mosquitto: به صفحه دانلود رسمی Mosquitto مراجعه کرده و نصب‌کننده مناسب ویندوز (32 بیتی یا 64 بیتی بسته به سیستم شما) را انتخاب کنید.
  2. پس از دانلود، نصب‌کننده را اجرا کنید و مراحل نصب را دنبال کنید. این کار Mosquitto را روی سیستم ویندوز شما نصب می‌کند. به طور پیش‌فرض Mosquitto در مسیر C:\Program Files\mosquitto نصب می‌شود.
  3. به‌روزرسانی متغیر “Path” سیستم: فایل‌های اجرایی mosquitto_pub.exe و mosquitto_sub.exe در دایرکتوری نصب Mosquitto قرار دارند. برای اینکه ویندوز بتواند این فایل‌ها را در هر دایرکتوری شناسایی کند، باید این دایرکتوری را به متغیر محیطی “Path” سیستم اضافه کنید.

برای افزودن دایرکتوری Mosquitto به متغیر “Path”، مراحل زیر را دنبال کنید:

ترمینال را باز کنید و مقادیر $THINGSBOARD_HOST_NAME و $ACCESS_TOKEN را با مقادیر مربوطه جایگزین کنید.

				
					mosquitto_pub -d -q 1 -h "$THINGSBOARD_HOST_NAME" -p "1883" -t "v1/devices/me/telemetry" -u "$ACCESS_TOKEN" -m {"temperature":25}
				
			

به‌عنوان مثال، متغیر $THINGSBOARD_HOST_NAME به نصب محلی شما اشاره می‌کند و متغیر $ACCESS_TOKEN برابر با ABC123 است.

				
					mosquitto_pub -d -q 1 -h "localhost" -p "1883" -t "v1/devices/me/telemetry" -u "ABC123" -m {"temperature":25}
				
			

خروجی موفق باید مشابه نمونه زیر باشد:

				
					Client mosqpub|xxx sending CONNECT
Client mosqpub|xxx received CONNACK
Client mosqpub|xxx sending PUBLISH (d0, q1, r0, m1, 'v1/devices/me/telemetry', ... (16 bytes))
Client mosqpub|xxx received PUBACK (Mid: 1)
Client mosqpub|xxx sending DISCONNECT

				
			

توجه: از نسخه 3.2 ThingsBoard به بعد، می‌توانید از اعتبارنامه‌های پایه MQTT (ترکیب شناسه کلاینت، نام کاربری و رمز عبور) استفاده کرده و نام موضوعات و نوع داده ارسالی را با استفاده از پروفایل دستگاه سفارشی‌سازی کنید. اطلاعات بیشتر را اینجا مشاهده کنید.

فرمت کلید-مقدار

به‌صورت پیش‌فرض، ThingsBoard از محتوای کلید-مقدار در قالب JSON پشتیبانی می‌کند. کلید همیشه یک رشته است، در حالی که مقدار می‌تواند یک رشته، بولین، دابل، لانگ یا JSON باشد. برای مثال:

				
					{
 "stringKey":"value1", 
 "booleanKey":true, 
 "doubleKey":42.0, 
 "longKey":73, 
 "jsonKey": {
    "someNumber": 42,
    "someArray": [1,2,3],
    "someNestedObject": {"key": "value"}
 }
}
				
			

با این حال، امکان ارسال داده از طریق Protocol Buffers نیز وجود دارد. لطفاً برای جزئیات بیشتر به بخش تنظیمات نوع انتقال MQTT در مقاله پروفایل دستگاه مراجعه کنید.

استفاده از فرمت باینری سفارشی یا برخی از چارچوب‌های سریال‌سازی نیز امکان‌پذیر است. برای جزئیات بیشتر، به بخش سفارشی‌سازی پروتکل مراجعه کنید.

رابط آپلود تله‌متری

برای ارسال داده‌های تله‌متری به سرور ThingsBoard، پیام PUBLISH را به موضوع زیر ارسال کنید:

				
					v1/devices/me/telemetry
				
			

یا

				
					[{"key1":"value1"}, {"key2":"value2"}]
				
			

لطفاً توجه داشته باشید که در این حالت، برچسب زمانی سمت سرور به داده‌های آپلود شده اختصاص خواهد یافت!

در صورتی که دستگاه شما قادر به دریافت برچسب زمانی سمت کلاینت باشد، می‌توانید از فرمت زیر استفاده کنید:

				
					{"ts":1451649600512, "values":{"key1":"value1", "key2":"value2"}}
				
			

جایی که 1451649600512 یک برچسب زمانی یونیکس با دقت میلی‌ثانیه است. به‌عنوان مثال، مقدار 1451649600512 معادل با Fri, 01 Jan 2016 12:00:00.512 GMT می‌باشد.

در زیر نمونه‌هایی از دستورات برای ارسال انواع مختلف داده‌های تله‌متری آورده شده است.

فراموش نکنید که demo.thingsboard.io را با هاست خود و $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید. در این مثال، نام هاست به سرور دمو زنده اشاره دارد.

مثال 1: ارسال داده به‌عنوان یک شیء بدون برچسب زمانی (برچسب زمانی سمت سرور استفاده خواهد شد).

دستور زیر را اجرا کنید:

Mosquitto

				
					mosquitto_pub -d -q 1 -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u "$ACCESS_TOKEN" -m "{"temperature":42}"
				
			

MQTT.js

				
					mqtt pub -v -q 1 -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u '$ACCESS_TOKEN' -m "{"temperature":42}"
				
			

داده‌های تله‌متری:

				
					{"temperature":42}
				
			

مثال 2: ارسال داده به‌عنوان یک شیء بدون برچسب زمانی (برچسب زمانی سمت سرور استفاده خواهد شد) با استفاده از داده‌های موجود در فایل telemetry-data-as-object.json.

دستور زیر را اجرا کنید:

Mosquitto

				
					mosquitto_pub -d -q 1 -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u "$ACCESS_TOKEN" -f "telemetry-data-as-object.json"
				
			

MQTT.js

				
					cat telemetry-data-as-object.json | mqtt pub -v -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u '$ACCESS_TOKEN' -s -m ""
				
			

محتوای فایل JSON:

				
					{
  "stringKey": "value1",
  "booleanKey": true,
  "doubleKey": 42.0,
  "longKey": 73,
  "jsonKey": {
    "someNumber": 42,
    "someArray": [1,2,3],
    "someNestedObject": {"key": "value"}
  }
}
				
			

مثال 3: ارسال داده به‌صورت آرایه‌ای از اشیاء بدون برچسب زمانی (برچسب زمانی سمت سرور استفاده خواهد شد) با استفاده از داده‌های موجود در فایل telemetry-data-as-array.json.

دستور زیر را اجرا کنید:

Mosquitto

				
					mosquitto_pub -d -q 1 -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u "$ACCESS_TOKEN" -f "telemetry-data-as-array.json"
				
			

MQTT.js

				
					cat telemetry-data-as-array.json | mqtt pub -v -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u '$ACCESS_TOKEN' -s -m ""
				
			

محتوای فایل JSON:

				
					[{"key1":"value1"}, {"key2":true}]
				
			

مثال 4: ارسال داده به‌عنوان یک شیء همراه با برچسب زمانی (از برچسب زمانی تله‌متری استفاده خواهد شد) با استفاده از داده‌های موجود در فایل telemetry-data-with-ts.json.

دستور زیر را اجرا کنید:

Mosquitto

				
					mosquitto_pub -d -q 1 -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u "$ACCESS_TOKEN" -f "telemetry-data-with-ts.json"
				
			

MQTT.js

				
					cat telemetry-data-with-ts.json | mqtt pub -v -h "demo.thingsboard.io" -t "v1/devices/me/telemetry" -u '$ACCESS_TOKEN' -s -m ""
				
			

محتوای فایل JSON:

				
					{
  "ts": 1451649600512,
  "values": {
    "stringKey": "value1",
    "booleanKey": true,
    "doubleKey": 42.0,
    "longKey": 73,
    "jsonKey": {
      "someNumber": 42,
      "someArray": [1, 2, 3],
      "someNestedObject": {
        "key": "value"
      }
    }
  }
}

				
			

رابط API ویژگی‌ها

رابط API ویژگی‌های ThingsBoard به دستگاه‌ها این امکان را می‌دهد که:

  • ویژگی‌های سمت کلاینت دستگاه را به سرور ارسال کنند.
  • ویژگی‌های سمت کلاینت و ویژگی‌های مشترک دستگاه را از سرور درخواست کنند.
  • به ویژگی‌های مشترک دستگاه از سرور اشتراک یابند.

به‌روزرسانی ویژگی‌ها را به سرور

برای ارسال ویژگی‌های سمت کلاینت دستگاه به سرور ThingsBoard، پیام PUBLISH را به موضوع زیر ارسال کنید:

				
					v1/devices/me/attributes
				
			

در زیر نمونه‌هایی برای ارسال به‌روزرسانی ویژگی‌های سمت کلاینت دستگاه آورده شده است.

فراموش نکنید که demo.thingsboard.io را با هاست خود و $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید. در این مثال، نام هاست به سرور دمو زنده اشاره دارد.

مثال 1: ارسال به‌روزرسانی ویژگی‌های سمت کلاینت.

داده‌های تله‌متری:

				
					{"attribute1": "value1", "attribute2": true}
				
			

اجرای فرمان:

				
					mosquitto_pub -d -h "demo.thingsboard.io" -t "v1/devices/me/attributes" -u "$ACCESS_TOKEN" -m "{"attribute1": "value1", "attribute2": true}"
				
			

مثال ۲. انتشار به‌روزرسانی ویژگی‌های سمت کلاینت با استفاده از داده‌های موجود در فایل "new-attributes-values.json".

محتوای فایل "new-attributes-values.json":

				
					{
  "attribute1": "value1",
  "attribute2": true,
  "attribute3": 42.0,
  "attribute4": 73,
  "attribute5": {
    "someNumber": 42,
    "someArray": [1,2,3],
    "someNestedObject": {"key": "value"}
  }
}
				
			

اجرای فرمان:

Mosquitto

				
					mosquitto_pub -d -h "demo.thingsboard.io" -t "v1/devices/me/attributes" -u "$ACCESS_TOKEN" -f "new-attributes-values.json"
				
			

MQTT.js

				
					cat new-attributes-values.json | mqtt pub -d -h "demo.thingsboard.io" -t "v1/devices/me/attributes" -u '$ACCESS_TOKEN' -s -m ""
				
			

درخواست مقادیر ویژگی‌ها از سرور

برای درخواست ویژگی‌های سمت کلاینت یا ویژگی‌های مشترک دستگاه از گره سرور ThingsBoard، پیام PUBLISH را به موضوع زیر ارسال کنید:

				
					v1/devices/me/attributes/request/$request_id
				
			

که در آن $request_id شناسه عدد صحیح درخواست شما است. قبل از ارسال پیام PUBLISH با درخواست، کلاینت باید به موضوع زیر مشترک شود:

				
					v1/devices/me/attributes/response/+

				
			

مثال زیر به زبان جاوا اسکریپت و بر اساس کتابخانه mqtt.js نوشته شده است. نمونه‌های خط فرمان خالص در دسترس نیستند، زیرا برای این عملیات، مشترک شدن و انتشار باید در یک جلسه MQTT واحد انجام شوند.

فایل "mqtt-js-attributes-request.js" را روی کامپیوتر خود ذخیره کنید. فراموش نکنید که نام میزبان "demo.thingsboard.io" را با نام میزبان خود جایگزین کنید. در این مثال، نام میزبان به سرور دمو زنده اشاره دارد.

				
					var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://demo.thingsboard.io',{
    username: process.env.TOKEN
})

client.on('connect', function () {
    console.log('connected')
    client.subscribe('v1/devices/me/attributes/response/+')
    client.publish('v1/devices/me/attributes/request/1', '{"clientKeys":"attribute1,attribute2", "sharedKeys":"shared1,shared2"}')
})

client.on('message', function (topic, message) {
    console.log('response.topic: ' + topic)
    console.log('response.body: ' + message.toString())
    client.end()
})
				
			

فرمان را اجرا کنید. فراموش نکنید که $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید.

				
					export TOKEN=$ACCESS_TOKEN
node mqtt-js-attributes-request.js
				
			

نتیجه:

				
					{"client":{"attribute1":"value1","attribute2":true}}

				
			

توجه داشته باشید که اشتراک کلیدهای ویژگی سمت کلاینت و ویژگی‌های مشترک دستگاه، یک روش نامناسب است! با این حال، همچنان می‌توان کلیدهای یکسانی برای ویژگی‌های سمت کلاینت، مشترک و حتی سمت سرور داشت.

اشتراک در به‌روزرسانی ویژگی‌ها از سرور

برای اشتراک در تغییرات ویژگی‌های مشترک دستگاه، پیام SUBSCRIBE را به موضوع زیر ارسال کنید:

				
					v1/devices/me/attributes
				
			

وقتی یکی از مؤلفه‌های سمت سرور (مانند REST API یا زنجیره قوانین) یک ویژگی مشترک را تغییر دهد، کلاینت به‌روزرسانی زیر را دریافت خواهد کرد:

				
					{"key1":"value1"}
				
			

برای مثال زیر، فراموش نکنید که "demo.thingsboard.io" را با نام میزبان خود و $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید. در این مثال، نام میزبان به سرور دمو زنده اشاره دارد.

فرمان را اجرا کنید:

Mosquitto

				
					mosquitto_sub -d -h "demo.thingsboard.io" -t "v1/devices/me/attributes" -u "$ACCESS_TOKEN"
				
			

MQTT.js

				
					mqtt sub -v -h "demo.thingsboard.io" -t "v1/devices/me/attributes" -u '$ACCESS_TOKEN'
				
			

پشتیبانی از مقادیر JSON

ما پشتیبانی از ساختارهای داده JSON را به APIهای تلمتری و ویژگی‌ها اضافه کرده‌ایم تا کار با پیکربندی دستگاه را ساده‌تر کنیم. پشتیبانی از JSON به شما این امکان را می‌دهد که هم از دستگاه داده‌ها را بارگذاری کنید و هم اشیاء تو در تو را به دستگاه ارسال کنید. شما می‌توانید یک پیکربندی JSON را به‌عنوان یک ویژگی مشترک ذخیره کرده و آن را به دستگاه ارسال کنید. همچنین می‌توانید داده‌های JSON را در موتور قوانین پردازش کرده و هشدارها و دیگر عملیات‌ها را ایجاد کنید.

بنابراین، این بهبود تعداد عملیات‌های پایگاه داده را زمانی که ThingsBoard داده‌ها را ذخیره می‌کند، به حداقل می‌رساند. به عنوان مثال، "دما" و "رطوبت" به‌عنوان ردیف‌های جداگانه در پایگاه‌های داده SQL یا NoSQL ذخیره می‌شوند تا این داده‌ها را برای تجسم به‌طور مؤثر تجمیع کنند. از آنجا که نیازی به تجمیع داده‌های JSON نیست، می‌توانیم تمام محتوا را به‌عنوان یک ردیف ذخیره کنیم به جای اینکه برای هر آیتم پیکربندی ردیف‌های جداگانه ذخیره شود. در برخی از محیط‌های ما، با تجمیع چندین پارامتر در یک JSON، می‌توان تعداد عملیات‌های پایگاه داده را بیشتر از ۱۰ برابر کاهش داد.

API RPC

RPC سمت سرور

برای اشتراک در دستورات RPC از سرور، پیام SUBSCRIBE را به موضوع زیر ارسال کنید:

				
					v1/devices/me/rpc/request/+
				
			

پس از اشتراک، کلاینت دستورات فردی را به‌صورت پیام PUBLISH به موضوع مربوطه دریافت خواهد کرد:

				
					v1/devices/me/rpc/request/$request_id
				
			

مثال زیر به زبان جاوا اسکریپت و بر اساس کتابخانه mqtt.js نوشته شده است. نمونه‌های خط فرمان خالص در دسترس نیستند زیرا برای انجام عملیات اشتراک و انتشار باید در یک جلسه MQTT واحد اتفاق بیفتند.

فایل "mqtt-js-rpc-from-server.js" را روی کامپیوتر خود ذخیره کنید. فراموش نکنید که نام میزبان "demo.thingsboard.io" را با نام میزبان خود جایگزین کنید. در این مثال، نام میزبان به سرور دمو زنده اشاره دارد.

				
					var mqtt = require('mqtt');
var client  = mqtt.connect('mqtt://demo.thingsboard.io',{
    username: process.env.TOKEN
});

client.on('connect', function () {
    console.log('connected');
    client.subscribe('v1/devices/me/rpc/request/+')
});

client.on('message', function (topic, message) {
    console.log('request.topic: ' + topic);
    console.log('request.body: ' + message.toString());
    var requestId = topic.slice('v1/devices/me/rpc/request/'.length);
    //client acts as an echo service
    client.publish('v1/devices/me/rpc/response/' + requestId, message);
});
				
			

اکنون مراحل زیر را دنبال کنید:

  • از ویجت ترمینال اشکال‌زدایی RPC در نمونه ThingsBoard خود استفاده کنید.
  • فرمان زیر را برای اشتراک در دستورات RPC از سرور اجرا کنید. فراموش نکنید که $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید.
				
					export TOKEN=$ACCESS_TOKEN
node mqtt-js-rpc-from-server.js
				
			
  • درخواست RPC به نام "connect" را با استفاده از ویجت ترمینال اشکال‌زدایی RPC به دستگاه ارسال کنید؛
  • باید پاسخ از دستگاه دریافت کنید.

در صورتی که دستگاه MQTT شما یک دروازه (Gateway) باشد، ThingsBoard یک RPC سمت سرور (اعلان) در مورد تغییرات موجودیت‌های دستگاه‌های پیکربندی‌شده ارسال خواهد کرد.
دستگاه دروازه MQTT شما یک RPC خدماتی در مورد حذف یا تغییر نام دستگاه دریافت خواهد کرد تا این رویدادها به درستی مدیریت شوند.

RPC در سمت مشتری

برای ارسال دستورات RPC به سرور، پیغام PUBLISH را به موضوع زیر ارسال کنید:

				
					v1/devices/me/rpc/request/$request_id
				
			

جایی که $request_id شناسه عددی درخواست است. پاسخ از سرور به موضوع زیر منتشر خواهد شد:

				
					v1/devices/me/rpc/response/$request_id
				
			

مثال زیر به زبان جاوا اسکریپت نوشته شده است و بر اساس mqtt.js می‌باشد. مثال‌های صرفاً خط فرمان در دسترس نیستند زیرا عملیات subscribe و publish باید در یک جلسه mqtt یکسان انجام شوند.

فایل "mqtt-js-rpc-from-client.js" را بر روی کامپیوتر خود ذخیره کنید. فراموش نکنید که نام میزبان "demo.thingsboard.io" را با میزبان خود جایگزین کنید. در این مثال، نام میزبان به سرور دمو زنده اشاره دارد.

				
					var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://demo.thingsboard.io', {
    username: process.env.TOKEN
});

client.on('connect', function () {
    console.log('connected');
    client.subscribe('v1/devices/me/rpc/response/+');
    var requestId = 1;
    var request = {
        "method": "getCurrentTime",
        "params": {}
    };
    client.publish('v1/devices/me/rpc/request/' + requestId, JSON.stringify(request));
});

client.on('message', function (topic, message) {
    console.log('response.topic: ' + topic);
    console.log('response.body: ' + message.toString());
});
				
			

اکنون مراحل زیر را دنبال کنید:

  • دو نود به زنجیره قوانین اضافه کنید: "اسکریپت" و "پاسخ تماس RPC"؛
  • در نود اسکریپت، تابع زیر را وارد کنید:
				
					return {msg: {time:String(new Date())}, metadata: metadata, msgType: msgType};
				
			
  • درخواست را به سرور ارسال کنید. فراموش نکنید که $ACCESS_TOKEN را با توکن دسترسی دستگاه خود جایگزین کنید.
				
					export TOKEN=$ACCESS_TOKEN
node mqtt-js-rpc-from-client.js
				
			

باید پاسخ از سرور دریافت کنید.

دریافت محدودیت‌های جلسه RPC

روش getSessionLimits RPC برای کمک به تولیدکنندگان دستگاه و توسعه‌دهندگان طراحی شده است تا محدودیت‌هایی که توسط حمل و نقل MQTT استفاده می‌شوند را درک کنند. درک این محدودیت‌ها اطمینان می‌دهد که دستگاه‌ها در محدوده پارامترهای تعریف شده عمل می‌کنند و از بروز مشکلاتی مانند رد شدن پیام‌ها یا قطع ارتباط جلوگیری می‌کند.

یک RPC معمولی برای بازیابی محدودیت‌های جلسه از سرور ThingsBoard به شکل زیر است:

				
					{
  "method": "getSessionLimits",
  "params": {}
}

				
			

پس از پردازش RPC، سرور می‌تواند محدودیت‌های جلسه را با استفاده از فرمت زیر به موضوع پاسخ ارسال کند:

				
					{
  "maxPayloadSize": 65536,
  "maxInflightMessages": 100,
  "rateLimits": {
    "messages": "200:1,6000:60,14000:3600",
    "telemetryMessages": "100:1,3000:60,7000:3600",
    "telemetryDataPoints": "200:1,6000:60,14000:3600"
  }
}
				
			

کجا

maxPayloadSize: حداکثر اندازه مجاز برای بار payload پیام MQTT که به صورت بایت بیان شده است.
maxInflightMessages: حداکثر تعداد پیام‌های MQTT که می‌توانند ارسال شوند ولی هنوز تایید نشده‌اند (در حال پرواز) در هر زمان معین.
rateLimits: یک شی تو در تو که محدودیت‌های نرخ را برای انواع مختلف مشخص می‌کند.
messages: محدودیت کلی نرخ پیام‌ها.
telemetryMessages: حداکثر تعداد پیام‌های تلومتری که می‌توانند ارسال شوند.
telemetryDataPoints: تعداد نقاط داده تلومتری که یک دستگاه می‌تواند ارسال کند.
در زیر تفسیر مقدار محدودیت نرخ "200:1,6000:60,14000:3600" آمده است:

"200:1": 200 پیام می‌توانند در هر ثانیه ارسال شوند.
"6000:60": 6000 پیام می‌توانند در هر 60 ثانیه (1 دقیقه) ارسال شوند.
"14000:3600": 14000 پیام می‌توانند در یک دوره 3600 ثانیه‌ای (1 ساعت) ارسال شوند.
اگر دستگاه یک دروازه (gateway) باشد، پاسخ شامل محدودیت‌های اضافی نرخ برای دستگاه‌هایی است که از طریق دروازه متصل شده‌اند. ساختار پاسخ برای دروازه‌ها به شکل زیر است:

				
					{
  "maxPayloadSize": 65536,
  "maxInflightMessages": 100,
  "rateLimits": {
    "messages": "200:1,6000:60,14000:3600",
    "telemetryMessages": "100:1,3000:60,7000:3600",
    "telemetryDataPoints": "200:1,6000:60,14000:3600"
  },
  "gatewayRateLimits": {
    "messages": "200:1,6000:60,14000:3600",
    "telemetryMessages": "100:1,3000:60,7000:3600",
    "telemetryDataPoints": "200:1,6000:60,14000:3600"
  }
}
				
			

rateLimits: یک شی تو در تو که محدودیت‌های نرخ را برای دروازه مشخص می‌کند.

gatewayRateLimits: یک شی تو در تو که محدودیت‌های نرخ را برای دستگاه‌های متصل به دروازه مشخص می‌کند.

ادعای دستگاه‌ها

لطفاً مقاله مربوطه را برای دریافت اطلاعات بیشتر در مورد ویژگی ادعای دستگاه‌ها مشاهده کنید.

برای شروع فرآیند ادعای دستگاه، پیغام PUBLISH را به موضوع زیر ارسال کنید:

				
					v1/devices/me/claim
				
			

فرمت داده‌های پشتیبانی شده به صورت زیر است:

				
					{"secretKey":"value", "durationMs":60000}
				
			

لطفاً توجه داشته باشید که فیلدهای ذکر شده اختیاری هستند. در صورتی که secretKey مشخص نشود، رشته خالی به عنوان مقدار پیش‌فرض استفاده می‌شود. در صورتی که durationMs مشخص نشود، پارامتر سیستم device.claim.duration استفاده خواهد شد (در فایل /etc/thingsboard/conf/thingsboard.yml).

تخصیص دستگاه

لطفاً مقاله مربوطه را برای دریافت اطلاعات بیشتر در مورد ویژگی تخصیص دستگاه مشاهده کنید.

برای شروع فرآیند تخصیص دستگاه، درخواست تخصیص را به موضوع زیر ارسال کنید:

				
					/provision
				
			

برای تغییر این متن بر روی دکمه ویرایش کلیک کنید. لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است.

				
					{
  "deviceName": "DEVICE_NAME",
  "provisionDeviceKey": "u7piawkboq8v32dmcmpp",
  "provisionDeviceSecret": "jpmwdn8ptlswmf4m29bw"
}
				
			

API فریمور

زمانی که ThingsBoard به‌روزرسانی فریمور دستگاه را از طریق MQTT آغاز می‌کند، ویژگی‌های مشترک fw_title، fw_version، fw_checksum، fw_checksum_algorithm را تنظیم می‌کند. برای دریافت به‌روزرسانی‌های ویژگی‌های مشترک، دستگاه باید به موضوع زیر مشترک شود:

				
					v1/devices/me/attributes/response/+
				
			

کجا

علامت wildcard است.
زمانی که دستگاه MQTT به‌روزرسانی‌هایی برای ویژگی‌های مشترک fw_title و fw_version دریافت می‌کند، باید پیغام PUBLISH را به موضوع زیر ارسال کند:

				
					v2/fw/request/${requestId}/chunk/${chunkIndex} 
				
			

${requestId}: عدد مربوط به شماره به‌روزرسانی‌های فریمور. ${requestId} باید برای هر به‌روزرسانی فریمور متفاوت باشد.
${chunkIndex}: عدد مربوط به اندیس قطعات فریمور. ${chunkID} از 0 شمارش می‌شوند. دستگاه باید اندیس قطعه را برای هر درخواست افزایش دهد تا زمانی که اندازه قطعه دریافتی صفر شود.
و بار MQTT باید اندازه قطعه فریمور به بایت باشد.

برای هر به‌روزرسانی جدید فریمور، شما باید request ID را تغییر دهید و به موضوع زیر مشترک شوید:

				
					v2/fw/response/+/chunk/+
				
			

کجا

علامت wildcard است.

سفارشی‌سازی پروتکل

حمل و نقل MQTT می‌تواند برای استفاده خاص کاملاً سفارشی‌سازی شود با تغییر ماژول مربوطه.

گام‌های بعدی

  • راهنمای شروع به کار: این راهنماها نمای کلی از ویژگی‌های اصلی ThingsBoard ارائه می‌دهند. این راهنماها برای تکمیل در 15-30 دقیقه طراحی شده‌اند.
  • تصویرسازی داده‌ها: این راهنماها دستورالعمل‌هایی برای پیکربندی داشبوردهای پیچیده ThingsBoard ارائه می‌دهند.
  • پردازش داده‌ها و اقدامات: یاد بگیرید چگونه از موتور قوانین ThingsBoard استفاده کنید.
  • تحلیل داده‌های IoT: یاد بگیرید چگونه از موتور قوانین برای انجام وظایف تحلیلی پایه استفاده کنید.
  • نمونه‌های سخت‌افزاری: یاد بگیرید چگونه پلتفرم‌های سخت‌افزاری مختلف را به ThingsBoard متصل کنید.
  • ویژگی‌های پیشرفته: درباره ویژگی‌های پیشرفته ThingsBoard یاد بگیرید.
  • مشارکت و توسعه: درباره مشارکت و توسعه در ThingsBoard یاد بگیرید.

عناوین هر بخش