Last Updated on : 2025-02-28 03:03:19download
A cloud project provides the message subscription feature. If the device status in the project changes, such as registration, data reporting, and offline events, Message Service is used to actively push event data to external partners with Pulsar. This helps to implement real-time and persistent messages.
Currently, Tuya Smart Message Service is customized and modified based on open source Pulsar. The Pulsar SDK for Node.js is provided.
In this topic, the Node.js development tool WebStorm is used to receive messages.
Click Pulsar SDK for Node.js to download the package to the local computer and decompress the package.
Use WebStorm to open the source code project: Click Open to find the downloaded and decompressed file in the previous step.
Add dependency environment.
crypto-js: 4.0.0 or later
ws: 7.4.5 or later
Modify the parameters in the example/index.js file. This topic takes the test channel as an example.
const client = new TuyaWebsocket({
accessId: "xt*****ff**n1****8ufo",
accessKey: "479bcb7345******582d9c******4ef7",
url: TuyaWebsocket.URL.CN,
env: TuyaWebsocket.env.TEST, // Test channel
maxRetryTimes: 50,
});
The parameters are described as follows.
accessId
: Enter the value of Access ID in the Authorization Key section.
accessKey
: Enter the value of Access Secret in the Authorization Key section.
url
: Select an option for the area where the API operation is called. For more information about the parameters, see src/config.ts.
TuyaWebsocket.URL.CN
(China): wss://mqe.tuyacn.com:8285/TuyaWebsocket.URL.US
(Western America): wss://mqe.tuyaus.com:8285/TuyaWebsocket.URL.EU
(Central Europe): wss://mqe.tuyaeu.com:8285/TuyaWebsocket.URL.IN
(India): wss://mqe.tuyain.com:8285/env
: message subscription channel.
TuyaWebsocket.env.PROD
represents the formal environment.TuyaWebsocket.env.TEST
represents the test environment.maxRetryTimes
: the maximum number of reconnections.
Note: TEST in
env
represents the test environment and PROD represents the formal environment.
Configure a test device.
In the list of My Cloud Projects, click Open Project in the Operation column.
Click the Message Service tab and enable the message service.
After the subscription status shows Enabled, click the Test Environment tab.
Enter the linked device ID in the search box, click the magnifier icon, and then double-click the selected device.
If a linked device is specified as a test device, the test device will report messages to the test channel for you to debug device features.
On the development tool WebStorm, open the Terminal and run the yarn code.
yarn
yarn example
Execution result:
even@MacBook-Air message-subscription-websocket-master % yarn
yarn install v1.22.11
[1/4] 🔍 Resolving packages...
success Already up-to-date.
$ husky install
husky - not a Git repository, skipping hooks installation
✨ Done in 1.32s.
even@MacBook-Air message-subscription-websocket-master % yarn example
yarn run v1.22.11
$ npm run build && node ./example/index.js
npm WARN lifecycle The node binary used for scripts is /var/folders/jf/_0x1y81n67x979xf09m_cv580000gn/T/yarn--1630917003536-0.5926954827118307/node but npm is using /Users/even/.nvm/versions/node/v14.17.5/bin/node itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.
> message-subscription-websocket@0.0.1 build /Users/even/Documents/SDK/Nodejs/message-subscription-websocket-master
> tsc
open
Control the device with a mobile app.
Automatically get the push messages on WebStorm.
For more information about field descriptions, see Data format description and usage notice.
Received message
INFO 1630917829404 receive msg, jsonMessage={"messageId":"CLe1/w4QACAA","payload":"eyJkYXRhIjoidUdtTE1YempLczJpT242eWJ6WTBIUk9yemlzYlpiVEJBakIxZnVTcHQzcmF3SXEybUcvZlpUZDlUQ2ltcXBHUHpRdGY5d0Zoa1NRNklCRTJQM3lZUGo2Q3JzcUZFUXZMOVBGZUhwRDlaOUthZHpuRndTUVg2c2dSYTJmMkFORkhEVEM4cFowK2ZMbldnZTdBcVBHNExkeG9iT1BDN2tOcGs5MmhtWGpCMFBFT1oyRHU0TWJQNE5TTjQ5UWNKNE1QRTJsU2hlQ01yZWw5QjE3VFQ4QTQwMFRsdjh5MG5sMDRaTXE1YStpbUxDdmpHSDV0YWxscEkxMFJaeG9mSjcyZiIsInByb3RvY29sIjo0LCJwdiI6IjIuMCIsInNpZ24iOiI5ZjRiNTY1YjY4YjA0ODk2ZWZhODE0MDhkOTQxYzY4NyIsInQiOjE2MzA5MTc1NzYwNDh9","properties":{},"publishTime":"2021-09-06T16:39:36.048+08:00","redeliveryCount":0,"key":"vdevo*******286991"}
Parse payload data
the real message data: {
payload: {
data: {
dataId: 'f73709fe-0eed-11ec-8511-024283c73485',
devId: 'vdevo*******286991',
productKey: 'na****z',
status: [Array]
},
protocol: 4,
pv: '2.0',
sign: '9f4b565b68b04896efa81408d941c687',
t: 1630917576048
},
messageId: 'CLe1/w4QACAA',
properties: {},
publishTime: '2021-09-06T16:39:36.048+08:00',
redeliveryCount: 0,
key: 'vdevo*******286991'
}
Note: For more information about the data parsing method, see Data signing. The payload decryption method has been encapsulated in the SDK. For more information, see src/utils.ts.
Received message
INFO 1630917829686 receive msg, jsonMessage={"messageId":"CLe1/w4QAyAA","payload":"eyJkYXRhIjoidEdHZUw4b0NYdXpZdlVnNytUKzlzVmZXUVowQXJuWVM0RlExd2R2a01oTGF3SXEybUcvZlpUZDlUQ2ltcXBHUHpRdGY5d0Zoa1NRNklCRTJQM3lZUGo2Q3JzcUZFUXZMOVBGZUhwRDlaOUthZHpuRndTUVg2c2dSYTJmMkFORkhEVEM4cFowK2ZMbldnZTdBcVBHNExTbFY0VkV2N050WjBUOXdzTTB4c1FlK0dkM2xjRFJqdG9Xa2VIVGFJaHZOUGluNDRBbTI2bTV1V0Z1L2R6a0xUd3hFNTlWdmg5S2tJOUpmTjR3ZTlXUzZycXVOWVJYcTNJN0hZRVBPeGY3OTNpajc5TUZHZUFEMWJLNHo1aWxHeG9vUlRsQjNNdVVFdXdWUmJOWlRJZnZ2YmNjWi9WUjdyOHRhQ3VuQ3QrbGJLVVl3clc1a2ZnZGxQUHlSY25HT013PT0iLCJwcm90b2NvbCI6NCwicHYiOiIyLjAiLCJzaWduIjoiYmEzZGE5NzcyNzBhOTRhOTQ3NmJhNmEzY2RlOWQ0ZTciLCJ0IjoxNjMwOTE3ODI5ODg1fQ==","properties":{},"publishTime":"2021-09-06T16:43:49.885+08:00","redeliveryCount":0,"key":"vdevo*******286991"}
Parse the data
the real message data: {
payload: {
data: {
dataId: '8e8e7a0b-0eee-11ec-8511-024283c73485',
devId: 'vdevo*******286991',
productKey: 'na****jz',
status: [Array]
},
protocol: 4,
pv: '2.0',
sign: 'ba3da977270a94a9476ba6a3cde9d4e7',
t: 1630917829885
},
messageId: 'CLe1/w4QAyAA',
properties: {},
publishTime: '2021-09-06T16:43:49.885+08:00',
redeliveryCount: 0,
key: 'vdevo*******286991'
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback