bekmansurov / gree-hvac-protocol

Description of data exchange protocol for GREE air conditioners via UART based on reverse engineering
19 stars 2 forks source link

Daikin FTKS18VL216A Packet Length 0x30 #3

Open GabyPCgeeK opened 1 year ago

GabyPCgeeK commented 1 year ago

It is a Daikin branded "Gree" AC. Example Received packet. 7E 7E 30 31 00 00 40 00 93 C0 02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 00 00 00 3B

Struct with some of the protocol figured out.

  struct {
    uint16_t header                 ;  //7E 7E  #header bytes

    uint8_t data_length             ;  //30     #packet length

    uint8_t packet_type             ;  //31     #packet type?

    uint8_t unk1[2]                 ;  //00 00

    uint8_t const1                  ;  //40     #always constant?

    uint8_t unk2                    ;  //00

    uint8_t fan_speed             :2;  //93     #fan speed 0-3
    uint8_t                       :1;
    uint8_t sleep                 :1;  //       #is sleep set
    uint8_t mode                  :3;  //       #ac mode 0,1,2,3,4
    uint8_t power_state           :1;  //       #ac on/off

    uint8_t timer_has_half_hour   :1;  //C0     #if timer shows .5 hour
    uint8_t timer_tens_hours      :2;  //       #the tens part of the timer time ex. 21 hours then value is 2
    uint8_t timer_enabled         :1;  //       #if timer is enabled
    uint8_t set_temp              :4;  //       #the temperature the ac is set to (add 16 for degrees C)

    uint8_t turbo                 :1;  //02     #is turbo set
    uint8_t display_light         :1;  //       #is the ac lights (temperature, mode, etc) on/off
    uint8_t                       :1;
    uint8_t xfan                  :1;  //       #is xfan set
    uint8_t                       :4;

    uint8_t const2                :7;  //02
    uint8_t using_farenheit       :1;  //       #is the ac using farenheit temperature

    uint8_t swing                   ;  //00     #swing mode

    uint8_t                       :5;  //00
    uint8_t display_internal_temp :1;  //       #show room temp for a few seconds when turning on ac
    uint8_t                       :2;

    uint8_t unk3                    ;  //00

    uint8_t                       :2;  //00
    uint8_t save_energy           :1;  //       #is energy saving set
    uint8_t                       :5;

    uint8_t timer_on_time_l       :8;  //00     #low byte of the timer on time. 0XX
    uint8_t timer_off_time_l      :4;  //0      #low nibble of the timer off time. 00X

    uint8_t timer_on_time_h       :4;  //0      #high nibble of timer on time. X00
    uint8_t timer_off_time_h      :8;  //00     #high nibbles of timer off time. XX0

    uint8_t                       :4;  //00
    uint8_t timer_off             :1;  //       #is timer a off timer
    uint8_t timer_on              :1;  //       #is timer a on timer
    uint8_t                       :2;

    uint8_t unk4[21]                ;  //00 x21

    uint8_t                       :7;  //00
    uint8_t ir_cmd                :1;  //       #did the ac receive a command from ir remote

    uint8_t unk5[4]                 ;

    uint8_t internal_temp           ;  //46     #the room temprature (substract 40 for degrees C)

    uint8_t unk6[3]                 ;

    uint8_t checksum                ;  //D6     #the packet checksum
  };