You seem not understand how available(&) works.
It does not select messages from targets, it tells you on which pipe the last packet came from.
The pointer argument allows available() to have something like a second return value.
Look that up in the library documentation, I'm tired reading documentation to anyone.
typedef struct
{
float yawTemp = 0, pitchTemp = 0, rollTemp= 0;
float az = 0, ay = 0, ax = 0, rate= 0, ID =0;
}dataPack1;
dataPack1 package1;
typedef struct
{
float yawTemp = 0, pitchTemp = 0, rollTemp= 0;
float az = 0, ay = 0, ax = 0, rate= 0, ID =0;
}dataPack2;
dataPack2 package2;
typedef struct
{
float yawTemp = 0, pitchTemp = 0, rollTemp= 0;
float az = 0, ay = 0, ax = 0, rate= 0, ID =0;
}dataPack4;
dataPack4 package4;
What is that crap for?
Thrice the same structure?
And why typedef them, struct are a type automatically.
Adding a struct member function 'print' or similar would make your code more readable.
Likewise would removing commented code.
Don't comment the obvious, remove outdated wrong comments.