天气服务

更新时间:2024-09-04 02:13:21下载pdf

本文介绍如何使用 MCU 通用协议接入为设备获取天气数据。天气服务是智能设备最重要的功能之一,涂鸦 MCU 标准协议接入可通过 Wi-Fi 模组和 Wi-Fi & 蓝牙双模模组获取到相关的天气数据。

使用场景

模组连接到云端后,MCU 可通过发送指令启用天气获取功能,开启成功后模组会定时将天气数据下发到 MCU。

天气数据的地区是基于配网手机所在的经纬度。

指令列表

天气数据功能涉及多个协议指令:

命令字 命令说明
0x20 打开获取天气数据功能
0x21 下发天气数据
0x34(子命令 0x03) 主动获取天气

打开获取天气数据功能(0x20)

设备完成初始化后,调用该指令开启天气数据功能,模组收到后返回功能开启结果。

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x20
数据长度 2 N((L+K)+(L+K)…)
数据 n
  • L:占用 1 byte,表示 K 的长度
  • K:请求参数名称,支持的参数名称见 附录一
支持预报参数示例:
  • L: 0x0A K: w.humidity
  • L: 0x08 K: w.date.7
不支持预报参数示例:L: 0x06 K: w.pm25
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:请求参数 w.tempw.pm25,数据区内容为:L:0x06 K:w.tempL:0x06 K:w.pm25

55 aa 03 20 00 0e 06 77 2e 74 65 6d 70 06 77 2e 70 6d 32 35 80

  • 支持预报的参数在获取时,需要添加上需要预报的数据天数,最多可支持获取 7 天内的数据。

    示例:

    • w.humidity, w.date.1:获取当天的空气湿度预报数据
    • w.humidity, w.date.7:获取以当天为开始,7 天内的空气湿度预报数据
  • 不支持预报的数据,获取时不可添加上天数内容。

    示例:w.pm2.5

  • 当获取的参数是和时间有关的参数时,需要搭配 t.unix 或者 t.local 使用,表示需要获取的参数数据是按照格林时间还是本地时间。

    示例:

    • L: 0x0b K: w.sunRise
    • L: 0x0b K: w.date.7
    • L: 0x06 K: t.unix
  • 模组返回的日出时间为格林时间。时间格式:年-月-日 时:分

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x20
数据长度 2 0x0002
数据 2
  • Data[0]:
    • 0x00:表示失败,失败具体错误原因见 Data[1] 的错误码说明
    • 0x01:表示成功
  • Data[1]:
    • 0x00:无错误
    • 0x01:错误码,数据格式非法
    • 0x02:错误码,异常错误
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例 55 aa 00 20 00 02 01 00 22

下发天气数据(0x21)

在开启天气数据功能且设备已连接到云端后,模组定时下发天气数据。开启获取天气功能后会立即下发一次,后续以 30 分钟的间隔下发。

模组发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x21
数据长度 2 N((LKTLV)+(LKTLV)+…)
数据 Data
  • 0x00:表示失败
    • 0x01:错误码,表示参数服务没有权限,确认是否购买了该参数服务或是否通过 0x20 命令字打开天气服务功能
  • 0x01:表示成功
  • L:参数名长度
  • K:参数名
  • T0x00 整形,0x01 字符串
  • L:字段名长度
  • V:字段值
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例:w.temp: 15, w.humidity: 23, w.pm25: 27, w.conditionNum: 120 为例。

天气服务 编码 16 进制 返回天气数据 编码 16 进制
w.temp 77 2E 74 65 6D 70 15 00 00 00 0F
w.humidity 77 2E 68 75 6D 69 64 69 74 79 23 00 00 00 17
w.pm25 77 2E 70 6D 32 35 27 00 00 00 1B
w.conditionNum 77 2E 63 6F 6E 64 69 74 69 6F 6E 4E 75 6D 120 31 32 30

55 AA 00 21 00 40 01 06 77 2E 74 65 6D 70 00 04 00 00 00 0F 0A 77 2E 68 75 6D 69 64 69 74 79 00 04 00 00 00 17 06 77 2E 70 6D 32 35 00 04 00 00 00 1B 0E 77 2E 63 6F 6E 64 69 74 69 6F 6E 4E 75 6D 01 03 31 32 30 5B

MCU 返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x21
数据长度 2 0x0000
数据 0
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例55 aa 00 21 00 00 20

主动获取天气数据(0x34+0x03)

在实际应用中,有些产品需求在半个小时主动发送的天气服务基础上,想要拥有主动获取天气服务数据的能力,即用户主动获取天气服务相关数据。

  • 该指令的使用频率不能小于 20 分钟,20 分钟内的多次请求只处理 1 次。
  • 该指令用于确认数据请求,数据下发还是通过 0x21 的下发天气数据的命令。

MCU 发送

字段 长度 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x34
数据长度 2 0x0001
数据 1 0x03(子命令)
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例55 aa 03 34 00 01 03 3a

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x34
数据长度 2 0x0002
数据 1 0x03(子命令)
1 执行结果:
  • 0x00:成功。
  • 0x01:失败
校验和 1 从帧头开始,按字节求和,得出的结果对 256 求余

示例55 aa 00 34 00 02 03 00 38

使用示例

扩展功能示例基于 MCU SDK 应用展开。

开启天气服务功能

打开 WEATHER_ENABLE 宏定义,开启天气服务功能。

#define         WEATHER_ENABLE                  //打开天气功能

然后根据项目需求,配置需要的天气服务类型数目、设置天气预报的天数。

/******************************************************************************
                    是否开启天气功能
如需要请开启该宏,并在 protocol.c 文件内 weather_open_return_handle 与 weather_data_user_handle 两个用户处理函数中实现显示等代码
此两函数内 #err 提示,完成函数后请删除该 #err
开启天气功能,串口数据缓存区的大小要开大一些
******************************************************************************/
//#define         WEATHER_ENABLE                  //打开天气功能
#ifdef          WEATHER_ENABLE
/* 在 protocol.c 文件中 weather_choose 数组中可调整,然后将打开服务的类型数目写到此宏定义 */
#define         WEATHER_CHOOSE_CNT              4   //选择的需要天气服务类型的数目
/* 在打开天气服务时,可以设置此宏定义选择天气预报的天数,1 表示当天天气(不需要预报可设置为 1),最多为 7 天(不可以设置成 0 或大于 7) */
#define         WEATHER_FORECAST_DAYS_NUM       1   //设置天气预报的天数
#endif

打开获取天气数据功能

打开获取天气数据功能函数 mcu_open_weather() 定义在 protocol.c 文件中,作用是 MCU 主动发送打开获取天气数据功能指令,打开天气服务。

应用步骤

  1. MCU 自行调用 mcu_open_weather() 函数,打开获取天气数据功能。

  2. 在串口接收数据处理函数 data_handle() 中,收到模组发来的打开结果后,调用打开天气功能返回用户自处理函数 weather_open_return_handle() 接收判断,并做下一步处理。

    /**
    * @brief mcu 打开天气服务
    * @param Null
    * @return Null
    */
    void mcu_open_weather(void)
    {
        int i = 0;
    char buffer[13] = {0};
        unsigned char weather_len = 0;
        unsigned short send_len = 0;
    
        weather_len = sizeof(weather_choose) / sizeof(weather_choose[0]);
    
        for(i=0;i<weather_len;i++) {
            buffer[0] = sprintf(buffer+1,"w.%s",weather_choose[i]);
            send_len = set_wifi_uart_buffer(send_len, (unsigned char *)buffer, buffer[0]+1);
        }
    
        #error "请根据提示,自行完善打开天气服务代码,完成后请删除该行"
        /*
    //当获取的参数有和时间有关的参数时(例如日出日落),需要搭配 t.unix 或者 t.local 使用,需要获取的参数数据是按照格林时间还是本地时间
        buffer[0] = sprintf(buffer+1,"t.unix"); //格林时间   或使用 buffer[0] = sprintf(buffer+1,"t.local"); //本地时间
    send_len = set_wifi_uart_buffer(send_len, (unsigned char *)buffer, buffer[0]+1);
        */
    
        buffer[0] = sprintf(buffer+1,"w.date.%d",WEATHER_FORECAST_DAYS_NUM);
        send_len = set_wifi_uart_buffer(send_len, (unsigned char *)buffer, buffer[0]+1);
    
        wifi_uart_write_frame(WEATHER_OPEN_CMD, MCU_TX_VER, send_len);
    }
    
    void data_handle(unsigned short offset)
        {
        ......
        case WEATHER_OPEN_CMD:                                  //打开天气服务返回
            weather_open_return_handle(wifi_data_process_buf[offset + DATA_START], wifi_data_process_buf[offset + DATA_START + 1]);
            break;
        ......
    }
    
  3. weather_open_return_handleprotocol.c 中实现,您需实现该函数

    /**
    * @brief 打开天气功能返回用户自处理函数
    * @param[in] {res} 打开天气功能返回结果
    * @ref       0:失败
    * @ref       1:成功
    * @param[in] {err} 错误码
    * @return Null
    * @note   MCU 需要自行实现该功能
    */
    void weather_open_return_handle(unsigned char res, unsigned char err)
    {
        #error "请自行完成打开天气功能返回数据处理代码,完成后请删除该行"
        unsigned char err_num = 0;
    
        if(res == 1) {
            //打开天气返回成功
        }else if(res == 0) {
            //打开天气返回失败
            //获取错误码
            err_num = err;
        }
    }
    
  4. 如果已开启 Wi-Fi 模组自处理模式(WIFI_CONTROL_SELF_MODE 宏),模组在 Wi-Fi 连接成功后会主动打开天气服务功能。相关功能函数在 system.c 中实现。

            case WIFI_STATE_CMD:                         //Wi-Fi 工作状态
                wifi_work_state = wifi_data_process_buf[offset + DATA_START];
                wifi_uart_write_frame(WIFI_STATE_CMD, MCU_TX_VER, 0);
    #ifdef WEATHER_ENABLE
                if(wifi_work_state == WIFI_CONNECTED && isWoSend == 0) { //当 Wi-Fi 连接成功,打开天气数据且仅一次
                    mcu_open_weather();
                    isWoSend = 1;
                }
    #endif
            break;
    
  5. 调试助手示意图如下:

    天气服务

下发天气数据函数

天气数据解析函数 weather_data_raw_handle() 定义在 system.c 文件中,作用是接收模组发来天气数据。

应用步骤

  1. 当模组有天气数据下发时,串口接收数据处理函数 data_handle() 中会收到模组发来的天气数据。

  2. data_handle() 将调用天气数据解析函数 weather_data_raw_handle()

    void data_handle(unsigned short offset)
    {
    ......
        case WEATHER_DATA_CMD:                                  //天气数据下发
                total_len = (wifi_data_process_buf[offset + LENGTH_HIGH] << 8) | wifi_data_process_buf[offset + LENGTH_LOW];
                weather_data_raw_handle((unsigned char *)wifi_data_process_buf + offset + DATA_START, total_len);
            break;
        ......
    }
    
  3. weather_data_raw_handle() 函数在 system.c 中实现,并调用weather_data_user_handle() 函数将对应的天气数据传给用户处理。

    /**
    * @brief 天气数据解析
    * @param[in] {p_data} 接收数据指针
    * @param[in] {data_len} 接收数据长度
    * @return Null
    */
    static void weather_data_raw_handle(const unsigned char p_data[], unsigned short data_len)
    {
        int i = 1;
        int can_len = 0;
        char can[15] = {0};
        char day = 0;
        int type1 = 0;
        unsigned char value_string[100] = {0};
        int val_cnt = 0;
        int val_len = 0;
    
        if(p_data[0] != 1 | | data_len < 1) {
            //接收失败
        }else {
            if(data_len < 4) {
                //数据为空
            }
    
            while (i < data_len) {
                can_len = p_data[i];
    
                my_memset(can, '\0', 15);
                my_memcpy(can, p_data + i + 1, can_len - 2);
    
                day = p_data[i + can_len] - '0';
    
                type1 = p_data[i + 1 + can_len];
                if(type1 != 0 && type1 != 1) {
                    return;
                }
    
                my_memset(value_string, '\0', 100);
                val_cnt = i + 1 + can_len + 1;
                val_len = p_data[val_cnt];
                if (type1 == 0) { //int32
                    weather_data_user_handle(can+2, type1, p_data+val_cnt+1, day);
                }
                else if(type1 == 1) { //string
                    my_memcpy(value_string, p_data + val_cnt + 1, val_len);
                    weather_data_user_handle(can+2, type1, value_string, day);
                }
    
                i += 1 + can_len + 1 + 1 + val_len;
            }
    
            wifi_uart_write_frame(WEATHER_DATA_CMD, 0, 0);
        }
    }
    
  4. 天气数据处理函数 weather_data_user_handle() 为天气数据用户处理,您需实现该函数中的数据处理

    /**
    * @brief 天气数据用户自处理函数
    * @param[in] {name} 参数名
    * @param[in] {type} 参数类型
    * @ref       0:int 型
    * @ref       1:string 型
    * @param[in] {data} 参数值的地址
    * @param[in] {day} 哪一天的天气,0:表示当天,取值范围:0~6
    * @ref       0:今天
    * @ref       1:明天
    * @return Null
    * @note   MCU 需要自行实现该功能
    */
    void weather_data_user_handle(char *name, unsigned char type, const unsigned char *data, char day)
    {
        #error "这里仅给出示例,请自行完善天气数据处理代码,完成后请删除该行"
        int value_int;
        char value_string[50];//由于有的参数内容较多,此处默认为 50。您可以根据定义的参数,可以适当减少该值
    
        my_memset(value_string, '\0', 50);
    
        //首先获取数据类型
        if(type == 0) { //参数是 INT 型
            value_int = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
        }else if(type == 1) {
            my_strcpy(value_string, data);
        }
    
        //注意要根据所选参数类型,获取参数值
        if(my_strcmp(name, "temp") == 0) {
            printf("day:%d temp value is:%d\r\n", day, value_int);          //int 型
        }else if(my_strcmp(name, "humidity") == 0) {
            printf("day:%d humidity value is:%d\r\n", day, value_int);      //int 型
        }else if(my_strcmp(name, "pm25") == 0) {
            printf("day:%d pm25 value is:%d\r\n", day, value_int);          //int 型
        }else if(my_strcmp(name, "condition") == 0) {
            printf("day:%d condition value is:%s\r\n", day, value_string); //string 型
        }
    }
    
  5. 调试助手示意图如下:

    天气服务

主动获取天气函数

主动获取天气函数 request_weather_serve() 定义在 mcu_api.c 文件中,作用是 MCU 发送主动获取天气功能指令,主动请求天气服务数据。

应用步骤

  1. 打开 MODULE_EXPANDING_SERVICE_ENABLE 宏定义,开启模组拓展服务功能。

    #define         MODULE_EXPANDING_SERVICE_ENABLE        //开启模组拓展服务功能
    
  2. MCU 主动调用 request_weather_serve() 函数,发送主动获取天气功能指令请求天气服务数据。

    /**
    * @brief 主动请求天气服务数据
    * @param Null
    * @return Null
    * @note   MCU 需要自行调用该功能
    */
    void request_weather_serve(void)
    {
        unsigned short send_len = 0;
        send_len = set_wifi_uart_byte(send_len, 0x03);
        wifi_uart_write_frame(MODULE_EXTEND_FUN_CMD, MCU_TX_VER, send_len);
    }
    
  3. 串口接收数据处理函数 data_handle() 中,会收到模组发来的回复结果后,并调用模组拓展功能函数 open_module_time_serve_result() 接收判断,并做下一步处理。

    void data_handle(unsigned short offset)
    {
        ......
        #ifdef MODULE_EXPANDING_SERVICE_ENABLE
            case MODULE_EXTEND_FUN_CMD:                             //模组拓展服务
                total_len = (wifi_data_process_buf[offset + LENGTH_HIGH] << 8) | wifi_data_process_buf[offset + LENGTH_LOW];
                open_module_time_serve_result((unsigned char *)(wifi_data_process_buf + offset + DATA_START), total_len);
            break;
        #endif
        ......
        }
    
  4. open_module_time_serve_result() 函数在 protocol.c 中实现,您需实现该函数

    /**
    * @brief 打开模块时间服务通知结果
    * @param[in] {value} 数据缓冲区
    * @param[in] {length} 数据长度
    * @return Null
    * @note   MCU 需要自行实现该功能
    */
    void open_module_time_serve_result(const unsigned char value[], unsigned short length)
    {
        ......
        case 0x03: { //子命令,主动请求天气服务数据
                if(0x02 != length) {
                    //数据长度错误
                    return;
                }
    
                if(value[1] == 0) {
                    //成功
                }else {
                    //失败
                }
            }
            break;
            ......
    }
    
  5. 调试助手示意图如下:

    天气服务

附录

附录一:天气数据参数 ASCII 码

天气数据参数 含义
中国大陆 其他国家或地区 是否支持预报 长度 十六进制
w.temp 大气温度,单位:摄氏度 ℃ 支持 支持 支持 7 天内数据,中国大陆地区不支持 6 77 2e 74 65 6d 70
w.humidity 空气湿度 支持 支持 支持 7 天内数据 10 77 2e 68 75 6d 69 64 69 74 79
w.conditionNum 天气概况数字编码 支持 支持 支持 7 天内数据 14 77 2e 63 6f 6e 64 69 74 69 6f 6e 4e 75 6d
w.pressure 大气气压,单位:毫巴 mbar 支持 支持 支持 7 天内数据,中国大陆地区不支持 10 77 2e 70 72 65 73 73 75 72 65
w.realFeel 体感温度 支持 支持 不支持 7 天内数据 10 77 2e 72 65 61 6c 46 65 65 6c
w.uvi 紫外线指数 支持 支持 支持 7 天内数据 5 77 2e 75 76 69
w.sunrise 日出 支持 支持 支持 7 天内数据 9 77 2e 73 75 6e 72 69 73 65
w.sunset 日落 支持 支持 支持 7 天内数据 8 77 2e 73 75 6e 73 65 74
t.unix 格林时间,搭配日出(w.sunrise)和日落(w.sunset)使用 - - - 6 74 2e 75 6e 69 78
t.local 本地时间,搭配日出(w.sunrise)和日落(w.sunset)使用 - - - 7 74 2e 6c 6f 63 61 6c
w.windSpeed 风速,单位:米/秒(m/s) 支持 支持 支持 7 天内数据 11 77 2e 77 69 6e 64 53 70 65 65 64
w.windDir 风向 支持 支持 支持 7 天内数据 9 77 2e 77 69 6e 64 44 69 72
w.windLevel 风级 仅中国大陆地区支持 不支持 支持 7 天内数据 11 77 2e 77 69 6e 64 4c 65 76 65 6c
w.aqi 空气质量指数,采用美国 EPA 标准:0 ~ 500 支持 支持 仅有当天数据 5 77 2e 61 71 69
w.rank/w.quality 详细 AQI 实况及全国排名 仅中国大陆地区支持 不支持 仅有当天数据 6 77 2e 72 61 6e 6b / 77 2e 71 75 61 6c 69 74 79
w.pm10 可吸入颗粒物 PM10,单位:µg/m³ 支持 支持 仅有当天数据 6 77 2e 70 6d 31 30
w.pm25 细颗粒物 PM2.5,单位:µg/m³ 支持 支持 仅有当天数据 6 77 2e 70 6d 32 35
w.o3 臭氧浓度,单位:µg/m³ 支持 支持 仅有当天数据 4 77 2e 6f 33
w.no2 二氧化氮浓度,单位:µg/m³ 支持 支持 仅有当天数据 5 77 2e 6e 6f 32
w.co 一氧化碳浓度,单位:µg/m³ 支持 支持 仅有当天数据 4 77 2e 63 6f
w.so2 二氧化硫浓度,单位:µg/m³ 支持 支持 仅有当天数据 5 77 2e 73 6f 32
w.thigh 最高温度,单位:摄氏度 ℃ 支持 支持 仅有预报数据 7 77 2e 74 68 69 67 68
w.tlow 最低温度,单位:摄氏度 ℃ 支持 支持 仅有预报数据 6 77 2e 74 6c 6f 77
w.date.n 需要预报的天数,用 n 来表示天数,要求 1 ≤ n ≤ 7 支持 支持 - 8 77 2e 64 61 74 65 2e 6e
w.currdate 实时天气获取 支持 支持 - 10 77 2e 63 75 72 72 64 61 74 65
  • WindDir 风向字段为风向简码。详细编码表请参考 附录五

  • w.conditionNum 表示天气情况编码。详细编码表请参考 附录四

  • 大气气压单位说明:

    1 毫巴(mbar)= 1 百帕斯卡(hPa),即 1mbar = 100pa = 1hpa。

    例如,中国大陆地区的墨迹天气数据单位是百帕斯卡(hPa)。

  • 是否支持预报:携带 w.date.n 字段时,返回预报数据。

  • 是否支持实时:当携带 w.date.n 字段访问时,若需要实时天气数据,请携带 w.currdate 字段。具体实时数据的访问方式,请参考 天气预报服务功能示例

附录二:城市服务参数 ASCII 码对照

标识 描述 类型 长度 十六进制
c.area 区县或城市名称 字符串 6 63 2e 61 72 65 61
c.city 城市名称 字符串 6 63 2e 63 69 74 79
c.province 字符串 10 63 2e 70 72 6f 76 69 6e 63 65

当天气服务访问时返回的数据仅有城市服务字段,且内容为空时,则说明设备无经纬度信息,无法获取天气数据。可打开手机应用的获取定位功能后,重新进行设备配网。

附录三:天气预报服务数值类型

标识 描述 类型 是否支持实时 是否支持预报
w.temp 温度 整数 仅中国大陆地区不支持
w.humidity 湿度 整数
w.conditionNum 天气概况数字编码 字符串
w.pressure 气压 整数 仅中国大陆地区不支持
w.realFeel 温度实感 整数
w.uvi 紫外线指数 整数
w.windDir 风向 字符串
w.windLevel 风等级 整数 仅中国大陆地区支持
w.windSpeed 风速 字符串,数据格式为 1.0;0.5
w.sunrise 日出时间 字符串,数据格式为 2017-04-24 05:24
w.sunset 日落时间 字符串,数据格式为 2017-04-24 18:32
w.aqi 空气质量指数 整数
w.pm25 PM 2.5 整数
w.so2 二氧化硫浓度 整数
w.rank/w.quality 空气评分 字符串,数据格式为 447/609 仅中国大陆地区支持
w.pm10 PM 10 整数
w.o3 臭氧(O3)浓度 整数
w.no2 二氧化氮(NO2)浓度 整数
w.co 一氧化碳(CO)浓度 整数
w.qualityLevel 空气质量评分等级 整形
w.thigh 最高温度 整形
w.tlow 最低温度 整形
  • 天气参数中,字符串格式类型的数据内容为数字时,数字按照四舍五入的规则只保留 一位 小数位。示例:1.0;0.9
  • 是否支持实时:当携带 w.date.n 字段访问时,若需要实时天气数据请携带 w.currdate 字段。具体实时数据的访问方式,请参考 天气预报服务功能示例
  • 是否支持预报:携带 w.date.n 字段时,返回预报数据。

附录四:中文天气 UTF-8 编码

编码表示(ASCII 码) w.conditionNum 十六进制 天气状况
120 31 32 30
101 31 30 31 大雨
102 31 30 32 雷暴
103 31 30 33 沙尘暴
104 31 30 34 小雪
105 31 30 35
106 31 30 36 冻雾
107 31 30 37 暴雨
108 31 30 38 局部阵雨
109 31 30 39 浮尘
110 31 31 30 雷电
111 31 31 31 小阵雨
112 31 31 32
113 31 31 33 雨夹雪
114 31 31 34 尘卷风
115 31 31 35 冰粒
116 31 31 36 强沙尘暴
117 31 31 37 扬沙
118 31 31 38 小到中雨
119 31 31 39 大部晴朗
121 31 32 31
122 31 32 32 阵雨
123 31 32 33 强阵雨
124 31 32 34 大雪
125 31 32 35 特大暴雨
126 31 32 36 暴雪
127 31 32 37 冰雹
128 31 32 38 小到中雪
129 31 32 39 少云
130 31 33 30 小阵雪
131 31 33 31 中雪
132 31 33 32
133 31 33 33 冰针
134 31 33 34 大暴雨
136 31 33 36 雷阵雨伴有冰雹
137 31 33 37 冻雨
138 31 33 38 阵雪
139 31 33 39 小雨
140 31 34 30
141 31 34 31 中雨
142 31 34 32 多云
143 31 34 33 雷阵雨
144 31 34 34 中到大雨
145 31 34 35 大到暴雨
146 31 34 36 晴朗

附录五:风向简码编码表

风向简码(字符串) 十六进制 描述
N 4e
NNE 4e 4e 45 东北偏北
NE 4e 45 东北
ENE 45 4e 45 东北偏东
E 45
ESE 45 53 45 东南偏东
SE 53 45 东南
SSE 53 53 45 东南偏南
S 53
SSW 53 53 57 西南偏南
SW 53 57 西南
WSW 57 53 57 西南偏西
W 57 西
WNW 57 4e 57 西北偏西
NW 4e 57 西北
NNW 4e 4e 57 西北偏北