Nach dem endlich mein Sonoff Touch EU Lichtschalter eingebaut wurde, wollte ich mal etwas probieren.
Raus gekommen ist: zweimal klopfen und es werde Licht 🙂
Hier der Vorgeschmack als Video:
Wie wurde es realisiert?
Folgende Bauteile werden benötigt:
SW-420*
Nodemcu*
5V Netzteil* ( Oder andere 5V Quelle in der nähe )
Jumper-Kabel ( female-female)*
Kleinen Schraubendreher zum Einstellen
Holzschrauben
In meinem Fall habe ich IoBroker mit eingebunden um den Status meines Lichtschalters abzufragen, Script weiter unten!
Folgender Arduino-Code:
Diese Bibliotheken werden benötigt:
ESP8266WiFi.h ( Verbindungen ins Netzwerk )
PubSubClient.h ( MQTT )
Bitte Bibliotheken installieren!
#include <ESP8266WiFi.h> #include <PubSubClient.h> int vibr_Pin =D1; int zaehle = 0; int stat = 1; int interval=4000; unsigned long previousMillis=0; char tmp[100]; char ssid[] = "NETZWERKNAME"; // Deine SSID (name) char pass[] = "PASSWORT"; // Dein WLAN PASSWORT const char* mqtt_server = "192.168.178.62"; //Broker IP Address const char* mqttUser = "iobroker"; //ANMELDENAME IOBROKER const char* mqttPassword = "PASSWORT"; //IOBROKER PASSWORT WiFiClient espClient; PubSubClient client(espClient); void connect_to_MQTT() { client.setServer(mqtt_server, 1886);//MQTT SERVER + PORT client.setCallback(callback); if (client.connect("Esstisch" , mqttUser, mqttPassword)) { Serial.println("Verbinde zum MQTT Server"); client.subscribe("tisch/sensor"); // TROPIC } else { Serial.println("zu MQTT Server nicht verbunden "); } } void setup(){ Serial.begin(9600); //init serial 9600 connect_to_MQTT(); // Verbinden Serial.print("Verbinde zu "); Serial.println(ssid); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); pinMode(vibr_Pin, INPUT); //SENSOR AUF INPUT } void loop(){ unsigned long currentMillis = millis(); client.loop(); if (!client.connected()) { Serial.println("Keine Verbindung zum MQTT Server...."); connect_to_MQTT(); } // Setze Variablen auf 0 wenn 4 Sekunden nichts passiert ist if ((unsigned long)(currentMillis - previousMillis) >= interval){ zaehle = 0; previousMillis = currentMillis; //Serial.println("Zaehle ist nun 0"); // teste } long measurement =TP_init(); delay(10); // Serial.print("measurment = "); if (measurement > 300) { zaehle++; } if(zaehle == 2 ){ //Sende MQTT Tropic zum IoBroker client.publish("tisch/sensor/status",dtostrf(stat, 1, 2, tmp)); // Setze Variable auf 0 zaehle = 0; // Zähle die Variable hoch stat++; delay(4000); // Serial.println("Status gesendet und auf 0 gesetzt"); // teste } //Serial.println(measurement); // Testausgabe } long TP_init(){ delay(10); long measurement=pulseIn (vibr_Pin, HIGH); //wait for the pin to get HIGH and returns measurement return measurement; } void callback(char* topic, byte* payload, unsigned intlength) { Serial.print("Messageved in topic: "); Serial.println(topic); }
Bitte passt das Arduino-Script an!
Jetzt das ganze auf euer NodeMCU Flashen, mittel Arduino-IDE.
Somit wäre der erste Teil geschafft.
Jetzt müssen wir alles zusammen bauen, hier mal ein Bild von meiner Installation.
Hab es bewusst ohne Gehäuse verbaut, so dämpft es nicht die Vibration!
Ich habe mehrere Steckdosen unter meinem Esstisch, so habe ich eine direkte Stromquelle für meinen Controller!
Der Tisch ist selbst gebaut, daher ist es unter dem Tisch ein „wenig wüsst“
Aber von außen nicht ersichtlich!
IoBroker Script:
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="on" id="zp-:.fCRlJq.*if8G7nQ" x="-312" y="-162"> <field name="OID">mqtt.0.tisch.sensor.status</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="!-j~60Az^}6F%K-g:i|["> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="cje|pozzx2[6sNN94iV}"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="wS!.d8qPGi[a|?+Zyro}"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_C6DA21.POWER</field> </block> </value> <value name="B"> <block type="logic_boolean" id="r%lyF}(9^,3/YNPWwk.e"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="request" id="TF)ENiVZ-qCG4#SR]M4y"> <mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="URL"> <shadow type="text" id="Mtu@:]#=CCIS:a68~W0,"> <field name="TEXT">http://192.168.178.54/cm?user=&password=&cmnd=Backlog%20Power%20on</field> </shadow> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="8Sjb4mMO{-??#O}@^rhQ"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Y]_}%+4*X[P{[e12B#=~"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_C6DA21.POWER</field> </block> </value> <value name="B"> <block type="logic_boolean" id="3.nCS631HIg^A(n`9IO_"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO1"> <block type="request" id="c3dPpQIk*P/XE+8}`9FE"> <mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG"></field> <value name="URL"> <shadow type="text" id="?+T{nKLY%..HhQx@m}6k"> <field name="TEXT">http://192.168.178.54/cm?user=&password=&cmnd=Backlog%20Power%20off</field> </shadow> </value> </block> </statement> </block> </statement> </block> </xml>
Dieses Script muss natürlich für euren Lichtschalter, Controller + Relais etc angepasst werden.
Ist der Wert „wahr ( true )“ so schaltet das Script auf „aus“
Ist der Wert „falsch ( false )“ so schaltet das Script auf „an“
unabhängig wie der Status gerade ist.
🙂
Viel Spaß beim nachbauen, Kommentare oder Fragen bitte in die Kommentare 🙂