Protokoll für Fernbedienung mit RFM12 Lösungsansätze

Hallo ich möchte für ein Projekt eine Fernbedienung bauen. Benutzt werden mehrere Arduinos 1x Master ca 8 Nodes. Alle werden mit einem RFM12 Modul ausgestattet. Die Verbindung soll Bidirektional ablaufen. Pro Node werden ca 6 Ausgänge zu schalten sein, Verbraucher sind Zugmagnete.
Die Ausgänge des Node sollen frei Kanälen zugeordnet werden können. Z.B. Ausgang 1 Node 3 = Kanalnummer 15 ,Ausgang 2 Kanalnummer20 usw.

Der Master soll ein Handgerät mit Display werden. welches die Kanäle frei über Tastatur anwählen und schalten kann sowie die Kanäle einzeln abfragen kann ( Spulenwiderstand )ob ein Zugmagnet angeschlossen ist und auf dem Display darstellen.
Jetzt bin ich auf der Suche nach einem Protokoll für die Adressierung der Kanäle. Den Node kann ich ja Feste Adressen zuweisen aber die Ausgänge sind frei
Adressierbar.
hat jemand da eine Idee und Lösungsansätze?

Jetzt reden die Nodes miteinander und ich kann Zeichen über die Serielle Schnittstele empfangen.
RFM12 im Ping-Pong Mode.
Auch eine Auswertung über Switch case funktioniert. Leider ist nur ein Zeichen möglich ich möchte aber eine Zeichenkette als Case zur Auswertung bringen.
Besteht die Möglichkeit einen String als Case zu verwenden?

// Senden und Empfangen von Paketen
// 


#include <RF12.h>
#include <Ports.h>
Port leds (1);
MilliTimer sendTimer;
char payload[] = "Node 1, A1, ";
byte needToSend;
char inputChar = 0;




 static void sendLed (byte on) {
    leds.mode(OUTPUT);
    leds.digiWrite(on);
 }
 static void receiveLed (byte on) {
    leds.mode2(OUTPUT);
    leds.digiWrite2(!on); // invertiert, LED an VCC
 }
 void setup () {
    pinMode (5, OUTPUT);
    Serial.begin(57600);
    Serial.println(57600);
    Serial.println("Send and Receive");
    rf12_initialize(1, RF12_868MHZ, 33); // Node 1, 868Mhz, Gruppe 33
 }
 void loop () {
    if (rf12_recvDone() && rf12_crc == 0) {
        receiveLed(1);
        Serial.print("OK ");
        for (byte i = 0; i < rf12_len; ++i)
            Serial.print(rf12_data[i]);
        Serial.println();
        delay(100); // LED Blinkzeit
        receiveLed(0);
        
 //-------- Anfang Switch Case Test----------------------------
        for (byte i = 0; i < rf12_len; ++i) //RF12 Empfang
        //inputChar=(rf12_data[i]);
       // switch(inputChar) {              //RF12 Empfang
        switch(rf12_data[i]) {


      //--------------------------
         case 'A':    
         digitalWrite(5, HIGH);
         delay(400); // Schaltzeit
         digitalWrite(5, LOW);
         //break;
         //default:

         }
         
 
 //--------- Ende Switch Case Test------------------------------
    }
    if (sendTimer.poll(3000))
        needToSend = 1;

    if (needToSend && rf12_canSend()) {
        needToSend = 0;
        
        sendLed(1);
        rf12_sendStart(0, payload, sizeof payload);
        delay(100); // LED Blinkzeit
        sendLed(0);
    }
}

Beim switch-Statement können leider keine Strings verglichen werden.
Alternative Lösungen:

o if-Statement verwenden
o Die möglichen Strings in einem Array halten und mittels einer kleinen Funktion das Array nach dem String durchsuchen und den Index zurückgeben (-1 falls nicht gefunden) - den Index kannst du dann auch wieder in den case-Zweigen überprüfen

Rudi