幽静书香 发表于 2015-4-20 16:09:50

16进制写数据


开关一般写数据是这样的
Write data: {    cmd = 1;    entity0 =   {      "anion_sw" = 1;    };}那如果是二进制 或者16进制要怎么写呢?麻烦告知一下

Trevor 发表于 2015-4-20 16:42:41

举个例子,如果你定义了一个扩展(二进制)类型的数据点名为binary_dataPoint,且这个数据点的长度是140个字节,待发送的这140个字节内容全为0x00,那么这个140个0x00用Base64编码之后就是AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=,故可以这么写数据:{"entity0":{"binary_dataPoint":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},"cmd":1}

Trevor 发表于 2015-4-20 16:45:38

SDK有提供一个专门用户Base64编解码的类XPGWifiBinary,大家可以调用里面的encode与decode函数完成Base64编解码工作。我这里也提供一个Base64编解码的网址:http://base64.xpcha.com/

Trevor 发表于 2015-4-20 16:48:40

那么读数据的过程就是逆向的,didReceiveData回调内对应的扩展类型数据点返回的Base64编码过的数据,需要调用XPGWifiBinary类的decode方法将Base64编码数据解码后使用。

幽静书香 发表于 2015-4-20 22:55:46

Trevor 发表于 2015-4-20 16:48
那么读数据的过程就是逆向的,didReceiveData回调内对应的扩展类型数据点返回的Base64编码过的数据,需要调 ...

按你说的去转码之后再write没有收到回复,是我写的不对还是硬件有问题呢

我是这样写的Write data: {
    cmd = 1;
    entity0 =   {
      "start_times" = "Azs=";
    };
}

这个开始时间是扩展类型 两位包括小时和分钟

就是没有受到数据是不是写的不成功啊?

幽静书香 发表于 2015-4-21 10:54:19

Trevor 发表于 2015-4-20 16:42
举个例子,如果你定义了一个扩展(二进制)类型的数据点名为binary_dataPoint,且这个数据点的长度是140个 ...

按你说的去转码之后再write没有收到回复,是我写的不对还是硬件有问题呢

我是这样写的Write data: {
    cmd = 1;
    entity0 =   {
      "start_times" = "Azs=";
    };
}

这个开始时间是扩展类型 两位包括小时和分钟

就是没有受到数据是不是写的不成功啊?

幽静书香 发表于 2015-4-21 15:16:28

Trevor 发表于 2015-4-20 16:42
举个例子,如果你定义了一个扩展(二进制)类型的数据点名为binary_dataPoint,且这个数据点的长度是140个 ...

按你说的去转码之后再write没有收到回复,是我写的不对还是硬件有问题呢

我是这样写的Write data: {
    cmd = 1;
    entity0 =   {
      "start_times" = "Azs=";
    };
}

这个开始时间是扩展类型 两位包括小时和分钟

就是没有受到数据是不是写的不成功啊?

Trevor 发表于 2015-4-22 14:53:40

幽静书香 发表于 2015-4-21 15:16
按你说的去转码之后再write没有收到回复,是我写的不对还是硬件有问题呢

我是这样写的Write data: {


我这边用虚拟设备测试,写是可以成功了,虚拟设备上也收到了这个写的数据,但虚拟设备没有主动上报一包一样的数据,在虚拟设备上修改下扩展类型的数值,点击推送,APP可以收到修改过后的扩展类型数据上报。所以我怀疑设备跟虚拟设备的实现一样,扩展类型的数据改变了,没有做变化上报推给服务器或者APP。

你可以自己试一下。

Trevor 发表于 2015-4-22 14:58:38

04-22 14:55:53.663: I/xpgc(30912): 14:55:53 int GWifiDevice::write(char const*): {"entity0":{"open_time":"AQI="},"cmd":1}
04-22 14:55:53.663: I/xpgc(30912): 14:55:53 size_t XPGWifiProtocol::EncodeData(char const*, char const*, byte*, size_t): using model="P0 协议第四版" version="4.000000"
04-22 14:55:53.663: I/xpgc(30912): 14:55:53 Filter entity: id='0' name='entity0' display_name='机智云开发套件'
04-22 14:55:53.673: I/xpgc(30912): 14:55:53 dword XPGWifiProtocol::GetPacketVersion(char const*): using model="P0 协议第四版" version="4.000000"
04-22 14:55:53.673: I/xpgc(30912): writeP0
04-22 14:55:53.673: I/xpgc(30912): 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
04-22 14:55:53.673: I/xpgc(30912): --------------------------------------------------------------------------------
04-22 14:55:53.673: I/xpgc(30912):01   04   00   01   02
04-22 14:55:53.683: W/xpgc(30912): 14:55:53 _recvThread() write
04-22 14:55:53.683: I/xpgc(30912): writePm(), topic = "app2dev/4BeBXtRQg4ZmT6Mf5ybTgN/usruWC_3i}9o,PvaVB-1H]8"
04-22 14:55:53.683: I/xpgc(30912): 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
04-22 14:55:53.683: I/xpgc(30912): --------------------------------------------------------------------------------
04-22 14:55:53.683: I/xpgc(30912):00   00   00   03   08   00   00   90   01   04   00   01   02
04-22 14:56:06.073: I/xpgc(30912): readPm(), tcp raw data
04-22 14:56:06.073: I/xpgc(30912): 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
04-22 14:56:06.073: I/xpgc(30912): --------------------------------------------------------------------------------
04-22 14:56:06.073: I/xpgc(30912): 30=0 2C=,00   1E64=d 65=e 76=v 32=2 61=a 70=p 70=p 2F=/ 34=4 42=B 65=e 42=B
04-22 14:56:06.073: I/xpgc(30912): 58=X 74=t 52=R 51=Q 67=g 34=4 5A=Z 6D=m 54=T 36=6 4D=M 66=f 35=5 79=y 62=b 54=T
04-22 14:56:06.073: I/xpgc(30912): 67=g 4E=N00   00   00   03   07   00   00   91   04   00   01   03
04-22 14:56:06.073: I/xpgc(30912): _handleMqttPacket(), mqtt stripped data
04-22 14:56:06.073: I/xpgc(30912): 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
04-22 14:56:06.073: I/xpgc(30912): --------------------------------------------------------------------------------
04-22 14:56:06.073: I/xpgc(30912):04   00   01   03
04-22 14:56:06.073: W/xpgc(30912): 14:56:06 _recvThread() mqtt callback 48
04-22 14:56:06.073: I/xpgc(30912): 14:56:06 bool GWifiDevicePrivate::OnReceive(XpgPacket*, bool): 4
04-22 14:56:06.073: I/xpgc(30912): recv
04-22 14:56:06.073: I/xpgc(30912): 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
04-22 14:56:06.073: I/xpgc(30912): --------------------------------------------------------------------------------
04-22 14:56:06.073: I/xpgc(30912):04   00   01   03
04-22 14:56:06.073: I/xpgc(30912): 14:56:06 std::string XPGWifiProtocol::DecodeData(char const*, const byte*, size_t): using model="P0 协议第四版" version="4.000000"
04-22 14:56:06.073: I/xpgc(30912): 14:56:06 Filter entity: id='0' name='entity0' display_name='机智云开发套件'
04-22 14:56:06.083: W/xpgc(30912): 14:56:06 alert size 0,fault size 0
04-22 14:56:06.083: I/xpgc(30912): 14:56:06 receive data: {"cmd":4,"entity0":{"Mode":"0","TurnOnOff":false,"open_time":"AQM="},"version":4.0}

上面是自己用虚拟设备测试后发的数据,在APP上发送0102,在虚拟设备上推送0103,得到的日志如上。

幽静书香 发表于 2015-4-22 19:23:21

Trevor 发表于 2015-4-22 14:58
04-22 14:55:53.663: I/xpgc(30912): 14:55:53 int GWifiDevice::write(char const*): {"entity0":{"open_t ...

搞定了,就是按照你说的那么传的,十分感谢啊。。。要是你们文档加上这个就好了:)EFT2

Trevor 发表于 2015-4-23 17:49:40

幽静书香 发表于 2015-4-22 19:23
搞定了,就是按照你说的那么传的,十分感谢啊。。。要是你们文档加上这个就好了EFT2 ...

搞定了就好,文档确实欠缺,实在是太忙了,希望类似的帖子以后可以帮到其他人。
页: [1]
查看完整版本: 16进制写数据