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.

9 thoughts on “Tam Bir Akıllı EV Uygulaması (1)”

  1. İyi günler. Ben Mersin’de Meslek lisesinde bilgisayar öğretmeni olarak görev yapıyorum.
    Spark Core Photon üzerine Türkiye’de yapılmış çalışmalar var mı diye incelerken sizin makalelerinize rastladım. Sizden bu konu ile ilgili fikir almak istiyorum. Eğer sizce de uygun olursa?
    Okulumuzda geçen öğretim yılında Arduino kullanarak bir kartlı okuma sistemi yapmaya çalıştım. Bilgisayar Laboratuvarına koyduğum bu sistemle öğrenci ve öğretmen girişleri kartla olmakta. Ayrıca okunan verileri kendi sitemdeki bir mysql veri tabanına kaydediyoruz. Bir televizyona bağladığımız raspberry pi ile de python tabanlı bir arayüz hazırladım ve laboratuvardaki ders, öğretmen, öğrenci bilgileri ve duyuruları mysql veri tabanından çekerek televizyonda görüntüledim.
    Bu yıl bu projeyi geliştirerek tüm laboratuvarlara kurmak, ayrıca yemekhane, kantin gibi yerlerde de öğrencilerin kartları ile alışveriş yapmasını sağlamak ve velilerin de öğrencilerini web üzerinden izleyebilmelerini sağlamak için bir proje hazırladım ve projeyi Avrupa Birliği’ne sundum. Projemiz kabul edildi. 4 tane Avrupa ülkesine giderek bu sistemin tasarımı, üretimi, programlanması eğitimini vereceğiz ve onlar da son aşamada ülkemize gelerek bu sistemin okulumuzda kurulmuş halini görecekler.
    Projede aklıma takılan birkaç husus var. Sizden fikir almak istiyorum.
    Projeyi arduino yerine spark core photon ile yapmayı düşünüyorum. Çünki cloud için sağladığı api’ler projede bize çok kolaylık sağlar diye düşünüyorum. Projede verileri daha önce yaptığımız şekilde arduino ile okuyup mysql’e yazıp okuma yerine Windows azure ortamında saklamayı düşündüm. Hem bu sayede cep telefonlarından da cloud verilerine kolayca erişebiliriz diye düşündüm. Acaba spark core api’leri Windows azure işlemlerini destekler mi?
    Ayrıca Windows azure yerine acaba kendi bulut yapımızı tasarlayabilir miyiz diye düşünmekteydim. Aklımda raspberry pi üzerine owncloud yapısını kurayım mı diye düşünürken bugün sizin akıllı ev ile ilgili bir makalenizde sizin MQTT serverı kurmayı planladığınız okudum. Acaba ben raspberry pi üzerine owncloud yapısını kursam spark core api’leri buna destek verir mi.

    1. Selamlar Volkan Bey,
      Projenizi kutluyor ve başarılar diliyorum öncelikle. İşe başlamadan önce sizinde ana sistem mimarisini planlamanız gerek. İsterleri alt alta yazmakla başlayın. Aslında kafanızda bunları yapıyorsunuz ve bu düşünceler sizi Azure ve Spark Core gibi teknolojilere götürüyor. Bunu biraz daha sistemli yaparsanız ve yazarsınız herşeyi daha net göreceksiniz. Spark Core oldukça kullanışlı ve güçlü apilere sahip bir platform. Azure da bir çok API ye sahiptir ve http protokolü üzerinden bu iki apiyi konuşturabilirsiniz. Ama daha önce yazdığınız mysql python kodlarınıda tekrar kullanabilmeniz için size önerim DigitalOcean benzeri bir cloud servisinden kendinize bir makina kurmanız ve olabildiğince hazır modülleri yada daha önce yazıp çalıştığından emin olduğunuz kodları kullanmanız. Eğer çalışmalarınızı açık kaynak yapmak isterseniz gnexlab olarak size destek verebiliriz.

      Saygılar
      Nuri

    2. Girişimci ve çalışkan bilgisayar öğretmenlerimiz olduğunu görmek gerçekten çok sevindirici. İletişim bilgilerimden bana ulaşabilirseniz size ayrıntılı olarak yardımcı olmak isterim. Bahsettiğiniz sisteme benzer bir sistemim şu an test aşamasında. Kendi sunucumda depoluyorum verileri.

  2. Selam Nuri,

    bir tavsiyem olabilir.

    Kirlilik olmasın diye mevcut WiFi üzerinden haberleşmeyi seçmişsin ama WiFi üzerinden çok sayıda aktör ve sensör haberleşirken:

    1) Evdeki router’ların sadece 8-10 bağlantıyı aynı anda desteklediğinden, (Telefon, tablet, TV, Playstation’da dahil) bağlantı problemleri ile karşılaşabilirsin.

    2) Esas 2.4 GHz bandında kirlilik yaratarak evde kör noktalar oluşturma ihtimalin çok yüksek.

    3) 2.4 GHz duvarlardan rahat geçemediği için, uzaktaki aktör/sensörlerle haberleşmede sıkıntı yaşayabilirsin.

    WiFi üzerinden haberleşen Belkin Wemo Switch, Lifx ampül kullananların çok karşılaştığı sorunlar bunlar. 1-2 tanesi iyi çalışırken adet arttıkça bağlantı problemleri yaşanmaya başlanıyor. Bunun önüne geçmek için Mesh bir yapı kuran ZigBee protokolünü kullanabilirsin. Kullanan çok kişi olduğu için, kaynak bulması daha rahat, geliştirme sürecini hızlandırır. Biraz pahalı ama.

    Mühendislik açısından daha sağlıklısı Sub Gigaherz bandına inmek. Burada da iki kullanabileceğin frekans var. 900 Mhz band civarı, evlerdeki telsiz telefonlarda kullanılan band. O telefonların vericileri pek kuvvetli olduğundan, telefon açıkken sinyalle enterfere olması muhtemel. Geriye 433 Mhz kalıyor. Burada hem aynı anten gücü ile çok daha yüksek bir kapsama alanı yakalar, hem de duvarları daha geçebilirsin. Paket kaybını önlemek için de aynı sinyali birkaç kez göndermek gerekir. Alıcı taraftan yapılan “paketi aldım” geri bildirimi ile kararlılığı arttırabilirsin.

    Sevgiler,
    Burak

    1. Teşekkürler Burak Bey,
      Bu sorunları yaşadıkça görmek istiyorum. Bir taraftan da modüler bir mimari peşinde olduğumdan sensör networkünü 433Mhz banda çekecek ucuz çözümlere yönelebilirim. Tavsiyeleriniz için teşekkürler.

      Ekleme:Hızlı bir arştırmadan ev networüne teorik olarak 255 baglantı yapılabileceğini gördüm. Çok bağlantının sorun açacağı yerin bandgenişliğinin paylaşılması olduğu yazıyor. Sensörler oldukça az bir veri göndereceklerinden sorun olmaz diye düşünüyorum. Ama yinede deneyip görmek lazım.
      Kaynak:http://wifi.actiontec.com/learn-more/wifi-wireless-networking/wireless-network-capacity-how-many-devices-can-connect-to-my-wifi-network/

      1. Öncelikle bağlantı sayısının sıkıntı çıkarmasının nedeni teorik sınır olan 255 cihazdan çok anlık bağlantı sayısının Router tarafından karşılanıp karşılanamaması oluyor genelde. Benim karşılaştığım bir sorun kendisi. Ev kullanıcılarının çoğunun sahip olduğu basit Router larda genelde 10-12 cihaz Router daki işlemci ve ram gücünü tüketebildiği için sıkıntı oluşturmaya başlayabiliyor. Gecikme süreleri uzuyor ve lambayı telefonla aç dedikten sonra açılmasını birkaç saniye beklemen gerekebiliyor mesela.

  3. Teşekkürler Nuri Bey. Önerilerinizi uygulayacağım. Öncelikle basit bir test sistemi yapayım ve farklı bir kaç alternatif ile karşılaştırma yapayım. Sonuca göre hareket edeceğim. Projeyi açık kaynak yapmak isterim elbette. Bunun ile ilgili ilerleyen aşamalarda görüşüp desteğinizi alabiliriz.

    1. Gnexlab’da sadece yetkili olanların girebildiği çalışma grupları da kuruluyor. Proje açık kaynak olmasada gerekli gizlilik sözleşmeleri ile gruplara altyapı sağlıyoruz. Ülkemizde birlikte çalışma kültürünü yaymayı amaçlıyoruz.

      Saygılar
      Nuri

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.