sorry für ein neues Thema, die Suche lieferte nur geschlossene Themen.
Ich habe mir mit einem D1 mini und einem Relais einen Lichtschalter gebastelt, mit dem ich den Vorhandenen einfach überbrückt habe.
Das läuft an diesem Schalter auch richtig prima, aber in einem anderen Zimmer kann ich das so nicht machen.
Leider habe ich den Sketch nicht völlig verstanden und weiß nicht, wie ich die Anzeige für an/aus ändern kann. Auch den Teil mit dem zurückgeben des Status ist mir schleierhaft.
Hier der Sketch(quelle: makesmart: ESP8266 D1 Mini als HomeKit Relais ohne Bridge - Tutorial )
#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_SWITCH 15
// 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_SWITCH, on ? HIGH : LOW);
}
void my_homekit_setup() {
pinMode(PIN_SWITCH, OUTPUT);
digitalWrite(PIN_SWITCH, 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());
}
}
Hat jemand nen Tipp, an welcher Stelle ich da suchen muss?
Mich würden auch andere Projekte rund um HomeKit interessieren. Ich habe zwar einen Raspberry, würde auf den aber gern so weit wie möglich verzichten.
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
So ist die aktuelle Schaltung. Beim hinzufügen des Schalters in HomeKit geht der Schalter automatisch auf on und wird in HomeKit als "ein" angezeigt (Pin 15 auf HIGH).
Das ist in dem Fall auch gut so, denn so kann ich das Licht weiterhin mit dem alten Schalter steuern, falls meine Konstruktion mal nicht will.
Im anderen Raum muss ich das Relais nach dem Schalter zwischen die Leitung klemmen.
Damit das weiterhin funktioniert, wenn Siri versagt, möchte ich die Leitung an NC anschließen. In HomeKit soll der Schalter also als "ein" angezeigt werden, wenn das Relais nicht geschalten ist.
Einfach ein Low-Level-Trigger Relais zu verwenden hat irgendwie nicht funktioniert. Und Änderungen im Code hat HomeKit wieder "korrigiert".
Mit dem D1 bin ich als Lösung auch nicht zu 100% glücklich, aber mit einem esp8266-01 Relais kam ich überhaupt nicht zurecht. Falls jemand dazu noch einen Tipp hat -> dankbarer Abnehmer
Im ersten Fall funktioniert es, weil bei Ausfall meiner Schaltung, der Lichtschalter weiterhin funktioniert (Lichtschalter bei Beleuchtung im Normalfall aus und Relais an) Hier soll die Funktion der Lampe ebenfalls gewährleistet sein, wenn das Relais ausfällt (Lichtschalter bei Beleuchtung im Normalfall ein und Relais an).
Daran hab ich auch schon gedacht. Aber eigentlich ist mir das ganze schon zu groß, wie es jetzt ist.
Das Ziel ist also eher, die Programmierung in den Griff zu kriegen, auch um kleinere Bauteile nutzen zu können.
So wie schon @HotSystems das wird mit einem Relais, oder was auch immer, nicht funktionieren. Es wird nur Funktionieren wen dein Schalter zu Impulsgeber wird. Also die ganze Mimik wird niemals in eine normale Unterputzdose passen, als nicht Elektriker bedeutet Plan aufgeben
Kannst Du mir auch sagen, WARUM das nicht geht?
Der Strom, der durch das Relais läuft, hat doch keine Ahnung, ob davor ein Schalter ist, oder nicht?
Vielleicht war das nicht deutlich:
Bei der aktuellen Schaltung (die läuft), kann ich das Licht natürlich nicht mit dem Schalter ausschalten, wenn das Relais an ist (der ist ja überbrückt). Also ist der eigentlich immer aus und ich schalte mit dem Relais.
Bei der neuen Schaltung kann ich das Licht natürlich nicht am Relais anschalten, wenn der Lichtschalter aus ist. Drum soll der immer an sein und ich schalte wieder mit dem Relais.
Wie soll ich es denn sonst anschließen, wenn nicht in Reihe?
Natürlich wäre eine Wechselschaltung cooler, ist aber nicht möglich. Die alten Lichtschalter unterbrechen einen Draht oder schließen den Kontakt.
Ein Elektriker war schon öfter da und entsprechende HomeKit fähige Lichtschalter hatte ich ihm auch gezeigt.
Eine vernünftige Lösung ist hier ohnehin nicht möglich.
Die Leitungen sind uralt und total sinnlos abgesichert, die Wohnung muss also saniert werden.
Bis es soweit ist, nutze ich die Bude eben als Übungsplatz für meine Ideen...
Das man mit elektrischen Bauteilen und entsprechenden Schaltungen ne Menge machen kann, weiß ich. Aber von Elektrotechnik hab ich noch weniger Ahnung, als vom Programmieren
Daher ist mein Ansatz auch eher, den Code zu verstehen.
Was noch auf mich zukommt, wenn die Geräte kleiner werden und nicht nur per USB mit Strom versorgt werden sollen, mag ich mir noch garnicht ausmalen...
Zu a) und c) : wenn sowol Leitung als auch Schalter Aufputz sind, kannst du doch einfach ein Aufputz-Leergehäuse mit Blindabdeckung oberhalb oder unterhalb des Schalters montieren, oder für den Schalter ein Doppel-Aufputz Gehäuse, also eines das 2 Schalter oder einen Schalter und eine Steckdose aufnehmen kann, nehmen, dann hast Du Platz für die Elektronik.
Oder gibt es in Deinem Land keine Doppel-Aufputz Gehäuse? In der Schweiz bekomme ich sowas in fast jedem Baumarkt.
Du bist ein schlauer Fuchs.
Dies ist die Lösung, die ich gefunden habe: (um keine Verwirrung zu stiften: Die Lösung unten ist für den Schalter, der bereits läuft)
und statt dem alten Kippschalter gibt es nen Taster
geregelt wird alles von nem D1 mini
hab mir auch Gehäuse bestellt und wollte das Loch vom Schalter irgendwie abdecken.
Aber
hört sich ja noch besser an
Allerdings muss ich die Stromversorgung für die Schaltung von extern legen.
Wäre natürlich viel cooler, gleich den Strom zu nehmen, der eh schon da ist, aber davon hab ich zu wenig Ahnung und lass lieber die Finger weg
Bei dem Schalter, der neu kommen soll sieht die Situation so aus:
Bei obigem Code hatte ich immer das Problem, dass ich das Gerät jedesmal aus der Home App entfernen und neu anlegen musste, wenn es vom Strom getrennt war
Läuft wie geschmiert, Nachteile hab ich noch nicht festgestellt
Hab aber auch nicht mit Absicht Fehler provoziert
Sind auf deinem "super Relaismodul" ausgefräste Aussparungen zw Spule und Ansteuerung , wen nein, sind die nicht geeignet für 230V, egal was auf dem Relais steht == gilt nur für Relais nicht für Modul