DIY Smart Door für 5 Euro (Smart Door Opener - Part 1)

  • Posted on: 18 October 2016
  • By: robin

Mit dem Magic Door Opener kann man von überall auf der Welt (überall wo es Internet gibt ;) ) die Haustür (nicht Wohnungstür) öffnen und eine Notifications aufs Smartphone erhalten, sobald es an der Tür klingelt.

Die Idee kam mir als ich für Anwendungen für mein NodeMCU (ESP8266) gesucht habe. Dabei fielen meine Blicke irgendwann auf die Klingelanlage / Gegensprechanlage. Bei mir ist das die Ritto Twinbus Gegensprechanlage. Zugegeben es gibt eigentlich wenig "Use-Cases" bei denen es Sinn macht die Tür für Fremde die Türen zu öffnen oder darüber informiert zu sein wenn es an der Tür klingelt obwohl man nicht da ist. Ich nutzte das System hauptsächlich um mit selbst die Tür aufzuschließen und um zu wissen ob der Paketbote tatsächlich bei mir geklingelt hat. Den größten Nutzen habe ich jedoch durch den Bau der Systems erlangt. Denn ich habe viel gelernt und möchte es deswegen mit euch teilen.

Ich werde das Projekt in 3-4 Artikel unterteilen. Im ersten Teil soll es nur um die Türöffner Funktion gehen. Im zweiten Teil, der schön etwas komplizierter ist, um das versenden von abgreifen von des Türklingelsignals und das versenden von Notifications zu Googles Firebase. In den letzten teilen soll es nur um die nötige Software gehen. Also das NodeMCU script, den kleinen Server und die Android App.

Beginnen wir also mit dem 1. Teil:

Dieser Teil es Projekt ist relative einfach umzusetzen und der Kostenaufwand ist auch sehr gering, solange man nichts beschädigt. Doch nun erstmal ein Video:

 

Einkaufsliste:

NodeMCU ("Programmierbares WLAN Modul")

3,15 € - NodeMCU eBay aus China

CMOS4066 (Bilateral Schalter - ähnlich Relais)

0,60 € x 5 (3,00 €) - eBay CMOS 4066

Kabel (Female) falls nicht vorhanden ;-)

1,00 € - eBay Kabel

Oder auf Amazon.de mit schnellerem Versand:


Vorbereitung:

Zunächst habe ich mir die Gegensprechanlage genauer angeschaut. Ein Gerät der Marke Ritto Type Twinbus. Dieses habe ich geöffnet und etwas zur Platiene recherchiert. 

Dank Thomas Abraham wurde ich fündig: Er beschreibt auf seiner Website was die Kontakte der Twinbus Platine für funktionen haben. Nun wusste ich also schon mal was ich machen muss, nämlich den 3. (Rot - für Türöffnung) und 4. (Blau - für GND) Kontakt verbinden. Alternativ hätte ich auch die Kontakte der kleinen Knöpfe verwenden können.


Umsetzung:


 

An diese Kontakte habe ich nun 2 Kabel angelötet und diese mit dem CMOS 4066 verbunden. In der Abbildung seht ihr außerdem die Verkabelung welche dann zum NodeMCU führen.

Nun muss der NodeMCU für einen Einsatz vorbereitet werden. Dazu muss der NodeMCU zunächste mit einer Firmware geflash werden. Dann kann er mit dem lua-script bespielt werden:

wifi.setmode(wifi.STATION)
wifi.sta.config("BudSpencer","PaPAT2xx1", 1)
wifi.sta.connect()
 
print(wifi.sta.getip())
 
bell1 = 2
pin1 = 3
led1 = 4
 
gpio.mode(pin1, gpio.OUTPUT)
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(bell1, gpio.INPUT, gpio.PULLUP)
gpio.write(pin1, gpio.LOW)
gpio.write(led1, gpio.HIGH)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
        buf = buf.." <h1>NodeMCU Door Opener</h1> ";
        buf = buf.."<p>Door <a href=\"?pin=OPEN\"><button>OPEN</button></a></p>";
       
        local _on,_off = "",""
        if (_GET.pin == "OPEN") then
              gpio.write(led1, gpio.LOW)
              gpio.write(pin1, gpio.HIGH)
              tmr.delay(1000 * 2000)
              gpio.write(led1, gpio.HIGH)
              gpio.write(pin1, gpio.LOW)
        end
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)
 
lock = 0
 
function callback()
    if lock==0 then
        lock = 1
        print ("called ")
        print ("notify()")
        http.post('http://192.168.178.5:9999/bell',
              'Content-Type: application/json\r\n',
              '{"hello":"world"}',
              nil)
    lock = 0
    end
end
 
gpio.trig(bell1, "up", callback)


Netzwerk (VPN, Portforwarding, DynDNS):

Damit die App später auf den NodeMCU zugreifen kann oder einen vorgeschalteten Server kann man sich entweder ein VPN oder ein Port am Router Forwarden. 

Vorteil beim VPN ist die Sicherheit jedoch kann die App dann nur genutzt werden, wenn das Gerät sich mit dem VPN verbunden hat. Deswegen habe ich mich für letzte Strategie entscheiden. Dabei stößt man auf das nächste Problem. Wie finden mein Handy meinen Heimrouter im Internet ? Er benötigt ja die IP Adresse um diesen anzusprechen aber diese ändert sich permanent. Die Lösung für das Problem ist eine DynDNS. Eine DynDNS ist eine dynamischer Wegweiser der auf eure Heimrouter deutet. Eine DynDNS sieht aus wie eine Internet Domain. Beispielsweise www.sueddeutsche.de --> 195.50.176.88. Wenn ihr diese Adresse erreichen wollte, schaut ein Computer wie die IP Adresse des Servers lautet, die bei dieser Domain hinterlegt ist.

Bei vielen Routern gibt es die Möglichkeit eine DynDNS einzurichten. Der Router sendet dann automatisch bei Änderung der IP oder in bestimmen Zeitintervallen ein IP Adressen Update zu eurem DynDNS Provider. 

 

Weiter gehts mit Teil 2: 

DIY Smart Door für 5 Euro (Door Bell - Part 2)

topic: 
Smart Home, Magic Door, Türöffner, NodeMCU, Hack
Field: 

Comments

Moin Robin,
dein Aufbau mit dem Cmos 4066 funktioniert bei mir ziemlich gut, also schonmal Danke für die Anleitung. Aber wie hast du das Problem gelöst, das der Cmos schaltet, wenn er keinen Strom bekommt?

Gruß Garogat