Show us your zwift setup!

for (own) reference … this works for me:
uint8_t treadmillData[34] = {};
uint16_t flags = 0x0018; // b’000000011000
// 119876543210
// 20
// get speed and incline ble ready
inst_speed = kmph * 100; // kilometer per hour with a resolution of 0.01
inst_incline = incline * 10; // percent with a resolution of 0.1
inst_grade = grade_deg * 10;
inst_elevation_gain = elevation_gain * 10;

// now data is filled starting at bit0 and appended for the
// fields we ‘enable’ via the flags above …
//treadmillData[0,1] → flags
treadmillData[0] = (uint8_t)(flags & 0xFF);
treadmillData[1] = (uint8_t)(flags >> 8);

// speed
treadmillData[2] = (uint8_t)(inst_speed & 0xFF);
treadmillData[3] = (uint8_t)(inst_speed >> 8);

// incline & degree
treadmillData[4] = (uint8_t)(inst_incline & 0xFF);
treadmillData[5] = (uint8_t)(inst_incline >> 8);
treadmillData[6] = (uint8_t)(inst_grade & 0xFF);
treadmillData[7] = (uint8_t)(inst_grade >> 8);

// Positive Elevation Gain 16 Meters with a resolution of 0.1
treadmillData[8] = (uint8_t)(inst_elevation_gain & 0xFF);
treadmillData[9] = (uint8_t)(inst_elevation_gain >> 8);

// flags do enable negative elevation as well but this will be always 0

TreadmillDataCharacteristics.setValue(treadmillData, 34);
TreadmillDataCharacteristics.notify();