         default:
             // copy data into buffer and indicate reception
             buffer_t *buf = &buffers[node];  // TODO BSI check node in range
+            if (buf->len == 0) {
+                // only indicate when buffer status changes (empty->full)
+                print("!r %02X\n", node);
+            }
             memcpy(&buf->data, rcv, len);
             buf->len = len;
 
-            print("!r %02X\n", node);
             break;
         }
     }

} beacon_t;

static beacon_t beacon;
static buffer_t buffers[9];

static void fill_buffer(uint8_t to, uint8_t flags, uint8_t len, uint8_t *data)
{


// EEPROM address of node id
#define EE_ADDR_ID  0

// number of time division slots
#define NUM_SLOTS   9

static void print(char *fmt, ...)
{
