# 编解码插件
#### 什么是编解码插件
编解码插件是供物联网平台调用，可以完成二进制格式与JSON格式相互转换、也可以完成JSON格式之间的转换。MQTT协议的设备建议使用JS插件、FunctionGraph、LwM2M协议的设备建议使用图形化插件、离线开发插件。
以NB-IoT场景为例，NB-IoT设备和物联网平台之间采用CoAP协议通讯，CoAP消息的payload为应用层数据，应用层数据的格式由设备自行定义。由于NB-IoT设备一般对省电要求较高，所以应用层数据一般不采用流行的JSON格式，而是采用二进制格式。但是，物联网平台与应用侧使用JSON格式进行通信。因此，您需要开发编码插件，供物联网平台调用，以完成二进制格式和JSON格式的转换。
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0269254148.png "点击放大")
#### 数据上报流程
图1数据上报流程图   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001479438497.png "点击放大")
在数据上报流程中，有两处需要用到编解码插件：
- 将设备上报的二进制码流解码成JSON格式的数据，发送给应用服务器。
- 将应用服务器响应的JSON格式数据编码成二进制码流，下发给设备。
 
#### 命令下发流程
图2命令下发流程图   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001429202148.png "点击放大")
在命令下发[FunctionGraph开发](https://support.huaweicloud.com/devg-iothub/iot_02_0010.html)流程中，有两处需要用到编解码插件：
- 将应用服务器下发的JSON格式数据编码成二进制码流，下发给设备。
- 将设备响应的二进制码流解码成JSON格式的数据，上报给应用服务器。
 
#### 编解码插件开发方法
物联网平台提供了多种开发编解码插件的方法，您可以根据自己需求，选择对应的方法开发编解码插件。由于离线开发编解码插件的方法较为复杂，且耗时比较长，我们**推荐** 使用**图形化开发编解码插件** 和**脚本化开发**。
- **图形化开发** ：是指在设备接入控制台，通过可视化的方式快速开发一款产品的编解码插件。详细请参考[图形化开发插件](https://support.huaweicloud.com/devg-iothub/iot_02_0008.html)。
- **脚本化开发** ：是指使用JavaScript脚本实现编解码的功能。详细请参考[脚本化开发](https://support.huaweicloud.com/devg-iothub/iot_02_0009.html)。
- **FunctionGraph开发** ：是指通过FunctionGraph来实现编解码的功能。详细请参考[FunctionGraph开发](https://support.huaweicloud.com/devg-iothub/iot_02_0010.html)。
 
