Haber

Tam Bir Akıllı EV Uygulaması (1)

Yeni müstakil evimize taşınınca anladım ki bu çok katlı evi yönetmek ve güvenliğini sağlamak o kadar da kolay değil. Genel isterleri düşününce bazı önemli kriterleri ortaya koymaya çalıştım.

-Bir proje geliştirmeden önce ilk yaptığım şey isterleri belirlemektir. Bundan sonra bu isterlerin hangi teknolojilerle karşılanabileceğine bakar sistem tasarımına geçerim. Sistem tasarımında ana resmi ortaya koyup detayları kara kutu olarak belirler, ilk başta bu alt sistemlerin içini görmezden gelirim. Sadece kara kutuların bir biri ile nasıl haberleşeceği beni ilgilendirir. En son adımda ise bu kara kutuların fonksiyonlarını tanımlar hazır çözümler yada açık kaynak uygulamalarla bu alt sistemleri gerçekleştirmeye çalışırım. Çok özel bir alt sistem ihtiyacı varsa ya kendim geliştiririm ya da bir freelancer ile olayı çözerim. Alt sistem nisbeten basit olacağı için freelancerlara çok para ödemeden çözümü üretmiş olurum.-

Gelelim Akıllı ev sisteminin isterlerine;

– Ev Akıllı ise Akıllı telefon ile yönetilebilmeli (iphone/ipad ilk tercihim Android desteği artı)
– Ev sensör networkü ile donatılabilmeli
– Sensör eklemek kolay ve ucuz olmalı
– Komutları yerine getirecek bileşenler eklenebilmeli (röle, motor, vb.)
– Birden çok sensör bilgisi füzyon edilebilmeli ve karar ile ilgili komut çalıştırılabilmeli. Bu yapı mümkünse bir script dilini desteklemeli
– Sistem e-posta, sms, telefon arama yada push notification desteklemeli. (Alarm durumunda iphonuma anında notification gelmeli)
– Sistem takvimsel işlemleri belli düzen içinde yapabilmeli. (cron job)
– Fazladan radyo yayını kirliliği oluşturmamak için mevcut ev wifi sistemi ile çalışabilmeli
– Tüm sensör bilgileri cloud da depolanabilmeli.
– Kamera ile kritik bölgeler gözlemlenebilmeli
– Gece modu, tatil modu gibi modlar tanımlayıp evi bu modlara kolayca sokabilmeliyim. (Mesela gece modu durumunda buzdolabı ve gerekli elektrikli aletler dışındaki prizler kapatılıp gece lambaları açılmalı)
– Sistem bazı dış servis sağlayıcılardan bilgi alabilmeli (mesela hava durumuna bakıp yağmur durumunda sulama sistemini açmamalı)
– Hırsızlığa karşı tüm griş çıkışlar Alarm aktive edilmesi durumunda izlenebilmeli ve izinsiz giriş halinde alarm sireni çalmalı ve gerekli haberler bizlere kapıcıya yada Polise iletilebilmeli

Proje ilerledikçe bunlara ilaveler yapmak mümkün. Tüm bu isterleri yerine getirsem zaten güzel bir Akıllı Ev Uygulaması yerine getirmiş olurum diye düşünüyorum.

Şimdi kabaca bu isterleri yerine getirebilmek için hangi teknolojileri kullanabiliriz onu belirleyelim ve Ana Sistem Mimarisine bakalım.

Burada ana teknolojiyi belirleyen ister aslında sensör networkü. Daha önce tekbir wifi modülü ile örnekler yapıp gnexlab’da yayımlamıştım. Şimdi yapılması gereken bu sensörlerin bir ana merkez ile konuşabilmesi ve durumlarını söylemesi. Tabi aynı şekilde bazı komutları dinleyen ve bu komutlar oluştuğunda işlemi yerine getirecek modüllerin tasarlanması gerekli. Tam burada bir network iletişim protoklü seçilmeli. Siz de araştırırsanız hemen göreceksiniz ki bu iş için MQTT biçilmiş kaftan.

mqtt logo

Mqtt nedir? diye arattığımda karşıma Timuçin Anuşlu’nun güzel sayfası çıktı. Ben MQTT yi burada detaylı anlatmayacağım. Kısaca söz etmek gerekirse MQTT makinalar bir biri ile konuşsun diye geliştirilmiş bir mesajlaşma protokolü. Ortada bir MQTT broker’ı (serverı) oluyor diğer cihazlar da bu brokerı kullanarak mesaj yayımlıyor ya da belli mesajları dinlemek için kaydoluyor. Mesaj yayımlamaya Publish mesajı dinlemeye Subscribe deniyor. Mesajın iki ana bölümü oluyor Konusu (Topic) ve içeriği (Payload). Siz belli bir topicde bir mesaj yayımlıyorsunuz bu mesaja abone olanlar (subscriber) bu mesajı alıyorlar. Mesela bir sıcaklık sensörü belli aralıklarla sıcaklık değerini yayımlıyor. Bu sıcaklık değeri içeriğine abone olanlar bundan haberdar oluyor. Yada bir prizi yöneten bir röle aç/kapa şeklindeki mesaja abone oluyor. Bu mesaj herhangi bir nedenle yayımlanırsa bu mesajı dinlediği için röle açıp kapanıyor.

Biraz karışık anlatmış olabilirim. Ama uygulamada daha rahat anlaşılacaktır diye düşünüyorum.

Bizimde temel iletişim protokolümüzün MQTT olsun zaten kendisi OASIS Standardı olmuşdurumda. Sistem tasarımında bu tür ara yüzlerin standart bazı frameworkler ile tasarlanması abstraction layer denilen bir katmanlı mimari oluşturmanızı sağlıyor. Alt sistemleri bir birinden soyutlamış oluyorsunuz. Büyük bir sistem tasarlarken bu çok önemli bir konu. Bunu yapmazsanız bir alt sistemi geliştirdiğinizde yada değiştirdiğinizde bundan tüm sistem elemanları etkilenebilir. Ama abstraction layerlarınız olursa değişiklik olduktan sonra aynı arayüze bağlantı sağlayarak sisteminizin etkilenmesini önlemiş olursunuz.

Bizim akıllı ev projesinin ana sistem mimarisinde sensör donanım kısmı MQTT destekli olacak ve sensör ve röleler MQTT mesajları yayımlayabilecek yada belli topicleri dinleyebilecek yetenekte olmalı. Bu karar bizi modülerlik anlamında çok rahatlatacak.

Ana sistem bileşenlerinden bir diğeri olan kullanıcı arayüzü de yine MQTT altyapısı ile haberleşecek ve ona mesaj yayımlayıp mesaj dinleyebilecek şekilde seçilmeli. İsterlerimizden bir diğeri akıllı telefonlarla kontrol olduğu için bu alt bileşenin seçilmesinde uzun araştırmalar yaptım. Sonuçta kendiniz de bir akıllı telefon arayüzü yazabilir yada yazdırabilirsiniz ama bu zaman ve maliyet açısından önemli bir kalem olur. Bu nedenle biz hazır açık kaynak ve popüler birşeyler bulmaya çalışalım. Tüm bu kriterler kafamda araştırma yaparken bir çok seçenek arasından OpenHab‘ı seçmeme neden oldu.

openhab logo

Openhab’ın hem IOS hem Android uygulamaları mevcut. Çok modüler ve Raspberry Pi üzerinde runtime’ı çalışabiliyor. Java ile geliştirilmiş platform bağımsız bir sistem. İnceledeğimde çok yetenekli ve sağlam olduğunu gördüm. Ve kullanmaya karar verdim. Bu modüler yapı isterlerimin büyük bir bölümünüde sağlıyor. Hatta benim aklıma gelmeyen bir çok fonksonaliteyi de içinde barındırıyor olabilir. İncelerken ilk baktığım husus arayüzün IOS uyumlu oluşu, ikincisi ise MQTT protokolünü destekleyip desteklemediği idi. İkisinden de geçer not aldı openhab.

Sürekli MQTT diyip durduk peki MQTT brokerı yani serverı ne olmalı birde ona karar verelim. En önde gelenleri

Bunlardan herhangi birini kullanabilirsiniz. Ben ön testlerde windows makinamda olduğum için HiveMQ kullandım. Server donanımı Rasberry pi olacağı için ilerde bunu değiştirebilirim görücez bakalım.

Tam da yeri gelmişken ana sistem elemanlarından birisi de tüm sensörlerin konuşacağı server donanımı. Sensörler wifi olacağından bu donanım cloudda da olabilir ama ilk denemelerde ben bir Raspberri Pi üzerine tüm serverları kurmayı düşünüyorum.

Raspberry pi

Yani Openhab runtime ve Mqtt brokerı ev networkünün parçası olan Rpi üzerinde koşacak.

Verilerin cloud’da depolanması isterini göz önünde bulundurarak ana sistem bileşenlerine birde bu alt sistemi eklememiz gerekli. Bu çözümü sağlarken yapabileceğimiz iki yöntem var.

1.Dedicated Server

2. Üçüncü parti Hazır çözüm

Sensör kısmını biraz daha açmak gerekirse burada karşımıza çıkan en önemli teknoloji Esp8266 çipi. Bu çip 80mhz bir işlemci ve wifi modülünü birlikte yaklaşık $3 gibi bir fiyata sunuyor. Bu çip ile birlikte bir arduino işimizi çok kolaylaştırırdı ama çok adetli kullanacağımız için fiyatı ciddi etkiler diye sensör yazılımlarını Esp8266 firmware’ı üzerinden çözmeye çalışacağım. Aslında ihtiyacımız olan wifi ev networküne bağlanmak sensör değerini okumak ve Mqtt mesajı yayımlamak. Röle modülleri için se Mqtt mesajına abone olmak ilgili mesaj gelirse röle pinini açıp kapatmak.

Temel teknolojileri ve bileşenleri ortaya koyduğumuza göre büyük resmi bir çizmeye çalışalım.

 

AkillievMimari

 

 

Yazının devamını Esp8266 mqtt ve sensörlerle ilgili daha donanım ve firmware ağırlıklı yazmayı düşünüyorum. 3. kısımda ise Openhab dan bahsetmek yararlı olacaktır. Yazının devamında görüşmek üzere.