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=&amp;password=&amp;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=&amp;password=&amp;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 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.