Kapıyı Slack’den Kontrol Etmek

Madem yenilikçi teknoloji şirketiyiz, kapı otomatiği düğmesine basmak yerine neden bilgisayar ve telefondan kapımızı açmayalım ki? Daha da ileri gittik kapının Slack üzerinden bizimle iletişime geçmesini sağladık!

Kapı Problemi

Kapıyı açmak her zaman bir problem. Kimse o kapı otomatiği düğmesine basmak için yerinden kalkmak, işini bölmek istemez. Hele ki sabahları herkes işe gelirken ard arda sürekli kapı çalarsa ‘yeter artık açın şu kapıyı’ nidaları başlayabilir.

Peki bu problemi nasıl çözebiliriz? Parmak izi ile açılan sistemler veya şifreyle açılan sistemleri kullanabilirdik. Ama bunlar hem ekstra ayarlarla uğraşmamıza neden olacak hem de parmak izi olmayan birisi kapıyı çaldığında açmak için yine düğmeye gitmemize neden olacaktı. Daha etkili bir yöntem bulabilir miyiz? Herkeste zaten var olan bir uygulamaya entegre etsek?

Evet işte burda Slack kullanma fikri ortaya çıkıyor. Üstelik parmak izi veya kişiye özel şifre ayarlamakla uğraşmadan kapıyı kimin açtığı ne zaman açtığı gibi bilgilere Slack sayesinde ulaşabiliyoruz. Dahası kapımıza özel api bile yazabiliriz, slack dışında programlardan da yönetilmesini sağlayabiliriz. Olabildiğince esnek davranabiliriz.

Slack’deki Kapı

Aslında sistem çok basit işliyor ve yapması da bir o kadar ucuz. İhtiyacımız olan Arduino Uno (Veya ihtiyacınıza göre diğer Arduino boardları), Esp8266 Modülü, 5V röle ve biraz tek kanallı kablo. Tüm bunların bağlantılarını internetten nasıl yapacağınızla ilgili ayrıntılı bilgileri bulabilirsiniz. Esp8266'yı kullanmak ilk başta zor gelebilir ama öğrendikten sonra 15 liraya Arduinoyu wifi ağınıza bağlıyor olacaksınız. Bu yüzden uğraşmaya değer diye düşünüyorum.

Arduino’dan sonra zil sisteminizle Arduino arasında bağlantı kurmalısınız. Zil sistemleri kapı otomatiğini çalıştırmak için araya bir anahtar koyar. Bu anahtara bir paralel bağlantı koyarak bu bağlantıya röle ile Arduino kontrollü anahtar yapmalısınız. Böylece zil sistemi olması gerektiği şekilde çalışırken aynı zamanda Arduino’dan kontrol etmeye başlarsınız.

Bağlantılardan sonra ihtiyacınız olan tabiki yazılım. Bu aşamada sistemi çözmenin onlarca farklı yolu olabilir ama ben en stabil hale getirebildiğim yöntemden bahsedeceğim. İlk başlarda arduinoyu server olarak kullanmaya çalıştım. Ancak IP işlemleriyle internetten sürekli arduinoya ulaşmaya çalışmak konusunda stabil bir sonuca ulaşamadım.

Daha sonra merkezi hosting sitelerinden birine taşıdım.

hosting deki dosyalar

Şuan ki sistemde Slack door.php dosyasına ulaşıyor ve gerekli işlemleri orada yapıyor. Bu dosya ise DoorController dosyasını include ederek yapabileceği işlemleri oradan öğreniyor. Sonuç olarak slack’den birisi ilgili komutu yazdığında door_status isimli dosyaya kapının açılması gerektiği yazılıyor. Arduino ise sürekli getDoorStatus.php dosyasına ulaşıyor ve kapının açılıp açılmayacağını oradan öğreniyor. Bu dosya da temel olarak door_status dosyasına ulaşarak kapının açılıp açılmaması gerektiğini Arduinoya iletiyor. Bu dosyalar mesai saatlerini de kontrol ediyor. Yani birisi gece kapıyı açmaya çalışırsa kapımız mesai saatleri dışında çalışmadığını söylüyor.

kapi.php

Slack’in ulaştığı door.php dosyasının içeriği bu şekilde. Yeni bir kapı nesnesi oluşturuluyor. addDefaultResponse methodu eğer bot’a yazılan içerik başka koşulları karşılamıyorsa bu cevabı kullan anlamına geliyor. addResponse methodu ise yeni koşul belirlemenizi sağlıyor. Örneğin açıl yazılınca açılsın isterseniz addResponse(‘açıl’, ‘kapı acılıyor’, true, false); şeklinde bir satır ekleyebilirsiniz. İlk değişken koşul, ikinci değişken verilecek cevap, üçüncü değişken koşul karşılanırsa kapının açılıp açılmayacağı, dördüncü değişken ise geri verilecek cevabı sadece gönderen kişi mi görsün yoksa herkes mi görsünün belirlendiği yer.

Yani buradaki koşulları kullanarak isterseniz bugün kaç kişi girdi sorusuna kapınızdan cevap verdirebilirsiniz.

prepareResponse() fonksiyonu koşullar ve kullanıcının yazdıklarını karşılaştırarak verilmesi gereken cevabı belirliyor. sendResponse cevabı gönderiyor. immediateResponse() Slack’e anında cevap vermeye yarıyor. Son olarak openDoor() fonksiyonu kapıyı açıyor.

Slack’de nasıl custom commands oluşturabileceğinizle ilgili tüm bilgilere https://api.slack.com/slash-commands bu adresten ulaşabilirsiniz. Ayrıca custom commands yerine bu proje için Outgoing Webhooks ve Incoming Webhooks da kullanabilirsiniz.

Kodların tamamı pek yakında GitHub’da…

bizim kapının profili :P

Bu işlemlerden sonra artık kapınız Slack takımınıza bağlanmış durumda. İsteklerinize cevap veriyor. Dilerseniz sonradan Arduino’nuzu geliştirerek parmak izi sistemi ekleyebilir veya kapıdan giren herkesin fotoğrafını çektirebilirsiniz. Girişleri veritabanına kaydederek günün hangi saatleri, haftanın hangi günleri en fazla giriş olmuş gibi istatistikleri çıkartabilirsiniz.

Yakında sistemi biraz daha geliştirip açık kaynaklı olarak tamamını GitHub üstünde paylaşmayı düşünüyorum. Paylaşmak güzeldir :)