Moin Zusmmen!
Ich würde gerne diverse 5V Geräte bequem über die Apple Home App schalten können.
Bei recherchen bin ich auf das Arduino-Homekit-ESP8266 gestoßen und mit Hilfe dieser Anleitung hab ich es auch problemlos hinbekommen ein Relais in Homekit einzubetten.
Soweit so gut.
Leider hab ich aktuell keine Ahnung, wie ich es hinbekommen kann, dass ich mehr als ein Relais mit einem ESP8266 schalten kann. Das müsste dann ja analog zu einem Doppelschalter oder einer Steckdosenleiste sein. Die gibt es ja auch in Homekit.
Ich hab mit meinen bescheidenen Programmierkenntnissen versucht die Arduino Datei um weitere Switches zu erweitern, allerdings natürlich ohne Erfolg:
#include <Arduino.h>
#include <arduino_homekit_server.h>
#include "wifi_info.h"
#define LOG_D(fmt, ...) printf_P(PSTR(fmt "\n") , ##__VA_ARGS__);
void setup() {
Serial.begin(115200);
wifi_connect();
homekit_storage_reset();
my_homekit_setup();
}
void loop() {
my_homekit_loop();
delay(10);
}
//==============================
// HomeKit setup and loop
//==============================
// Zugriff auf die Definitionen des Accessories in my_accessory.c
extern "C" homekit_server_config_t config;
extern "C" homekit_characteristic_t cha_switch_on;
static uint32_t next_heap_millis = 0;
#define PIN_SWITCH1 15
//#define PIN_SWITCH2 13
//#define PIN_SWITCH3 12
//#define PIN_SWITCH4 14
// Diese Funktion wird aufgerufen, wenn der Schalter in HomeKit betätigt wird
void cha_switch_on_setter(const homekit_value_t value) {
bool on = value.bool_value;
cha_switch_on.value.bool_value = on;
LOG_D("Switch: %s", on ? "ON" : "OFF");
digitalWrite(PIN_SWITCH1, on ? HIGH : LOW);
//digitalWrite(PIN_SWITCH2, on ? HIGH : LOW);
//digitalWrite(PIN_SWITCH3, on ? HIGH : LOW);
//digitalWrite(PIN_SWITCH4, on ? HIGH : LOW);
}
void my_homekit_setup() {
pinMode(PIN_SWITCH1, OUTPUT);
digitalWrite(PIN_SWITCH1, HIGH);
cha_switch_on.setter = cha_switch_on_setter;
arduino_homekit_setup(&config);
/*
pinMode(PIN_SWITCH2, OUTPUT);
digitalWrite(PIN_SWITCH2, HIGH);
cha_switch_on.setter = cha_switch_on_setter;
arduino_homekit_setup(&config);
pinMode(PIN_SWITCH3, OUTPUT);
digitalWrite(PIN_SWITCH3, HIGH);
cha_switch_on.setter = cha_switch_on_setter;
arduino_homekit_setup(&config);
pinMode(PIN_SWITCH4, OUTPUT);
digitalWrite(PIN_SWITCH4, HIGH);
cha_switch_on.setter = cha_switch_on_setter;
arduino_homekit_setup(&config);
*/
// Das hier kann verwendet werden, um den Status an HomeKit zurückzusenden,
// falls ein zusätzlicher pysischer Button o.ä verwendet wird.
// 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) {
// heap-Info alle 30 Sekunden im seriellen Monitor ausgeben
next_heap_millis = t + 30 * 1000;
LOG_D("Free heap: %d, HomeKit clients: %d",
ESP.getFreeHeap(), arduino_homekit_connected_clients_count());
}
}
Alles anzeigen
Hat jemand von euch Erfahrungen in diesem Bereich? Oder kann mir sonst helfen?
Ich hab auch schon ein Issue auf github eröffnet, aber ich hoffe hier gleichgesinnte zu finden, die mir helfen können.