• RE: ESP8266 D1 Mini Relais als HomeKit Schalter ohne Bridge - Tutorial

    Hallo @cooper und alle anderen,

    Habe da mal eine Frage:
    Kenne mich zwar mit E-Technik aus aber nicht so gut mit der C++. Bin besser in KRL.

    Ist es möglich dieses Skript so umzuschreiben dass es so funktioniert wie in diesem Video?
    TikTok

    Möchte es als Türöffner verwenden
    Habe es schon hinbekommen das es wie ein Taster funktioniert der nach 3s aus geht anstatt ein Schalter den man manuell wieder ausschalten muss.
    Was mir aber daran noch nicht gefällt ist die Bedienung in HomeKit. Ist es möglich es als Tester dazustellen wie in dem Video mit dem Schloss Symbol (und mit FaceID). Würde es gerne ohne Homebridge lösen.

    aktuell habe ich es so:

    // 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");
      
      //-----------------------------------------
      // Schalterbediengung
      //-----------------------------------------
      //digitalWrite(PIN_SWITCH, on ? HIGH : LOW);
    
      //-----------------------------------------
      //Tasterbediegung 3000ms=3s
      //-----------------------------------------
      if(cha_switch_on.value.bool_value == on){
        digitalWrite(PIN_SWITCH, HIGH);
        delay(3000); 
        digitalWrite(PIN_SWITCH, LOW);  
      }else{
        digitalWrite(PIN_SWITCH, HIGH);
        delay(3000); 
        digitalWrite(PIN_SWITCH, LOW);   
      }
    }
    

    Wäre cool wenn ich zu Siri sagen könnte “öffne Haustür” und nicht “schalte Haustür ein”😁


  • Hallo @PascalHaedicke

    Ich würde behaupten, dass es definitiv möglich ist. In der Libary finden sich jedenfalls Hinweise darauf, auch andere Aktoren mit der Libary zu verwenden.

    In der Datei Arduino-HomeKit-ESP8266/src/homekit/characteristics.h findet sich zum Beispiel folgender Abschnitt:

    /**
     Defines that the accessory constains a lock mechanism. This can be combined with Lock Management.
     
     Required Characteristics:
     - LOCK_CURRENT_STATE
     - LOCK_TARGET_STATE
     
     Optional Characteristics:
     - NAME
     */
    #define HOMEKIT_SERVICE_LOCK_MECHANISM HOMEKIT_APPLE_UUID2("45")
    

    Also ich vermute, es ist möglich. Man müsste sich dann aber mit der Libary auseinandersetzen, da die Beispiele bisher auch relativ überschaubar sind:

    Example01_TemperatureSensor
    Example02_Switch
    Example03_StatelessProgrammableSwitch
    Example04_MultipleAccessories
    Example05_WS2812_Neopixel
    

    Vielleicht schaffst du es ja wenn du dich in einer ruhigen Stunde mal damit befasst. 🙂 Ich weiß nicht, ob ich dich dabei unterstützen kann… Aber vielleicht hilft es dir bei deiner Umsetzung.

    Zur Not könntest du bis dahin ja eine Szene erstellen mit dem Namen “Haustür öffnen”, dann passt immerhin der Sprachbefehl.

    Viel Erfolg


  • Hallo,

    also hab mich gestern mal ca. 6h eher mehr hingesetzt und hab versucht den Code zu versehen/zu ändern. Habe mir die 400 Seiten lange PDF von Apple zur HomeKit schnittstelle reingezogen und habe einige Versuche mit der “Arduino-HomeKit-ESP8266/src/homekit/characteristics.h” gehabt.

    Abschließend muss ich sagen: Ich bin kein Stück weiter gekommen. Klar an der ein oder anderen Stelle habe ich schon ein paar Sachen herausfefunden wie und was die machen aber um eine Direkte Änderung vorzunehmen hat es leider nicht gereicht.

    Vieleicht nimmt sich ja jemand die Sache mal an der Selber solche Änderungen machen möchte und teilt mir dann diese dann mit.

    @cooper eine Frage habe ich dann noch an dich. In deinem Video (oben der link) welchen “HOMEKIT_SERVICE” und “HOMEKIT_CHARACTERISTIC_” hast du für dein Türöffner verwendet?


  • €: Hier habe ich ein dazu Tutorial geschrieben.

    Hey @PascalHaedicke

    weder noch, ich hab das ganze mit Homebridge umgesetzt. Da ist es total einfach.

    Aber ich denke ich werde mir die Sache mit der Libary auch mal anschauen nachdem gefühlt 30 Leute gesagt haben, sie würden für eine Anleitung bezahlen. 🤣

    Spaß bei Seite. Gab es denn irgendwas in eine Richtung, was dich weitergebracht hat? Dann könntest du da ja schon mal hier teilen. Wenn ich dazu komme, werde ich mich intensiver mit der Libary auseinandersetzen, da man da ja sogut wie alle was von Apple angeboten wird einbinden kann. Sehr vielversprechend. 💪


  • Hallo @cooper

    wäre super wenn mal jemand mit C Erfahrung drüber schauen könnte. Eine Invention in die Kaffeekasse wäre es mir auch wert 😉

    Was ich schon rausgefunden habe:

    in wifi.info.h
    hier werden einfach nur die WLan Einstellungen vorgenommen. (denk das weiß schon jeder)

    in my_accessory.c
    wird die eigentliche HomeKit Anbindung definiert. Sprich:
    HOMEKIT_SERVICE(SWITCH… beschreibt generell mal um was es sich handelt. In diesem Fall ein Schalter
    und
    HOMEKIT_CHARACTERISTIC_(ON, …beschreibt die zustände die der Schalter haben kann. In diesem Fall EIN/AUS

    Eine Liste der Services und Charakteristiken gibt es auf der Apple Website (eine PDF zum runterladen. Im falle des Switches unter HAP 8.38) oder Link Text

    und die Einstellung des Passwortes

    in Dateiname.ino
    befindet sich die eigentliche Programierung. z.B. wie Sensoren ausgelesen werden oder wie sich Ausgang verhalten sollen.

    dann gibt es noch eine Besonderheit: Bie Programmierungen mit mehreren Sensoren wird ein Bridge angelegt. Dort werden dann sie Sensoren mit IDs vergeben. Die Bridge hat ID1 der erste Sensor/Ausgang ID2 und so weiter.

    für alles weitere fehlt mir leider das KnowHow. Aber wäre auf jeden Fall dabei wenn es ein Gemeinschaftsprojekt in der Community wird.

    Was ich jetzt auf jedenfalls mal gern hätte, wäre eine Anleitung wie man einen Temperaturfühler hinzufügt dafür gibt es schon eine Generelle Vorlage Link Text und einen Contact Sensor ohne Bridge Einbindung Link Text

    Ich denke auch das sich noch viele andere Leute dafür Interessieren weil das einfach eine günstige und noch dazu zuverlässige Lösung ist.

    Vielleicht ist es auch möglich ein Universalprogramm zu schreiben wo man dann einfach nur Auskommentiert.


  • @PascalHaedicke sagte in ESP8266 D1 Mini als Schloss in HomeKit nativ einbinden?:

    Was ich jetzt auf jedenfalls mal gern hätte, wäre eine Anleitung wie man einen Temperaturfühler hinzufügt dafür gibt es schon eine Generelle Vorlage Link Text und einen Contact Sensor ohne Bridge Einbindung Link Text

    Was den Temperaturfühler angeht kannst du den Code in dem Thread verwenden:

    https://my.makesmart.net/topic/74/homekit-thermometer-diy-mit-dem-esp8266-d1-mini-get-request-tutorial?_=1601950804089

    Wenn du ein Shield verwendest vom DS18B20 zB nimm statt Pin D4 einfach Pin D2. Die Libary etc kannst du eigentlich 1:1 übernehmen. 👍

    PS: Wäre schon geil als Community Projekt diverse HK Accessoires. 🤨🤤


  • Danke für die Schnelle Antwort @cooper

    Ich habe mir den Code von der HomeKit Vorlage angeschaut. Zu übertragenden Wert benötige ich nur eine Zahl(sprich die eigentliche Temperatur. Das °C wird vom HomeKit Code (automatisch) hinzugefügt ). Wenn ich den Code Richtig gelesen habe wird hier noch °C hinzugefügt

    void loop(){
    
      sensors.requestTemperatures();
      Serial.print(sensors.getTempCByIndex(0));
      Serial.println(" °C");
      temperature = sensors.getTempCByIndex(0);
      push();
      delay(wait);
    

    Kann ich das

    Serial.println(" °C");
    

    einfach rauslassen um eine normal INT Zahl zu bekommen?

    Und des zweite wäre. Ich würde gerne Jeden Raum mit einen Temp. Sensor ausstatten. Jetzt habe ich gesehen dass es für ein paar Euro mehr eine Temp. Sensor mit Luftfeuchtigkeit gibt. Link Text. Würde sich ja anbieten und in der HomeKit Vorlage könnte man es noch einbauen.

    Habe mich im Web ein wenig umgehen und das gefunden. Link Text
    Dort wird der DHT22 angesprochen mit Luftfeuchtigkeit.

    Meinst du der Code wäre dafür geeignet. Brauch ja nur eine INT Zahl die ich dann an den HomeKit übergebe. Falls ich es hinbekomme die Luftfeuchtigkeint in die HomeKit Vorlage einzubauen.

    Würde jetzt einfach mal den DHT22 und DS18B20 Bestellen um ein wenig zu testen.


  • Hallo zusammen ,

    gibt es vielleicht einen fertigen Code den ich als Anfänger für meinen Türöffner (so wie im Video) verwenden könnte ?

    Grüße

    Alex


  • @alex-0 Kann dir im Moment leider nichts anbieten … Höchstens bei einer Lösung via Homebridge.

    Aber bin gerade wieder mehr oder weniger an dem Thema dran, bzw. eher stöbere ich ein wenig.


    Hier sind die charakteristiken der Accessories der ESP8266 HomeKit-Library aufgeführt.

    https://github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266/blob/master/src/homekit/characteristics.h

    Normal kann man in der offiziellen Dokumentation von Apple nachschauen welche Typen gefodert werden etc, aber ich hab einen Source-Code gefunden, in dem dann auch nochmal die typen stehen.

    https://github.com/apple/HomeKitADK/blob/master/HAP/HAPCharacteristicTypes.h


    Als kleines Beispiel

    in der ESP8266 HomeKit-Library characteristics.h findet man sowas:

    /*
     Defines that the accessory constains a lock mechanism. This can be combined with Lock Management.
     
     Required Characteristics:
     - LOCK_CURRENT_STATE
     - LOCK_TARGET_STATE
     
     Optional Characteristics:
     - NAME
     */
    
    #define HOMEKIT_SERVICE_LOCK_MECHANISM HOMEKIT_APPLE_UUID2("45")
    

    Worüber man (denke ich) an die required Typen kommt mithilfe der HomeKitADK:

    /**
     * Lock Current State.
     *
     * The current state of the physical security mechanism (e.g. deadbolt).
     *
     * - Format: UInt8
     * - Permissions: Paired Read, Notify
     * - Minimum Value: 0
     * - Maximum Value: 3
     * - Step Value: 1
     *
     * @see HomeKit Accessory Protocol Specification R14
     *      Section 9.52 Lock Current State
     */
    /**@{*/
    #define kHAPCharacteristicDebugDescription_LockCurrentState "lock-mechanism.current-state"
    
    extern const HAPUUID kHAPCharacteristicType_LockCurrentState;
    
    HAP_ENUM_BEGIN(uint8_t, HAPCharacteristicValue_LockCurrentState) {
        /** Unsecured. */
        kHAPCharacteristicValue_LockCurrentState_Unsecured = 0,
    
        /** Secured. */
        kHAPCharacteristicValue_LockCurrentState_Secured = 1,
    
        /** Jammed. */
        kHAPCharacteristicValue_LockCurrentState_Jammed = 2,
    
        /** Unknown. */
        kHAPCharacteristicValue_LockCurrentState_Unknown = 3
    } HAP_ENUM_END(uint8_t, HAPCharacteristicValue_LockCurrentState);
    /**@}*/
    
    /**
     * Lock Target State.
     *
     * The target state of the physical security mechanism (e.g. deadbolt).
     *
     * - Format: UInt8
     * - Permissions: Paired Read, Paired Write, Notify
     * - Minimum Value: 0
     * - Maximum Value: 1
     * - Step Value: 1
     *
     * @see HomeKit Accessory Protocol Specification R14
     *      Section 9.56 Lock Target State
     */
    /**@{*/
    #define kHAPCharacteristicDebugDescription_LockTargetState "lock-mechanism.target-state"
    
    extern const HAPUUID kHAPCharacteristicType_LockTargetState;
    
    HAP_ENUM_BEGIN(uint8_t, HAPCharacteristicValue_LockTargetState) { /** Unsecured. */
                                                                      kHAPCharacteristicValue_LockTargetState_Unsecured = 0,
    
                                                                      /** Secured. */
                                                                      kHAPCharacteristicValue_LockTargetState_Secured = 1
    } HAP_ENUM_END(uint8_t, HAPCharacteristicValue_LockTargetState);
    /**@}*/
    

    Ist jetzt natürlich erstmal nur Spekulation … Wollte es mir zuerst lokal notieren, aber dann dachte ich mir, ich teile es gleich. Denke das könnte hinhauen. 🙂


    Nochmal zum Verständnis mit einem bereits vorhandenem Beispiel mit einem Temperaturfühler:

    ESP8266 HomeKit:

    void my_homekit_report() {
    	float temperature_value = random_value(10, 30); // FIXME, read your real sensor here.
    	cha_current_temperature.value.float_value = temperature_value;
    	LOG_D("Current temperature: %.1f", temperature_value);
    	homekit_characteristic_notify(&cha_current_temperature, cha_current_temperature.value);
    }
    

    Woher weiß ich, dass ich die Temperatur als float_value setzen muss? Klar es kann auch 10.5°C haben aber hier der trust:

    HomeKitADK:

    /**
     * Current Temperature.
     *
     * This characteristic describes the current temperature of the environment in Celsius irrespective of display units
     * chosen in `Temperature Display Units`.
     *
     * - Format: Float
     * - Permissions: Paired Read, Notify
     * - Minimum Value: 0
     * - Maximum Value: 100
     * - Step Value: 0.1
     * - Unit: Celsius
     *
     * @see HomeKit Accessory Protocol Specification R14
     *      Section 9.35 Current Temperature
     */
    /**@{*/
    #define kHAPCharacteristicDebugDescription_CurrentTemperature "temperature.current"
    

    Bin dann mal weiter am lesen und stöbern. :heh:

    €: Es hat sich was getan. :programmingparrot:

    ESP8266 Türschloss nativ HomeKit

    Hier ist das Tutorial dazu.


  • @pascalhaedicke Du kannst es mit einem Kurzbefehl lösen. Den nennst du “Haustüre öffnen”. Dann kannst du das so auch Siri sagen 🙂

Ähnliche Themen

  • 4
  • 5
  • 13
  • 3
  • 4