but there is someting wrong with the creation of the byte
But you're not going to tell us what that "someting" is, or why you suspect that there is "someting" wrong.
payload.tally =
for (uint8_t i=1;i<=8;i++) {
bitset(AtemSwitcher.getProgramTally(i),8+i-1)
}
A for loop does not return a value. You can't assign a non-value to payload.tally. You can't set a bit in a function call. bitset shoiuld be bitSet.
Try again.
It seems to me that the first argument to bitSet should be payload.tally, since that is the value that you want to set the bit in.