Servus,
macht jemand was mit Arduino in Apple HomeKit?
Bin neu auf dem Gebiet und such bissl Anhang.
Fügt ihr eure Boards über HomeKit direkt ein oder über Homebridge?
Habe aktuel einen D1 Mini ESP8266 der mein Gargentor über einen Tasterbefehl öffnet und schließt, wenn ich nicht direkt am Tor stehe sehe ich nicht ob es auf oder zu ist. Jetzt möchte ich noch einen Endschalter verbauen der mir sagt ob das Tor auf oder zu ist.
Entweder versuche ich einen Reed Kontakt an meinen vorhanden D1 anzuschließen oder über Homebridge mit einem Homematic Türkontakt.
Ich weiß leider nicht wie ich das Skript schreibe, dass ich einen Eingang auch noch auf mein HomeKit bekomme über ein Board.
Vielleicht hat jemand bisschen Lust mir zu helfen
Danke schonmal
schon mal gegoogelt?
https://www.google.com/search?as_q=arduino+apple+homekit&as_epq=&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=&as_occt=any&as_filetype=&tbs=
liefert zum Beispiel
Das habe ich aktuell auch. Was bietet mir die Verbindung über Homebridge für Vorteile?
HomeSpan funktioniert nur auf ESP32, um native HomeKit-Geräte zu erstellen, während Homebridge Geräte wie den ESP8266 über Plugins integrieren kann, aber einen Zwischenserver benötigt.
Ich habe Homespan auf einem ESP8266 und funktioniert wunderbar. Die Homebridge habe ich auch schon auf einem Raspberry. Bin bloß am überlegen wie ich den Endschalter von der Garage einfacher zu programmieren bekomme, über Homespan oder Homebridge.
IAh, ich wusste nicht, dass HomeSpan mit ESP8266 funktioniert.
Ich lese nun seit fast 2 Stunden und verstehe nur Bahnhof: Ich besitze ein iPhone 6s und möchte gerne ein Relais ansteuern über Kurzbefehle, bzw. erst mal TestLED (GPIO 0) probieren. verschiedene ESP32 habe ich da und Arduino-Kenntnisse. Allerdings kapiere ich nicht, ob ich nun eine Hub/Bridge/AppleTV oder ähnliches zwingend benötige, um das zu realisieren: Laut GitHub - HomeSpan/HomeSpan: HomeKit Library for the Arduino-ESP32 ist das wohl zwingend:
"Apple's HomeKit architecture requires the use of a Home Hub (either a HomePod or Apple TV) for full and proper operation of any HomeKit device, including those based on HomeSpan. Use of HomeSpan without a Home Hub is NOT supported."
Also ist Homespan wohl nicht nutzbar dazu: Gibt es eine Alternative, das ganze OHNE Hub zu realisieren zu können?
Es ist tatsächlich ein Hub erforderlich.
Der Hub spielt die Rolle einer zentralen Brücke zwischen den HomeKit-Geräten und der Home-App auf Apple-Geräten. Er ermöglicht die Verwaltung der Kommunikation, Sicherheit und Synchronisation der Geräte aus der Ferne. Ohne den Home Hub können HomeKit-Geräte nicht autonom funktionieren, da sie einen Verbindungspunkt benötigen, um Interaktionen, Automatisierungen und Sprachbefehle über Siri zu verwalten. Der Home Hub sorgt auch dafür, dass die Geräte immer zugänglich sind, selbst wenn das iPhone nicht in der Nähe ist.
Ja gibt es.
Deinen ESP8266 mit dem häuslichen WLAN verbinden und dann die vom ESP8266 erzeugte Webseite aufrufen.
Diese Webseite kannst du dann von jedem beliebigen WiFi-Fähigen Gerät aus aufrufen auf dem ein ganz normaler Browser läuft.
Hier ist ein Democode dazu das Prinzip zeigt
#include <ESPUI.h>
#include <SafeString.h>
cSF(myLabel_SS, 512);
cSF(multiPurp_SS, 512);
#if defined(ESP32)
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
const char *home_ssid = "deine SSID";
const char *home_password = "dein passwort";
uint16_t statusLabel_ID;
uint16_t switch1_ID;
uint16_t switch2_ID;
byte switch1State;
unsigned long MyTestTimer = 0; // Timer-variables MUST be of type unsigned long
const byte OnBoard_LED = 2; // onboard-LEDESP32 / ESP8266
void defineGUI() {
statusLabel_ID = ESPUI.label("Label-Title", ControlColor::Turquoise, "0");
switch1_ID = ESPUI.addControl(ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, Control::noParent, &switch1CallBack);
switch2_ID = ESPUI.addControl(ControlType::Switcher, "Switch two", "", ControlColor::None, Control::noParent, &switch1CallBack);
}
void switch1CallBack(Control* sender, int value){
switch (value) {
case S_ACTIVE:
Serial.print("Switch 1 Active:");
break;
case S_INACTIVE:
Serial.print("Switch1 Inactive");
break;
}
Serial.print(" ");
Serial.println(sender->id);
}
void switch2CallBack(Control* sender, int value){
switch (value) {
case S_ACTIVE:
Serial.print("Switch 1 Active:");
break;
case S_INACTIVE:
Serial.print("Switch1 Inactive");
break;
}
Serial.print(" ");
Serial.println(sender->id);
}
void ChangeSwitch1Position() {
switch1State = ESPUI.getControl(switch1_ID)->value.toInt();
switch1State = !switch1State;
ESPUI.updateSwitcher(switch1_ID, switch1State);
}
void setLabelText() {
// anzuzeigenden Text zusammensetzen
// erste Textzeile Garagentor:geöffnet / Garagentor:geschlossen
myLabel_SS = "Label";
myLabel_SS += " Zeile 1:";
myLabel_SS += "\n"; // "\n" macht Zeilen-Umbruch => nachfolgender Text landet in Zeile darunter
myLabel_SS += " Zeile 2:";
myLabel_SS += "\n"; // "\n" macht Zeilen-Umbruch => nachfolgender Text landet in Zeile darunter
myLabel_SS += " Zeile 3:";
myLabel_SS += millis();
myLabel_SS += "\n"; // "\n" macht Zeilen-Umbruch => nachfolgender Text landet in Zeile darunter
// Webseite mit dem Inhalt der SafeString-Variable myTuerStatus_SS updaten
ESPUI.updateControlValue(statusLabel_ID, myLabel_SS.c_str() );
}
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
PrintFileNameDateTime();
ESPUI.setVerbosity(Verbosity::VerboseJSON);
PrintFileNameDateTime();
connectToWiFi();
defineGUI();
ESPUI.begin("I am the website created by the ESPUI-Demo");
}
void loop() {
BlinkHeartBeatLED(OnBoard_LED, 500);
if ( TimePeriodIsOver(MyTestTimer, 1000) ) {
setLabelText();
ChangeSwitch1Position();
}
}
void connectToWiFi() {
// try to connect to existing network
WiFi.begin(home_ssid, home_password);
Serial.print("\n\nTry to connect to existing network");
Serial.print(" named #");
Serial.print(home_ssid);
Serial.println("#");
uint8_t timeout = 10;
// Wait for connection, 5s timeout
do {
BlinkHeartBeatLED(OnBoard_LED, 100);
delay(500);
Serial.print(".");
timeout--;
} while (timeout && WiFi.status() != WL_CONNECTED);
// not connected -> create hotspot
if (WiFi.status() != WL_CONNECTED) {
Serial.print("\n\n no connection to SSID #");
Serial.print(home_ssid);
}
Serial.print("IP address: ");
Serial.println(WiFi.getMode() == WIFI_AP ? WiFi.softAPIP() : WiFi.localIP());
Serial.println("type this IP-adress into your browser to connect to the GUI of your ESP");
}
void PrintFileNameDateTime() {
Serial.println( F("Code running comes from file ") );
Serial.println( F(__FILE__) );
Serial.print( F(" compiled ") );
Serial.print( F(__DATE__) );
Serial.print( F(" ") );
Serial.println( F(__TIME__) );
}
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
static unsigned long MyBlinkTimer;
pinMode(IO_Pin, OUTPUT);
if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
}
}
/* Erklärung der Webseiten-Definition
statusLabel_ID = ESPUI.label("Türenstatus", ControlColor::Turquoise, "0");
// statusLabel_ID : number that is used to identfy the GUI-element
// .label : the type of the GUI-element
// "Number of Clicks" : the text that describes the GUI-element
// ControlColor::Turquoise : explains ITSELF
// "0" initial VALUE shown on the element (will be updated on runtime)
*/
Die Webseite sieht dann so aus
Wenn es unbedingt mit apple sein muss, dann musste dich halt doch reinknieen wie man das homekit hub gedöns konfigurieren muss.
Mit Homebridge auf einem Raspberry Pi kann man Geräte in HomeKit integrieren, wenn kein Apple-Hub vorhanden ist.
(Aber Ich liebe meine Apple TVs und HomePods )