Avec le développement de mon RaspiDomo, le branchement de détecteurs d’ouverture est rapidement arrivé à l’ordre du jour. Comme je n’ai pas envie de tirer des fils de partout, la solution totalement connectée semble la plus intéressante : tout passe via le réseau ethernet ou WiFi, un réseau sauvegardé et protégé, et donc impossible à interrompre par le cambrioleur de base.

nodemcu

C’est ici que va intervenir le petit ESP8266, associé à un bout de code Lua que nous allons injecter dans init.lua pour qu’il se lance dès la mise sous tension :

-- connexion au reseau wifi
wifi.sta.config("nom_du_reseau","password")
wifi.sta.connect()
tmr.delay(1000000)
print(wifi.sta.status())
print(wifi.sta.getip())
-- contact porte ferme par defaut
ouvert = 0
function contact(level)  -- on lit le contact du gpio3
  etat = gpio.read(3)
  if etat == 1 then
    ouvert = 1
    print('PORTE OUVERTE')
    cu=net.createConnection(net.UDP)
    cu:on("receive",function(cu,c) print(c) end)
    cu:connect(5665,"192.168.1.124") -- envoi port 5665 udp a l ip 192.168.1.124
    -- code ouvertA et retour ligne
    cu:send("ouvertA\n")
  else ouvert = 0
  end
  end
-- configuration port gpio 3 en entree
gpio.mode(3, gpio.INT, gpio.PULLUP)
gpio.trig(3, 'down', contact)  -- si changement etat on lance la fonction contact

Sur la platine d’expérimentation Nodemcu, voici le branchement du contact de fermeture :

esp8266_ouverture

En bas à gauche, la masse (GND), en haut à droite, 4ème broche en partant de la droite, GPiO3. Lorsque le port est lu, à l’intérieur de la fonction contact, la valeur 1 est retournée si le contact est ouvert, 0 s’il est fermé.

En cas d’ouverture, nous indiquons PORTE OUVERTE et émettons une trame ouvertA sur le port UDP 5665, à destination de l’IP de notre Raspberry Pi, 192.168.1.124 (à adapter selon VOTRE configuration donc).

Coté Raspberry Pi, il va nous falloir recevoir cette trame avec un bout de code python, à placer dans udp.py par exemple :

import socket
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.bind( ('',5000) )

while True:
    data, addr = sock.recvfrom(1024)
    data = str(data, encoding='utf8')
    if "ouvertA" in data:
      print ("PORTE OUVERTE")

que vous allez lancer avec un sudo python udp.py.

A vous désormais de tester avec un ou plusieurs capteurs d’ouverture connectés au WiFi de votre box internet, et de programmer des actions sur le Raspberry Pi : alerter par email, alerter par SMS, etc.