Hilfe bei Fehlersuche im Sketch

Ich möchte ein 16 Kanal Homekit Relais Switch erstellen.

Ich nutze einen Wemos D1 mini Clone den ich mit mit der HomeKit ESP8266 Bibliothek flashe und zusätzlich verwende ich einen MCP23017 mit der Adafruit MCP23017 Arduino Bibliothek.

Ich hab ebereits die Kanäle au seinem Beispiel im Internet auf 16 erweitert und konnte 16 Kanäle in Homekit einbinden.

Mit einem Beispiel Sketch konnte ich auch alle Relais (High Level SSR) über den MCP23017 ansteuern.

Leider fonktioniert mein Projekt aber nicht. Zum einen Schaltet sich der Schalter 4 immer nach wenigen Sekunden von alleine ab (nur dieser Schalter die anderen bleiben an bis ich sie betätige), zum anderen Schaltet nur das erste Relais und das auch nur wenn ich den Schalter auf "aus" stelle. Die anderen werden garnicht angesprochen. Verkabelung sollte korrekt sein, sonst würde der andere Sketch ja nicht funktionieren aber irgendetwas muss ich flasch machen und ich erkenne es leider nicht....

Wäre Toll wenn jemand drüber gucken könnte. der Skretch besteht aus 3 Datein wobei nur 2 davon relevant sind. Die dritte bezieht sich auf das Wlan

/*
 * switch.ino
 *
 *  Created on: 2020-05-15
 *      Author: Mixiaoxiao (Wang Bin)
 *      
 *  Modified on 2021-05-18
 *      Author: Dynmi (Haris Wang)
 * HAP section 8.38 Switch
 * An accessory contains 4 switches.
 *
 *
  */
#include <Arduino.h>
#include <arduino_homekit_server.h>
#include "wifi_info.h"
#include <Adafruit_MCP23X17.h>

#define LOG_D(fmt, ...) printf_P(PSTR(fmt "\n"), ##__VA_ARGS__);

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);
  wifi_connect();  // in wifi_info.h
  //homekit_storage_reset(); // to remove the previous HomeKit pairing storage when you first run this new HomeKit example
  my_homekit_setup();

  if (!mcp.begin_I2C()) {
    //if (!mcp.begin_SPI(CS_PIN)) {
    Serial.println("Error.");
    while (1)
      ;
  }
}

void loop() {
  my_homekit_loop();
  delay(10);
}

//==============================
// HomeKit setup and loop
//==============================

// access your HomeKit characteristics defined in my_accessory.c
extern "C" homekit_server_config_t config;
extern "C" homekit_characteristic_t cha_switch_on;
extern "C" homekit_characteristic_t cha_switch_on2;
extern "C" homekit_characteristic_t cha_switch_on3;
extern "C" homekit_characteristic_t cha_switch_on4;
extern "C" homekit_characteristic_t cha_switch_on5;
extern "C" homekit_characteristic_t cha_switch_on6;
extern "C" homekit_characteristic_t cha_switch_on7;
extern "C" homekit_characteristic_t cha_switch_on8;
extern "C" homekit_characteristic_t cha_switch_on9;
extern "C" homekit_characteristic_t cha_switch_on10;
extern "C" homekit_characteristic_t cha_switch_on11;
extern "C" homekit_characteristic_t cha_switch_on12;
extern "C" homekit_characteristic_t cha_switch_on13;
extern "C" homekit_characteristic_t cha_switch_on14;
extern "C" homekit_characteristic_t cha_switch_on15;
extern "C" homekit_characteristic_t cha_switch_on16;

static uint32_t next_heap_millis = 0;

#define PIN_SWITCH 0
#define PIN_SWITCH2 1
#define PIN_SWITCH3 2
#define PIN_SWITCH4 3
#define PIN_SWITCH5 4
#define PIN_SWITCH6 5
#define PIN_SWITCH7 6
#define PIN_SWITCH8 7
#define PIN_SWITCH9 8
#define PIN_SWITCH10 9
#define PIN_SWITCH11 10
#define PIN_SWITCH12 11
#define PIN_SWITCH13 12
#define PIN_SWITCH14 13
#define PIN_SWITCH15 14
#define PIN_SWITCH16 15

//Called when the switch value is changed by iOS Home APP
void cha_switch_on_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH, on ? LOW : HIGH);
}
void cha_switch_on_setter2(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on2.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH2, on ? LOW : HIGH);
}
void cha_switch_on_setter3(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on3.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH3, on ? LOW : HIGH);
}
void cha_switch_on_setter4(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on4.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH4, on ? LOW : HIGH);
}
void cha_switch_on_setter5(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on5.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH5, on ? LOW : HIGH);
}
void cha_switch_on_setter6(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on6.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH6, on ? LOW : HIGH);
}
void cha_switch_on_setter7(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on7.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH7, on ? LOW : HIGH);
}
void cha_switch_on_setter8(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on8.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH8, on ? LOW : HIGH);
}
void cha_switch_on_setter9(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on9.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH9, on ? LOW : HIGH);
}
void cha_switch_on_setter10(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on10.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH10, on ? LOW : HIGH);
}
void cha_switch_on_setter11(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on11.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH11, on ? LOW : HIGH);
}
void cha_switch_on_setter12(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on12.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH12, on ? LOW : HIGH);
}
void cha_switch_on_setter13(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on13.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH13, on ? LOW : HIGH);
}
void cha_switch_on_setter14(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on14.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH14, on ? LOW : HIGH);
}
void cha_switch_on_setter15(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on15.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH15, on ? LOW : HIGH);
}
void cha_switch_on_setter16(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on16.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH16, on ? LOW : HIGH);
}

void my_homekit_setup() {
  mcp.pinMode(PIN_SWITCH, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH, HIGH);
  mcp.pinMode(PIN_SWITCH2, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH2, HIGH);
  mcp.pinMode(PIN_SWITCH3, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH3, HIGH);
  mcp.pinMode(PIN_SWITCH4, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH4, HIGH);
  mcp.pinMode(PIN_SWITCH5, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH5, HIGH);
  mcp.pinMode(PIN_SWITCH6, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH6, HIGH);
  mcp.pinMode(PIN_SWITCH7, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH7, HIGH);
  mcp.pinMode(PIN_SWITCH8, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH8, HIGH);
  mcp.pinMode(PIN_SWITCH9, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH9, HIGH);
  mcp.pinMode(PIN_SWITCH10, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH10, HIGH);
  mcp.pinMode(PIN_SWITCH11, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH11, HIGH);
  mcp.pinMode(PIN_SWITCH12, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH12, HIGH);
  mcp.pinMode(PIN_SWITCH13, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH13, HIGH);
  mcp.pinMode(PIN_SWITCH14, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH14, HIGH);
  mcp.pinMode(PIN_SWITCH15, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH15, HIGH);
  mcp.pinMode(PIN_SWITCH16, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH16, HIGH);
  //Add the .setter function to get the switch-event sent from iOS Home APP.
  //The .setter should be added before arduino_homekit_setup.
  //HomeKit sever uses the .setter_ex internally, see homekit_accessories_init function.
  //Maybe this is a legacy design issue in the original esp-homekit library,
  //and I have no reason to modify this "feature".
  cha_switch_on.setter = cha_switch_on_setter;
  cha_switch_on2.setter = cha_switch_on_setter2;
  cha_switch_on3.setter = cha_switch_on_setter3;
  cha_switch_on4.setter = cha_switch_on_setter4;
  cha_switch_on4.setter = cha_switch_on_setter5;
  cha_switch_on4.setter = cha_switch_on_setter6;
  cha_switch_on4.setter = cha_switch_on_setter7;
  cha_switch_on4.setter = cha_switch_on_setter8;
  cha_switch_on4.setter = cha_switch_on_setter9;
  cha_switch_on4.setter = cha_switch_on_setter10;
  cha_switch_on4.setter = cha_switch_on_setter11;
  cha_switch_on4.setter = cha_switch_on_setter12;
  cha_switch_on4.setter = cha_switch_on_setter13;
  cha_switch_on4.setter = cha_switch_on_setter14;
  cha_switch_on4.setter = cha_switch_on_setter15;
  cha_switch_on4.setter = cha_switch_on_setter16;
  arduino_homekit_setup(&config);

  //report the switch value to HomeKit if it is changed (e.g. by a physical button)
  //bool switch_is_on = true/false;
  //cha_switch_on.value.bool_value = switch_is_on;
  //homekit_characteristic_notify(&cha_switch_on, cha_switch_on.value);
}

void my_homekit_loop() {
  arduino_homekit_loop();
  const uint32_t t = millis();
  if (t > next_heap_millis) {
    // show heap info every 5 seconds
    next_heap_millis = t + 5 * 1000;
    LOG_D("Free heap: %d, HomeKit clients: %d",
          ESP.getFreeHeap(), arduino_homekit_connected_clients_count());
  }
}

und die zweite Datei:

/*
 * my_accessory.c
 * Define the accessory in C language using the Macro in characteristics.h
 *
 *  Created on: 2020-05-15
 *      Author: Mixiaoxiao (Wang Bin)
 *      
 *  Modified on 2023-08-12
 *      Author: Name
 */

#include <homekit/homekit.h>
#include <homekit/characteristics.h>

void my_accessory_identify(homekit_value_t _value) {
	printf("accessory identify\n");
}

// Switch (HAP section 8.38)
// required: ON
// optional: NAME

// format: bool; HAP section 9.70; write the .setter function to get the switch-event sent from iOS Home APP.
homekit_characteristic_t cha_switch_on = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on2 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on3 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on4 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on5 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on6 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on7 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on8 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on9 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on10 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on11 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on12 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on13 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on14 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on15 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on16 = HOMEKIT_CHARACTERISTIC_(ON, false);

// format: string; HAP section 9.62; max length 64
homekit_characteristic_t cha_name = HOMEKIT_CHARACTERISTIC_(NAME, "Bewaesserung");

homekit_accessory_t *accessories[] = {
    HOMEKIT_ACCESSORY(.id=1, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 1"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
    HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on,
      &cha_name,
      NULL
    }),
        NULL
    }),

    HOMEKIT_ACCESSORY(.id=2, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 2"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
    HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on2,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=3, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 3"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on3,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=4, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 4"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on4,
      &cha_name,
      NULL
    }),
        NULL
    }),


     HOMEKIT_ACCESSORY(.id=5, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 5"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on5,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=6, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 6"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on6,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=7, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 7"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on7,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=8, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 8"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on8,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=9, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 9"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on9,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=10, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 10"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on10,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=11, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 11"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on11,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=12, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 12"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on12,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=13, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 13"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on13,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=14, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 14"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on14,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=15, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 15"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on15,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=16, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 16"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on16,
      &cha_name,
      NULL
    }),
        NULL
    }),

    NULL
};

homekit_server_config_t config = {
		.accessories = accessories,
		.password = "111-11-111"
};

Vielen Dank im Voraus!

Copy&Paste Fehler?

ja das ist auf jeden fall schon mal sehr dumm von mir und ich habe es auch immer wieder übersehen. ich prüfe mal ob das den Fehler behebt und melde mich. DANKE schon bis hier hin!

Generell sind MagicNumbers und Copy&Paste große Fehlerquellen.

Nutze lieber Arrays, Schleifen und Funktionen um die Dopplungen zu vermeiden.

Leider übersteigt das meine Fähigkeiten, und der Chat-GPT, den ich teilweise zur Hilfe nutze, unterstützt mich ebenfalls nicht ausreichend.

Zuerst habe ich den Copy-Paste-Fehler behoben und konnte dann einen Schritt weitergehen, sodass ich alle Kanäle ansteuern konnte. Allerdings waren die Relais immer noch "verkehrt herum" geschaltet, sodass sie erst geschaltet wurden, wenn die Schalter "aus" waren. Daraufhin habe ich HIGH und LOW im Sketch vertauscht. Zusätzlich habe ich bei mcp.digitalWrite(PIN_SWITCH, LOW); alle von HIGH auf LOW gesetzt, da dies normalerweise der Ausgangszustand sein sollte. Zwischenzeitlich hat es dann mal funktioniert, aber nun schalten die Relais nicht mehr. Die Verkabelung ist weiterhin in Ordnung, da ich gelegentlich Test-Sketches verwende, bei denen die Relais angesteuert werden.

Es wäre großartig, wenn sich noch einmal jemand den Code anschauen könnte. Hier ist der Code:

/*
 * switch.ino
 *
 *  Created on: 2020-05-15
 *      Author: Mixiaoxiao (Wang Bin)
 *      
 *  Modified on 2021-05-18
 *      Author: Dynmi (Haris Wang)
 * HAP section 8.38 Switch
 * An accessory contains 4 switches.
 *
 *
  */
#include <Arduino.h>
#include <arduino_homekit_server.h>
#include "wifi_info.h"
#include <Adafruit_MCP23X17.h>

#define LOG_D(fmt, ...) printf_P(PSTR(fmt "\n"), ##__VA_ARGS__);

#define PIN_SWITCH 0
#define PIN_SWITCH2 1
#define PIN_SWITCH3 2
#define PIN_SWITCH4 3
#define PIN_SWITCH5 4
#define PIN_SWITCH6 5
#define PIN_SWITCH7 6
#define PIN_SWITCH8 7
#define PIN_SWITCH9 8
#define PIN_SWITCH10 9
#define PIN_SWITCH11 10
#define PIN_SWITCH12 11
#define PIN_SWITCH13 12
#define PIN_SWITCH14 13
#define PIN_SWITCH15 14
#define PIN_SWITCH16 15

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);
  wifi_connect();  // in wifi_info.h
  //homekit_storage_reset(); // to remove the previous HomeKit pairing storage when you first run this new HomeKit example
  my_homekit_setup();

  if (!mcp.begin_I2C()) {
    Serial.println("Error.");
    while (1)
      ;
  }
}

void loop() {
  my_homekit_loop();
  delay(10);
}

//==============================
// HomeKit setup and loop
//==============================

// access your HomeKit characteristics defined in my_accessory.c
extern "C" homekit_server_config_t config;
extern "C" homekit_characteristic_t cha_switch_on;
extern "C" homekit_characteristic_t cha_switch_on2;
extern "C" homekit_characteristic_t cha_switch_on3;
extern "C" homekit_characteristic_t cha_switch_on4;
extern "C" homekit_characteristic_t cha_switch_on5;
extern "C" homekit_characteristic_t cha_switch_on6;
extern "C" homekit_characteristic_t cha_switch_on7;
extern "C" homekit_characteristic_t cha_switch_on8;
extern "C" homekit_characteristic_t cha_switch_on9;
extern "C" homekit_characteristic_t cha_switch_on10;
extern "C" homekit_characteristic_t cha_switch_on11;
extern "C" homekit_characteristic_t cha_switch_on12;
extern "C" homekit_characteristic_t cha_switch_on13;
extern "C" homekit_characteristic_t cha_switch_on14;
extern "C" homekit_characteristic_t cha_switch_on15;
extern "C" homekit_characteristic_t cha_switch_on16;

static uint32_t next_heap_millis = 0;



//Called when the switch value is changed by iOS Home APP
void cha_switch_on_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH, on ? HIGH : LOW );
}
void cha_switch_on_setter2(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on2.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH2, on ? HIGH : LOW );
}
void cha_switch_on_setter3(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on3.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH3, on ? HIGH : LOW );
}
void cha_switch_on_setter4(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on4.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH4, on ? HIGH : LOW );
}
void cha_switch_on_setter5(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on5.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH5, on ? HIGH : LOW );
}
void cha_switch_on_setter6(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on6.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH6, on ? HIGH : LOW );
}
void cha_switch_on_setter7(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on7.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH7, on ? HIGH : LOW );
}
void cha_switch_on_setter8(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on8.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH8, on ? HIGH : LOW );
}
void cha_switch_on_setter9(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on9.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH9, on ? HIGH : LOW );
}
void cha_switch_on_setter10(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on10.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH10, on ? HIGH : LOW );
}
void cha_switch_on_setter11(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on11.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH11, on ? HIGH : LOW );
}
void cha_switch_on_setter12(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on12.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH12, on ? HIGH : LOW );
}
void cha_switch_on_setter13(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on13.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH13, on ? HIGH : LOW );
}
void cha_switch_on_setter14(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on14.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH14, on ? HIGH : LOW );
}
void cha_switch_on_setter15(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on15.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH15, on ? HIGH : LOW );
}
void cha_switch_on_setter16(const homekit_value_t value) {
  bool on = value.bool_value;
  cha_switch_on16.value.bool_value = on;  //sync the value
  LOG_D("Switch: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(PIN_SWITCH16, on ? HIGH : LOW );
}

void my_homekit_setup() {
  mcp.pinMode(PIN_SWITCH, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH, LOW);
  mcp.pinMode(PIN_SWITCH2, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH2, LOW);
  mcp.pinMode(PIN_SWITCH3, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH3, LOW);
  mcp.pinMode(PIN_SWITCH4, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH4, LOW);
  mcp.pinMode(PIN_SWITCH5, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH5, LOW);
  mcp.pinMode(PIN_SWITCH6, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH6, LOW);
  mcp.pinMode(PIN_SWITCH7, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH7, LOW);
  mcp.pinMode(PIN_SWITCH8, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH8, LOW);
  mcp.pinMode(PIN_SWITCH9, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH9, LOW);
  mcp.pinMode(PIN_SWITCH10, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH10, LOW);
  mcp.pinMode(PIN_SWITCH11, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH11, LOW);
  mcp.pinMode(PIN_SWITCH12, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH12, LOW);
  mcp.pinMode(PIN_SWITCH13, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH13, LOW);
  mcp.pinMode(PIN_SWITCH14, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH14, LOW);
  mcp.pinMode(PIN_SWITCH15, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH15, LOW);
  mcp.pinMode(PIN_SWITCH16, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH16, LOW);
  //Add the .setter function to get the switch-event sent from iOS Home APP.
  //The .setter should be added before arduino_homekit_setup.
  //HomeKit sever uses the .setter_ex internally, see homekit_accessories_init function.
  //Maybe this is a legacy design issue in the original esp-homekit library,
  //and I have no reason to modify this "feature".
  cha_switch_on.setter = cha_switch_on_setter;
  cha_switch_on2.setter = cha_switch_on_setter2;
  cha_switch_on3.setter = cha_switch_on_setter3;
  cha_switch_on4.setter = cha_switch_on_setter4;
  cha_switch_on5.setter = cha_switch_on_setter5;
  cha_switch_on6.setter = cha_switch_on_setter6;
  cha_switch_on7.setter = cha_switch_on_setter7;
  cha_switch_on8.setter = cha_switch_on_setter8;
  cha_switch_on9.setter = cha_switch_on_setter9;
  cha_switch_on10.setter = cha_switch_on_setter10;
  cha_switch_on11.setter = cha_switch_on_setter11;
  cha_switch_on12.setter = cha_switch_on_setter12;
  cha_switch_on13.setter = cha_switch_on_setter13;
  cha_switch_on14.setter = cha_switch_on_setter14;
  cha_switch_on15.setter = cha_switch_on_setter15;
  cha_switch_on16.setter = cha_switch_on_setter16;
  arduino_homekit_setup(&config);

  //report the switch value to HomeKit if it is changed (e.g. by a physical button)
  //bool switch_is_on = true/false;
  //cha_switch_on.value.bool_value = switch_is_on;
  //homekit_characteristic_notify(&cha_switch_on, cha_switch_on.value);
}

void my_homekit_loop() {
  arduino_homekit_loop();
  const uint32_t t = millis();
  if (t > next_heap_millis) {
    // show heap info every 5 seconds
    next_heap_millis = t + 5 * 1000;
    LOG_D("Free heap: %d, HomeKit clients: %d",
          ESP.getFreeHeap(), arduino_homekit_connected_clients_count());
  }
}

/*
 * my_accessory.c
 * Define the accessory in C language using the Macro in characteristics.h
 *
 *  Created on: 2020-05-15
 *      Author: Mixiaoxiao (Wang Bin)
 *      
 *  Modified on 2023-08-12
 *      Author: Name
 */

#include <homekit/homekit.h>
#include <homekit/characteristics.h>

void my_accessory_identify(homekit_value_t _value) {
	printf("accessory identify\n");
}

// Switch (HAP section 8.38)
// required: ON
// optional: NAME

// format: bool; HAP section 9.70; write the .setter function to get the switch-event sent from iOS Home APP.
homekit_characteristic_t cha_switch_on = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on2 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on3 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on4 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on5 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on6 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on7 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on8 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on9 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on10 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on11 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on12 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on13 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on14 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on15 = HOMEKIT_CHARACTERISTIC_(ON, false);
homekit_characteristic_t cha_switch_on16 = HOMEKIT_CHARACTERISTIC_(ON, false);

// format: string; HAP section 9.62; max length 64
homekit_characteristic_t cha_name = HOMEKIT_CHARACTERISTIC_(NAME, "Bewaesserung");

homekit_accessory_t *accessories[] = {
    HOMEKIT_ACCESSORY(.id=1, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 1"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
    HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on,
      &cha_name,
      NULL
    }),
        NULL
    }),

    HOMEKIT_ACCESSORY(.id=2, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 2"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
    HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on2,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=3, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 3"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on3,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=4, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 4"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on4,
      &cha_name,
      NULL
    }),
        NULL
    }),


     HOMEKIT_ACCESSORY(.id=5, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 5"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on5,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=6, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 6"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on6,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=7, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 7"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on7,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=8, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 8"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on8,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=9, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 9"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on9,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=10, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 10"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on10,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=11, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 11"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on11,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=12, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 12"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on12,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=13, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 13"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on13,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=14, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 14"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on14,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=15, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 15"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on15,
      &cha_name,
      NULL
    }),
        NULL
    }),

     HOMEKIT_ACCESSORY(.id=16, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Kreis 16"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Name"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "20010221"),
            HOMEKIT_CHARACTERISTIC(MODEL, "Bewaesserung"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
   HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
      &cha_switch_on16,
      &cha_name,
      NULL
    }),
        NULL
    }),

    NULL
};

homekit_server_config_t config = {
		.accessories = accessories,
		.password = "111-11-111"
};

Was für Releis sind das link bitte, so manche releis schalten mit LOW.
Chatgpt ist noch nicht asgereift hat probleme sogar eine LEDblinken lassen. Mach dein Sketsch anhand Beispielen danch wird funktionieren. :wink:

Ich bin ja für jeden Spaß zu haben.
Aber ich befürchte, das ist wirklich ernst gemeint.

Das muss doch in ein Array zu packen gehen.
Du wiederholst hier 16 mal ein und den selben Kram.

Den Quatsch machst Du mit dem anderen tab mit cha:switch ..... auch schon.
Das sich da Fehler einschleichen, wundert mich nicht mehr.

@agmue oder @noiasca ihr macht doch auch mit expandern rum. Das muss doch übersichtlicher gehen...
(Die Geschichte rund um homekit mal aussen vor gelassen... - aber die Msg bauen muss doch nicht mit 16 gleichen Funktionen...)

ich sehe da weniger "Expander" als all diese Variablen

NAME, "Kreis 2"),
MANUFACTURER, "Name"),
SERIAL_NUMBER, "20010221"),
MODEL, "Bewaesserung"),
FIRMWARE_REVISION, "1.0"),

in eine Struktur sollten, dann ein Array drumm rum, und dann ein Aufruf mit den Werten aus der Struktur ... du weist was ich meine?

oder auch weiter oben schon:

void my_homekit_setup() {
  mcp.pinMode(PIN_SWITCH, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH, HIGH);
  mcp.pinMode(PIN_SWITCH2, OUTPUT);
  mcp.digitalWrite(PIN_SWITCH2, HIGH);

das sollte auch besser mit einem Array gemacht werden...

1 Like

Ja, darum tut mir das ja so weh :wink:

1 Like

Ja und sicherlich. Leider verstehe ich überhaupt nicht, was da passieren soll. Auch iOS und ESP8266 habe ich nicht. Ich sehe keinen Ansatz für Hilfe durch mich :roll_eyes:

ich bin noch dabei. Das Problem ist, dass ich mir ja tatsächlich schon die entsprechenden Beispiel eraus gesucht habe. Ich habe eine Datei/Beispiel gefunden das ich editiert habe. Hier wurden 4 Kanäle angesprochen die ich auf 16 per Copy Paste arweitert habe. 14 davon brauche ich tatsächlich 2 nehme ich als Reserve. Mein Wemos D1 hat ja nicht so viele Ausgänge also muss ich einen MCP23017 zur erweiterung nutzen. Hier habe ich mir ein Beispiel aus der entsprechenden Bibliothek angesehen und dies auf testweise ebenfalls auf 16 Kanäle aufgebohrt. Das funktioniert auch. Und mit dem anderen Sketch konnte ich auch 16 steuerbare Kanäle in Homekit relisieren aber leider beides nicht anständig verheiraten. Ich bin gerade aber noch auf ein anderes Beispiel gestoßen und werde mir dies noch Mal ansehen. Daraufhin werde ich mich melden.... Vieleicht komme ich so weiter...

Moin!

Inzwischen konnte ich einen anderen Sketch finden den ich besser editieren kann. Scheinbar war der erste bereits unvorteilhaft bzw. falsch konfiguriert (bezüglich der HomeKit Einbindung) was letztendlich zu Meinen Problemen geführt hat. Nun habe ich aber eine andere Frage bzw. ein anderes Problem:

Ich nutze folgende SSR Platine. Die ich mit 5V versorge. Einen Kanal würde ich gerne „Slave“ immer mit schalten wenn die anderen Kanäle genutzt werden also dachte ich mir setzte ich Sperrdioden von Kanal 1-7 zum Kanal 8. wenn ich dies tue schaltet jedoch nur noch 1 Kanal zu Zeit wenn ich das ganze über den Wemos ansteuern lasse. Wenn ich eine direkte Verbindung zwischen 5v und einem trigger Eingang an der Relais Platine herstelle funktioniert es jedoch. Kommt zu wenig Spannung vom MCP23017 an mein Relais Board an? Ich habe den MCP23017 ebenfalls mit 5V Versorgt. Ich habe aber keinen Widerstand zwischen Reset Pin und Pluspol. Könnte das Abhilfe Schaffen und welchen Wert müsste ich da nehmen? Wäre es besser den MCP23017 mit 3,3V von Arduino zu versorgen? Ich wollte eigentlich ungerne den Stepdown Wandler mit so vielen Relais und zugehörigen LEDs belasten


Hast du ein Multimeter: Dann messe einmal.

Warum machst Du das?
Sowas macht man ganz einfach in Logik!

Im loop() eine Funktion eingebaut nach diesem Muster - ist kein funktionsfähiger Code, da Du Deinen nicht gezeigt hast.

setRelaisChannel()
{
 bool isSet=false;
 for(byte b=0; b<7; b++)
 {
  if (digitalRead(ChannelPin[b]==on)
  {
   isSet=true;
  }
 }
 digitalWrite(ChannelPin[8], isSet);
}

hier ist mein Code. Könntest du deinen Code darauf anpassen? Kanal 16 soll der abhängige Kanal sein, der immer geschaltet werden soll sobald mindestens ein anderer der 15 Kanäle geschaltet wird.

Ich danke dir!

#include <Arduino.h>
#include <arduino_homekit_server.h>
#include "wifi_info.h"
#include <Adafruit_MCP23X17.h>

#define LOG_D(fmt, ...)   printf_P(PSTR(fmt "\n") , ##__VA_ARGS__);

Adafruit_MCP23X17 mcp;

void setup() {
  Serial.begin(115200);

  if (!mcp.begin_I2C()) {
  //if (!mcp.begin_SPI(CS_PIN)) {
    Serial.println("Error.");
    while (1);
  }

  wifi_connect(); // in wifi_info.h
  //homekit_storage_reset(); // to remove the previous HomeKit pairing storage when you first run this new HomeKit example
  my_homekit_setup();
}

void loop() {
  my_homekit_loop();
  delay(10);
}

//==============================
// HomeKit setup and loop
//==============================

// access your HomeKit characteristics defined in my_accessory.c
extern "C" homekit_server_config_t config;

extern "C" homekit_characteristic_t kreis1;
extern "C" homekit_characteristic_t kreis2;
extern "C" homekit_characteristic_t kreis3;
extern "C" homekit_characteristic_t kreis4;
extern "C" homekit_characteristic_t kreis5;
extern "C" homekit_characteristic_t kreis6;
extern "C" homekit_characteristic_t kreis7;
extern "C" homekit_characteristic_t kreis8;
extern "C" homekit_characteristic_t kreis9;
extern "C" homekit_characteristic_t kreis10;
extern "C" homekit_characteristic_t kreis11;
extern "C" homekit_characteristic_t kreis12;
extern "C" homekit_characteristic_t kreis13;
extern "C" homekit_characteristic_t kreis14;
extern "C" homekit_characteristic_t kreis15;
extern "C" homekit_characteristic_t kreis16;


static uint32_t next_heap_millis = 0;

//#define PIN_SWITCH 2
#define switch1 0
#define switch2 1
#define switch3 2
#define switch4 3
#define switch5 4
#define switch6 5
#define switch7 6
#define switch8 7
#define switch9 8
#define switch10 9
#define switch11 10
#define switch12 11
#define switch13 12
#define switch14 13
#define switch15 14
#define switch16 15

//Called when the switch value is changed by iOS Home APP
void kreis1_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis1.value.bool_value = on;  //sync the value
  LOG_D("Kreis 1: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch1, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis2_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis2.value.bool_value = on;  //sync the value
  LOG_D("Kreis 2: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch2, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis3_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis3.value.bool_value = on;  //sync the value
  LOG_D("Kreis 3: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch3, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis4_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis4.value.bool_value = on;  //sync the value
  LOG_D("Kreis 4: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch4, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis5_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis5.value.bool_value = on;  //sync the value
  LOG_D("Kreis 5: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch5, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis6_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis6.value.bool_value = on;  //sync the value
  LOG_D("Kreis 6: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch6, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis7_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis7.value.bool_value = on;  //sync the value
  LOG_D("Kreis 7: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch7, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis8_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis8.value.bool_value = on;  //sync the value
  LOG_D("Kreis 8: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch8, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis9_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis9.value.bool_value = on;  //sync the value
  LOG_D("Kreis 9: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch9, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis10_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis10.value.bool_value = on;  //sync the value
  LOG_D("Kreis 10: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch10, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis11_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis11.value.bool_value = on;  //sync the value
  LOG_D("Kreis 11: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch11, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis12_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis12.value.bool_value = on;  //sync the value
  LOG_D("Kreis 12: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch12, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis13_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis13.value.bool_value = on;  //sync the value
  LOG_D("Kreis 13: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch13, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis14_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis14.value.bool_value = on;  //sync the value
  LOG_D("Kreis 14: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch14, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis15_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis15.value.bool_value = on;  //sync the value
  LOG_D("Kreis 15: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch15, on ? HIGH : LOW);
}

//Called when the switch value is changed by iOS Home APP
void kreis16_setter(const homekit_value_t value) {
  bool on = value.bool_value;
  kreis16.value.bool_value = on;  //sync the value
  LOG_D("Kreis 16: %s", on ? "ON" : "OFF");
  mcp.digitalWrite(switch16, on ? HIGH : LOW);
}

void my_homekit_setup() {
  //pinMode(PIN_SWITCH, OUTPUT);
  //digitalWrite(PIN_SWITCH, HIGH);

    
  mcp.pinMode(switch1, OUTPUT);
  mcp.pinMode(switch2, OUTPUT);
  mcp.pinMode(switch3, OUTPUT);
  mcp.pinMode(switch4, OUTPUT);
  mcp.pinMode(switch5, OUTPUT);
  mcp.pinMode(switch6, OUTPUT);
  mcp.pinMode(switch7, OUTPUT);
  mcp.pinMode(switch8, OUTPUT);
  mcp.pinMode(switch9, OUTPUT);
  mcp.pinMode(switch10, OUTPUT);
  mcp.pinMode(switch11, OUTPUT);
  mcp.pinMode(switch12, OUTPUT);
  mcp.pinMode(switch13, OUTPUT);
  mcp.pinMode(switch14, OUTPUT);
  mcp.pinMode(switch15, OUTPUT);
  mcp.pinMode(switch16, OUTPUT);

  kreis1.setter = kreis1_setter;
  kreis2.setter = kreis2_setter;
  kreis3.setter = kreis3_setter;
  kreis4.setter = kreis4_setter;
  kreis5.setter = kreis5_setter;
  kreis6.setter = kreis6_setter;
  kreis7.setter = kreis7_setter;
  kreis8.setter = kreis8_setter;
  kreis9.setter = kreis9_setter;
  kreis10.setter = kreis10_setter;
  kreis11.setter = kreis11_setter;
  kreis12.setter = kreis12_setter;
  kreis13.setter = kreis13_setter;
  kreis14.setter = kreis14_setter;
  kreis15.setter = kreis15_setter;
  kreis16.setter = kreis16_setter;
  
  arduino_homekit_setup(&config);
}

void my_homekit_loop() {
  arduino_homekit_loop();
  const uint32_t t = millis();
  if (t > next_heap_millis) {
    // show heap info every 5 seconds
    next_heap_millis = t + 5 * 1000;
    LOG_D("Free heap: %d, HomeKit clients: %d",
        ESP.getFreeHeap(), arduino_homekit_connected_clients_count());

  }
}

Geschaltet bedeutet an? Oder bedeutet ändert seinen Zustand?

Warum nutzt du keine Arrays?

Ich habe versucht arrays nach Anleitung zu nutzen aber ich habe immer wieder Fehlermeldungen bekommen also musste ich wieder auf copy Paste zurück greifen auch wenn das nicht gut ist…

Der Kanal 16 muss an sein sobald mindestens ein anderer Kanal an ist und aus wenn keiner der anderen Kanäle an ist.

Zur Erklärung: Am Kanal 16 ist ein 24v Netzteil angeschlossen. Die 24v benötige ich um Ventile zu schalten. Ich möchte jedoch nicht dass das 24v Netzteil immer mit Strom versorgt wird ohne das eine Last anliegt. Also soll es nur mit Strom versorgt werden wenn ein Ventil benutzt wird. Die 24v werden dann durch die restlichen 15 Kanäle gesteuert. Soweit der Plan.

Ich muss mich da etwas durchwühlen um es zu verstehen, aber ich schau mal was sich machen lässt.

@berndschroed

bitte verlinke woher du diese Dateien hast:
#include <arduino_homekit_server.h>
#include "wifi_info.h"
#include <homekit/homekit.h>
#include <homekit/characteristics.h>

solltest du Änderungen in der
#include <homekit/characteristics.h>

gemacht haben, poste auch DEINE datei

Das homekitgedöhns ist GitHub - Mixiaoxiao/Arduino-HomeKit-ESP32: [Deprecated] Native Apple HomeKit accessory implementation for the ESP32 Arduino core.
Mir fehlt die wifi_info.h zum kompilieren. :frowning:

Zwischenfarge: Baust Du das jetzt?
Dann las ich das sein - ich hab zwar das array drin und die defins raus, aber ich seh keinen grund das jedesmal doppelt zu bauen.