You are on page 1of 26

NESNELERİN İNTERNETİ

Dr.Öğr.Üyesi Ömer ÇETİN

2020-2021 EÖY GÜZ YARIYILI


FİNAL RAPORU

Öğrenci No: 3192202


Öğrenci Adı Soyadı: Burak Cem KARA

Nesnelerin İnterneti-2020- Dr.Öğr.Üyesi Ömer ÇETİN


Burak Cem KARA-3192202

İÇİNDEKİLER

Şekiller ve Tablolar ........................................................................................................ 1

1. Giriş............................................................................................................................ 2

2. Kullanılan Cihazlar, Yazılım Geliştirme Ortamları ve Kütüphanelerin Ara Sınav Raporu


ile Planlanan Yapıyla Karşılaştırılması .................................................................... 3

3. Proje Çıktıları ............................................................................................................. 9

4. Proje Kodu ve İşlevleri .............................................................................................. 17

5. Sonuç.......................................................................................................................... 21

6. Proje Çalışması neden bir IoT Uygulamasıdır ........................................................... 23

7. Kaynakça .................................................................................................................... 24

PUANLAMA

İŞ TANIMI PUAN ALINAN NOT


DEGERI
Kullanılan cihazlar, yazılım geliştirme ortamları ile
kütüphanelerin ara raporda planlanan yapıyla
15
karşılaştırılması ve değişiklikler varsa nedenleriyle
açıklanması

Projede yazılan sunucu ve istemci taraflı kodların


20
yazılarak açıklanması

Gerçekleştirilen projenin ne derece bir IoT isterilerini


karşıladığı 20

Proje tasarımı ve kullanımı 15

Proje tanımında açıklanan ve ara raporda planlanan


çalışmada gerçekleştirilen ve gerçekleştirilmeyen 20
işlevlerin açıklanarak tartışılması

Raporun genel şekli ve düzeni ile kaynakça kullanımı 10

TOPLAM 100

*Tablo rapor puanlamasını içermektedir, her bir bölümden alınabilecek en yüksek not belirtilmiştir.

Nesnelerin İnterneti-2020- Dr.Öğr.Üyesi Ömer ÇETİN


Burak Cem KARA-3192202

Şekiller ve Tablolar

Tablo 1. Proje Kapsamında kullanılacak donanımlar ve özellikleri .............................. 3

Şekil 1. Raspberry Pi işletim sistemi masaüstü ekran görüntüsü .................................. 4

Şekil 2. Projede kullanılan Sense Hat emülatörünün projeme uyarlanmış hali ............ 10

Şekil 3. IotHook alan adları oluşturduğumuz device detail bölümü ............................. 11

Şekil 4. IotHook Device Api Key’leri aldığımız bölüm ............................................... 11

Şekil 5. Gelen verilerin iotHook Showdata kısmındaki gösterimi ................................ 12

Şekil 6. Gelen verilerin ShowChart grafik gösterimi .................................................... 13

Şekil 7. Geany IDE platformunda yazılan kodların gösterimi ...................................... 14

Şekil 8. Visual Studio Code IDE üzerinden yapılan uygulama gösterim_1 ................. 15

Şekil 9. Visual Studio Code IDE üzerinden yapılan uygulama gösterim_2 ................. 15

Şekil 10. Hasta uyarı uygulaması bildirim ekranı ......................................................... 16

Nesnelerin İnterneti Dersi Dönem Projesi 2- 1


Burak Cem KARA-3192202

1. GİRİŞ

Vize ara raporunda, yapacağım IoT projesi için kişinin sağlık durumunu kontrol etmek
amacıyla bir Raspberry Pi cihazına bağlı sensörler ile bu verilerin alınması hedeflenmiştim.
Alınan bu veriler önce Raspberry Pi cihazı üstünde bulunan bir MicroSD karta depolanacaktı
ve ardından yine Raspberry Pi cihazının üstündeki wifi modülü ile bir bulut sunucusu ortamına
aktarılıp burada depo edilecekti. Kişinin sağlık durumunu gösteren bu veriler üzerinde
herhangi bir anomali durumunda ise Raspberry Pi cihazı bu durumu tespit ederek kişinin cep
telefonuna önceden yüklediğimiz mobil uygulama sayesinde bu anomali durumu hastaya
bildirim (Notification) olarak iletilecekti.

Proje kapsamında fiziksel bir mikroişlemci cihazı ve buna bağlı olarak çalışan fiziksel bir
cihaz kullanılmamıştır. Tüm bu işlemler simüle edilerek gerçekleştirilmiştir. Projemiz, fiziksel
bir ortam da gerçekleştirilmemiş bile olsa, sanal makine üzerine kurulmuş bir Raspberry Pi
işletim sistemi üzerinde çalışan ve fiziksel sensörlerin yerine geçerek sensör verileri
oluşturabilecek bir emülatörümüz bulunmaktadır. Bu emülatörümüzün ismi Sense Hat’tır.
Raspberry Pi işletim sistemimiz bir sanal makine üzerinde kurulu olduğunu söylemiştik ve
dolayısıyla Sense Hat emülatörümüzün üzerinde bulunan sensörler ile oluşan veriler
bilgisayarın Ethernet kartına sahip olması nedeniyle uzak sunucuya veri gönderebilme
imkanına sahiptir. Projemizde Sense Hat emülatörümüz üzerinde oluşturduğumuz
sensörlerden gelen veriler, iotHook bulut sunucuna aktarılarak burada depo edilmektedir.
Sonrasında IotHook sunucunda depo edilen veriler üzerinde 60 saniyede bir kontroller
yaparak, verilerdeki anomali durumunu tespit etmeye çalışan ve bir sunucu görevi gören
masaüstü uygulaması devreye girmektedir. Bu masaüstü uygulaması anomali durumu tespit
ettiğinde, bu durumunu bir mobil uygulama sayesinde hastanın cep telefonuna bildiri olarak
göndermektedir.

Tablo 1 de ise çalışmamız kapsamında kullanacağımız Altyapı, Programlama Dili,


Kütüphaneler ile ilgili bilgiler verilmiştir. Tabloda verilerin bilgilere ait detaylı açıklama bölüm
2 de yapılmıştır.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 2


Burak Cem KARA-3192202

Tablo 1 : Çalışmamızda kullanacağımız altyapı, programlama dili, kütüphaneler

İşletim Sistemi Raspberry Pi OS

Programlama Dili Python

IDE Geany İDE, Visual Studio Code

Sunucu Altyapısı iotHook

Emülatör-Simülatör Uyarlanmış Sense Hat Simülatör

Haberleşme Yöntemi iotHook REST Servisler

2. KULLANILAN CİHAZLAR, YAZILIM GELİŞTİRME


ORTAMLARI VE KÜTÜPHANELERİN ARA SINAV RAPORU
İLE PLANLANAN YAPIYLA KARŞILAŞTIRILMASI

Bu bölümde, projede kullanılan yazılım geliştirme ortamları, programlama dilleri,


Raspberry Pi için kullanacağımız işletim sistemi, bulut sunucu alt yapısı, emülatör ve rest
servisler hakkında ayrıntılı bilgiler verilmiştir. Ayrıca ara sınav raporunda kullanılması
planlanan araçlardan kullanılmayanlar var ise nedenleri ile açıklanmıştır. Projede işletim
sistemi olarak Raspberry Pi işletim sistemi kullanılacaktır. Programlama dili olarak bu tip
projelerde kullanımı tavsiye edilen Python tercih edilecektir. Bulut sunucu alt yapısı olarak açık
kaynak ve ücretsiz olan iotHook bulut sunucusu kullanılacaktır. Proje veriler fiziksel sensörler
üzerinden değil bir emülatör üzerinden toplanacaktır. Emülatör olarak da Sense Hat emülatör
kullanılacaktır. Son olarak Rest servisler olarak ise iotHook bulut sunucusunun kendi Rest
servisleri kullanılacaktır.

2.1. Raspberry Pi İşletim Sistemi

Raspberry Pi için optimize edilmiş Debian tabanlı bir işletim sistemidir. Raspberry
yalnızca Raspberry Pi mikroişlemcisi ile çalışacak şekilde tasarlanmıştır. Buradaki amaç

Nesnelerin İnterneti Dersi Dönem Projesi 2- 3


Burak Cem KARA-3192202

Raspberry Pi kullanılarak yapılan projelerde diğer piyasadaki işletim sistemleri yerine Raspian
işletim sisteminin tercih edilebilmesi sağlamaktır. Bu sebepten ötürü işletim sisteminde her
özellik bunu sağlamak için ayarlanmıştır ve Raspian işletim sistemi Raspberry Pi ile tam
uyumlu çalışarak mikroişlemcinin daha uyarlanabilir ve esnek hale gelmesini sağlamıştır. Bu
işletim sistemi üzerinden Raspberry Pi cihazları yönetmek için gerekli yazılımlar hazır olarak
mevcuttur Şekil 1 de Raspian işletim sistemine ait bir masaüstü ekranı gösterilmektedir. [1]

Şekil 1 : Raspberry Pi işletim sistemi masaüstü ekran görüntüsü

2.2. Programlama Dili

Vize raporumda bahsettiğim yapıyı kurabilmek için programlama dili olarak Python dili
tercih edilmiştir. Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli
yüksek seviyeli bir programlama dilidir [2]. Girintilere dayalı basit sözdizimi, dilin
öğrenilmesini ve akılda kalmasını kolaylaştırır. Bu durum Python’a söz diziminin ayrıntıları ile
vakit kaybetmeye gerek kalmadan programlama yapılabilme kabiliyeti kazandırır. Python
1980'lerin sonunda ABC programlama diline alternatif olarak tasarlanmıştır. Python 2.0, ilk kez
2000 yılında yayınlandı. Python 2 versiyonun resmi geliştirilme süreci, dilin son sürümü olan
Python 2.7.x serisi versiyonların ardından 1 Ocak 2020 itibarıyla resmi olarak sona erdi. Python
2.x geliştirilme desteğinin sona ermesinin ardından, Python dilinin 3.5.x ve sonraki
sürümlerinin geliştirilmesi devam etmektedir. Modüler yapısı, sınıf dizgesini (sistem) ve her
türlü veri alanı girişini destekler. Hemen hemen her türlü platformda çalışabilir. (Unix, Linux,

Nesnelerin İnterneti Dersi Dönem Projesi 2- 4


Burak Cem KARA-3192202

Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi
programlama, ağ programlama, web programlama, uygulama ve veritabanı yazılımı
programlama gibi birçok alanda yazılım geliştirebilirsiniz [2]. Özellikle bu durumu projemizde
Python’u kullanma sebeplerimizden biri olarak gösterebiliriz. Python, büyük yazılımların hızlı
bir şekilde prototiplerinin üretilmesi ve denenmesi gerektiği durumlarda da C ya da C++ gibi
dillere tercih edilir. Bu nedenle projemde programlama dili olarak Python tercih edilmiştir.

ÖNEMLİ! Vize raporunda verilerin analizini ve anomali olması durumunda veriyi bulut
sunucusun dan çekip uygulamaya bildirim (Notification) olarak gönderecek yapının Raspberry
Pi işletim sistemi üzerindeki IDE’ler kullanılarak, Python programlama dili ile kodlanacak
şekilde tasarlandığını söylemiştim. Fakat yapı kurulurken verileri bulut sunucusun dan çekip
uygulamaya bildirim (Notification) olarak gönderecek yapı, Windows 10 işletim sistemi
üzerine Visual Studio Code İDE’si kurularak Python programlama dili kodlanarak yapılmıştır.
Buradaki değimin özel bir sebebi bulunmamaktadır. Bu yapı vize raporunda bahsedilen şekilde
yapılabilirdi. Windows Platform üzerinde programlama yapmak ve çalışmak nispeten tercih
ettiğim bir ortam olduğu için ve aynı zamanda elde ettiğim sonuç da değişmeyeceği için bu
şekilde uygulanmıştır.

2.3. IDE

IDE veya Tümleşik Geliştirme Ortamı, programcıların bilgisayar programı yazarken hızlı
ve rahat bir şekilde yazılım geliştirmelerine imkân sağlayan ve aynı zamanda kullandığı farklı
programlama dillerini birleştirmelerini sağlayan bir yazılım türüdür. IDE'ler, yazılım yazma
ortak etkinliklerini tek bir uygulamada birleştirerek programcı üretkenliğini artırır. IDE’ler
kaynak kodunu düzenleme, çalıştırılabilir dosyaları oluşturma ve hata ayıklama gibi özellikleri
size en hızlı şekilde sunmaktadır [3]. Tümleşik geliştirme ortamlarında olması gerekli en temel
özellikler:

• Programlama diline göre sözdizimi renklendirmesi yapabilen kod yazım editörü.

• Kod dosyalarının hiyerarşik olarak görülebilmesi amacıyla hazırlanmış gerçek zamanlı


bir dizelge.

• Tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı.

• Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok
ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 5


Burak Cem KARA-3192202

En bilinen tümleşik geliştirme ortamlarına örnek olarak Eclipse, Microsoft Visual


Studio, Code::Blocks, Dev-C++, Anjuta, KDevelop, NetBeans vb. gibi ortamlar verilebilir.
Projemizde IDE ortamı olarak Visual Studio Code kullanılacaktır. Visual Studio Code hızlı
kurulum ve düşük boyutlu olmanın yanında Microsoft, Linux ve Mac işletim sistemlerinde
çalışabilen bir araçtır. Kurulum yapıldığında basit bir metin editörü görüntüsü ile karşımıza
çıkan ürün, eklentiler sayesinde Node JS, Ruby, Python, C/C++, C#, Javascript gibi birçok
programlama dilini desteklemektedir. Yani klasik Visual Studio ürünleri gibi her şeyi
bünyesinde barındırmak yerine çekirdek bir yapı ile başlatılıp lazım olan parçaların eklentiler
halinde ürüne eklenmesi sağlanarak mantıklı bir hareket yapılmıştır. Visual Studio Code, hata
ayıklama özellikleriyle, gelişmiş web ve bulut uygulamaları üstünde kodları düzenlemeye,
yeniden tanımlamaya ve optimize etmeye yarar. Visual Studio Code tamamen ücretsiz olup,
dilediğiniz gibi kullanabilir, kodlarını inceleyebilir ve kendi ihtiyaçlarınıza göre değişim
yapabilirsiniz. Yukarıda yazdığım onlarca nedenden dolayı projemde IDE olarak Visual Studio
Code platformu tercih edilmiştir [4].

ÖNEMLİ! Raporumu oluştururken sağladığı birçok avantajdan dolayı IDE olarak Visual
studo code kullanmaya karar vermiştim fakat Raspberry Pi işletim sistemi üzerine Visual Studio
Code’un Debian tabanlı işletim sistemleri için üretilmiş versiyonunu kurmaya çalıştığımda
başarılı olamadım. Bunun nedenini araştırdığımda ise Visual Studio Code’un i386 mimarili
işletim sistemlerine kurulamadığını farkettim. Bu sebepten ötürü projemde Visual Studio Code
yerine farklı bir IDE seçmek zorunda kaldım. Visual Studio Code’un yerine seçtiğim İDE
Geany ‘dir.

Geany, Scintilla ve GTK+ tabanlı bir tümleşik geliştirme ortamı ve hafif bir metin
düzenleme yazılımıdır. Son derece işlevsel ve hafif olan Geany İDE açık kaynak bir yazılımdır.
Pek çok işletim sisteminde çalışabilen Geany'nin desteklediği diller arasında C, D, Java,
JavaScript, PHP, HTML, CSS, Python, Perl, Pascal gibi diller vardır. Geany İDE’yi
çalışmamda tercih etme sebebim Rasperry Pi işletim sistemi üzerinde çalışabilecek en
fonksiyonel İDE’lerin başında geldiği için ve aynı zamanda Python programlama dilini de
desteklediği için projemde kullanılacaktır.

ÖNEMLİ! Vize raporumda, verilerin analizini ve anomali olması durumunda veriyi bulut
sunucusun dan çekip uygulamaya bildirim (Notification) olarak gönderecek yapının Raspberry
Pi işletim sistemi üzerindeki olan IDE’ler kullanılarak yapılacağından bahsettim. Fakat bu
durum programlama dili başlığı altında bahsettiğim üzere Windows 10 işletim sistemi üzerine

Nesnelerin İnterneti Dersi Dönem Projesi 2- 6


Burak Cem KARA-3192202

Visual Studio Code İDE’si kurularak yapılmıştır. Çalışmam da ayrıca Raspberry Pi işletim
sistemi üzerindeki Geany İDE’si de kullanılmıştır. Geany İDE, Sense Hat emülatöründeki
sensörleden oluşan verilerin iotHook bulut sunucuna aktarılmasını sağlayan yapının Python
programlama dili ile kurulabilmesi için gerek olan geliştirme ortamını sağlamak için
kullanılmıştır.

2.4. Sunucu Altyapısı

Projemizde sunucu altyapısı olarak vize raporumuzda bahsettiğimiz sensörlerden gelene


verilerin toplanıp kaydedilebilmesi için ihtiyaç duyulan bulut sunucusu olarak iotHook
platformu seçilmiştir. Projemizde veriler fiziksel bir Raspberry Pi ve bu cihazın üstüne kurulu
fiziksel sensörler den değil bunun yerine emülatör üzerinden toplanacaktır. Bu veriler Sense hat
emülatöründeki barlarda yapılacak değişimler vasıtasıyla oluşacaktır ve Geany İDE
platformunda Python dili ile yazdığımız kod sayesinde iotHook bulut sunucusuna aktarılıp
kaydedilecektir.

iotHook internete bağlı nesneler (IoT) arasında veri transferi yapan web servis ağı
projesidir. Iothook ile Arduino, Raspberry Pi, Android, iOS, Windows Phone, Web Site,
Banana Pi, Orange Pi, Beaglebone, ARM, Pic, Windows, Mac OS X, ve Linux tabanlı
sistemleri birbirine bağlanır. IotHook tüm cihazlarınız arasında kesintisiz veri aktarımı yapan,
internete bağlı nesnelerin kolayca ulaşabileceği iletişim protokollerini destekler. Projemizde
bulut servisi olarak iotHook ‘u seçme nedenimiz şunlardır [5];

• IotHook ücretsizdir,

• IotHook Açık Kaynaktır,

• IotHook hızlıdır,

• Sınırsız Cihaz oluşturabilirsin,

• Sınırsız Sensör ekleyebilirsin,

• Tüm cihazların ile kolayca veri gönderebilirsin (post),

• Tüm iot cihazlarından kolayca veri alabilirsin (get),

• Verilerini gerçek zamanlı takip edebilirsin,

Nesnelerin İnterneti Dersi Dönem Projesi 2- 7


Burak Cem KARA-3192202

• Verilerin için gerçek zamanlı grafik oluşturabilme imkanına sahip olabilirsin

2.5. Emülatör-Simülatör

Projemiz kapsamındaki Emülatör kısmıda tam olarak vize raporumuzda yazdığımız gibi
gerçekleşmiştir. Projede fiziksel bir sensör yapısı kurulmadan nabız verisi, sıcaklık verisi ve
kan basıncı verisi emülatörler üzerinden oluşturulacaktır. Fiziksel sensörlerden veri oluşturmak
yerine emülatör vasıtasıyla oluşturacağımız bu veriler için kullanacağımız emülatör adı Sense
hat’dır. Sense hat Raspberry Pi işletim sistemi üzerine kurulacaktır. Sense hat emülatörü
üzerindeki barların isimleri ve değerleri çalışmamızda sunduğumuz sensörlerin isimleri ve
değerleri ile değiştirilecektir. Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler
iotHook bulut sunucusuna kaydedilecektir. Sense hat emülatörünün projemizde seçme
nedenimiz ise pek çok güzel fikri hızla hayata geçirebilmenizi sağlayan bir Python
kütüphanesine sahip olmasıdır.

Sense Hat, aslında Raspberry Pi geliştiricileri tarafından üretilmiş ve Raspberry Pi


mikroişlemcisinin orijinal olarak adlandırabileceğimiz parçalarından biridir. Adını üzerinde
bulunan ısı, basınç, yönelim gibi sensörlerin bolluğundan almaktadır. Sense hat küçük bir
joystick ve 8x8 bir renkli led gösterge içeren bir fiziksel alettir. Fakat fiziksel aygıt olarak Sense
hat'ı almak istediğimizde maliyet konusunda önemli bir dezavantaj ortaya çıkmaktadır. Çünkü
Sense hat, alıştığımız maliyetlerin düşük olduğu diğer Raspberry Pi ürünlerine göre biraz daha
pahalı bir üründür. Bu sorunu çözmek amacıyla Raspberry Pi Vakfı, online kod editörü Trinket
ile bir iş birliğine giderek doğrudan web üzerinde çalışan Sense hat simülatörünü
oluşturmuşladır. Bu simülatör sayesinde, Sense hat üzerinde çalıştırmayı planladığınız herhangi
bir kodu Trinket ortamında yazıp sonucunu doğrudan emülatörde görebilir, bu sayede fiziksel
bir Sense hat'a yatırım yapmadan önce en azından üzerinde uğraşacağınız fikrin
uygulanabilirliğini görmek için bir prototip inşa edebilme imkanına sahip olabiliriz. [6]

2.6. Haberleşme Yöntemi

Projemizde istemci-sunucu arasında hızlı ve kolay şekilde iletişim kurulmasını sağlamak


amacıyla iotHook bulut sunucusunun rest servisi kullanılmıştır. IotHook Api güncellemesi GET
metodu ile veri göndermeye izin vermektedir. Projemizde veriler Python GET Metodu İle
gönderilecektir. IotHook sitesindeki veri gönderme dokümantasyonunu incelenmiştir. Bu
dokümantasyona göre veriler iotHook a JSON formatında gönderilmelidir. Python ile IoT
sunucularına veri göndermek için kullanacağımız API ENDPOINT

Nesnelerin İnterneti Dersi Dönem Projesi 2- 8


Burak Cem KARA-3192202

adresi https://iothook.com/api/update/ olarak belirtilmiştir. Sunucuya veri gönderebilmek


için api_key bilgisine ihtiyaç vardır. Bu anahtar (key) bilgisine cihaz sayfasından
ulaşabilirsiniz. Bulut sunucusuna veri göndermek için olmazsa olmaz 2 alan vardır.
Bunlar api_key ve field_1 alanlarıdır. Api_key cihaz sahipliğinizi onaylar ve en az bir veri alanı
da olması gerektiğinden field_1 alanı kesinlikle olmalıdır. Bunun yanında diğer alanlar
tanımlanmış bile olsalar gönderilmedikleri zaman None olarak işaretlenmelidir. Veri başarılı
bir şekilde gönderildiğinde veriye dair Json REST çıktısı gelmektedir.
Bunu response.json() metodu ile gerçekleştiriyoruz [5].

Örnek çıktı:

{'device': 17, 'field_1': '6', 'field_2': '3.49', 'field_3': None, 'field_4': None, 'field_5': None,
'field_6': None, 'field_7': None, 'field_8': None, 'id': 502491, 'pub_date': '2019-08-
31T01:07:29.438160', 'remote_address': '88.242.135.167&python-
requests/2.18.4&HTTP/1.1'}

3. PROJE ÇIKTILARI

Bu bölümde gerçekleştirdiğimiz IoT projesinin aşamaları adım adım ekran görüntüleri ile
anlatılmıştır. İlk olarak projede fiziksel bir sensör yapısı kurulmadan nabız verisi, sıcaklık verisi
ve kan basıncı verisi emülatörler üzerinden oluşturulmuştur (şekil 2). Sense hat Raspberry Pi
işletim sistemi üzerine kurulmuştur. Sense hat emülatörü üzerindeki barların isimleri ve
değerleri çalışmamızda sunduğumuz sensörlerin isimleri ve değerleri ile değiştirilmiştir.
Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler iotHook bulut sunucusuna
kaydedilmektedir. Projemin ilk aşaması olarak Sense Hat emülatöründeki bu değişiklikler
yapılmıştır.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 9


Burak Cem KARA-3192202

Şekil 2 : Projede Kullanılan Sense Hat Emülatörünün projeme uyarlanmış hali

Projemin 2 aşaması olarak iotHook bulut sunucusunda düzenlemeler yapılmıştır.


Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler Geany İDE platformunda
Python dili ile yazdığımız kod sayesinde iotHook bulut sunucusuna aktarılıp kaydedilmektedir.
Bu verilerin iotHook bulut sunucusuna düzgün bir şekilde kaydedilip sonrasında okunabilmesi
için önce Şekil 3’teki device detail kısmında alan adları oluşturulmalıdır. Ayrıca verilerin
iotHook bulut sunucusuna yazılabilmesi için şekil 4’teki Device Write Api Key kısmındaki
değeri Geany İDE platformunda yazdığımız koddaki api key = b479a1b78a078b07b846d5ef
kısmına yazdık. Yine Virtual Studio Code IDE platformu ile verileri çektiğimiz uygulamanın
Device Read Api Key kısmı içinde api_key = 77794982845c03ec3d3d14e9 kullanılmıştır (Şekil
4).

Nesnelerin İnterneti Dersi Dönem Projesi 2- 10


Burak Cem KARA-3192202

Şekil 3 : IotHook alan adları oluşturduğumuz device detail bölümü

Şekil 4 : IotHook Device Api Key’leri aldığımız bölüm

Nesnelerin İnterneti Dersi Dönem Projesi 2- 11


Burak Cem KARA-3192202

Aşağıdaki Şekil 5’te ise Sense Hat emülatöründen iotHook bulut sunucuna gönderilen
verileri alanlara ayrılmış şekilde görebilmekteyiz.

Şekil 5 : Gelen verilerin iotHook Showdata kısmındaki gösterimi

Yukarıdaki resimdeki (Şekil 5) verilerin grafik gösterimine iotHook Dashboard


üzerindeki Showchart kısmından erişebiliriz (Şekil 6).

Nesnelerin İnterneti Dersi Dönem Projesi 2- 12


Burak Cem KARA-3192202

Şekil 6 : Gelen verilerin ShowChart grafik gösterimi

Projemizin 3. Aşamasında Emülatör üzerindeki barlarda oynama yaptıkça oluşan


değerleri Geany İDE platformunda Python dili ile yazdığımız kod sayesinde iotHook bulut
sunucusuna aktarıp kaydettirdik. Şekil 7 de gösterdiğimiz kodların detaylı açıklaması ve
işlevleri proje kodu ve işlevleri kısmında anlatılmıştır.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 13


Burak Cem KARA-3192202

Şekil 7 : Geany IDE platformunda yazılan kodların gösterimi

Projemizin 4. aşamasında, verilerin analizini ve anomali olması durumunda veriyi bulut


sunucusun dan çekip uygulamaya bildirim (Notification) olarak gönderecek yapıyı Python
programlama dili ile Windows 10 işletim sistemi üzerine kurduğumuz Visual Studio Code
İDE’si üzerinde gerçekleştirdik. Şekil 8 ve Şekil 9 da gösterdiğimiz kodların detaylı açıklaması
ve işlevleri, proje kodu ve işlevleri kısmında anlatılmıştır.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 14


Burak Cem KARA-3192202

Şekil 8 : Visual Studio Code IDE üzerinden yapılan uygulama gösterim_1

Şekil 9 : Visual Studio Code IDE üzerinden yapılan uygulama gösterim_2

Nesnelerin İnterneti Dersi Dönem Projesi 2- 15


Burak Cem KARA-3192202

Projemizin son aşamasında ise hastanın telefonuna bildiri göndermek için OneSignal
push servisi platformu kullanılmıştır. OneSignal’in sundupu http post metotu kullanarak
OneSignal sistemine kayıt yaptırmış olan hastaya uyarı gönderilir. Android studio ile
oluşturduğumuz application sayesinde hastanın OneSignal sistemine kaydolması
sağlanmaktadır. Şekil 10 da bu uygulamaya gelen uyarının gösterimi mevcuttur.

Şekil 10 : Hasta uyarı uygulaması bildirim ekranı

Nesnelerin İnterneti Dersi Dönem Projesi 2- 16


Burak Cem KARA-3192202

4. PROJE KODU VE İŞLEVLERİ

4.1 Geany İDE Bölümü

Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler Geany İDE platformunda
Python dili ile yazdığımız kod sayesinde iotHook bulut sunucusuna aktarılıp kaydedilmektedir.
Geany İDE üzerinden oluşturduğumuz Python kodunun tamamı aşağıdadır.

import json
import datetime
import time
import requests
import pprint
from sense_emu import SenseHat

sense = SenseHat()
print (sense.temp)
print (sense.humidity)
print (sense.pressure)

pprint.pprint(" Program duzgun calismaktadir.")


pprint.pprint(" iothook bulut sunucusuna 30 saniyede 1 veri aktarimi
saglanacaktir.")
while True:
time.sleep(30)
temp = sense.temp
pulse = sense.humidity
blood_pressure = sense.pressure

pprint.pprint(datetime.datetime.now())
data = {
'api_key' : 'b479a1b78a078b07b846d5ef',
'field_1' : round(temp,2),
'field_2' : round(blood_pressure,2),
'field_3' : round(pulse,2),
}

Nesnelerin İnterneti Dersi Dönem Projesi 2- 17


Burak Cem KARA-3192202

response =
requests.request('POST','https://iothook.com/api/update',
params=data, headers= {'Content-Type':'application/json'})
pprint.pprint(response.text)

İlk olarak kod içerisinde kullandığımız datetime, time, requests, sense_emu


vb. gibi Python modüllerini kodun içerisine import ediyoruz. Daha sonra sense_emu modülünü
kullanarak SenseHat sınıfından bir nesne yaratarak emülatörde yer alan değerleri bu nesne
üzerindeki değişkenleri (temp, humidity, pressure) kullanarak kodun içerisinde bu değerlere
ulaşıyoruz. Time modülünün içerisindeki sleep methodunu kullanarak time.sleep(30)kodu
ile kodun çalışması 30 sn boyunca durduruluyor ve böylelikle de iotHook’a veri gönderme
işlemi periyodik olarak devam ediyor. Bu kısımda itibaren yukarıda kod bütünü parçalara
ayırılarak kod parçalarının işlevleri kısım kısım açıklanmıştır.

Aşağıdaki kod ile sense_emu modülündeki değişkenleri kendi kodumun içerisindeki


local değişkenlere atadım.

temp = sense.temp
pulse = sense.humidity
blood_pressure = sense.pressure

Aşagıdaki kod parçasında ise iotHook’a göndereceğimiz veriler için dictionary


değişkeni oluşturuyoruz. Bunu yapmadaki amacımız verilerin key ve değerlerini iotHook‘a
göndermektir.

pprint.pprint(datetime.datetime.now())
data = {
'api_key' : 'b479a1b78a078b07b846d5ef',
'field_1' : round(temp,2),
'field_2' : round(blood_pressure,2),
'field_3' : round(pulse,2),

Son olarak aşağıdaki kod parçası sayesinde iotHook‘un bize sunduğu HTTP POST
metotu ile yukarıdaki koda sayesinde Sense Hat barlarından aldığımız değerleri iotHook’un
sistemine gönderebiliyoruz.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 18


Burak Cem KARA-3192202

response = requests.request('POST','https://iothook.com/api/update',
params=data, headers= {'Content-Type':'application/json'})

pprint.pprint(response.text)

4.2 Visual Stuido Code Bölümü

Visual Studio Code İDE’si üzerinde Python programlama dilini kullanarak, verilerin
analizini yaparak, anomali olması durumunda veriyi bulut sunucusun dan çekip uygulamaya
bildirim olarak gönderecek kod aşağıdadır. İlk kod parçasında Device Read Api Key kısmı
içinde api_key = 77794982845c03ec3d3d14e9 kullanıldığı görüyoruz. Bu api_key iotHook’tan
veri çekilebilmesi amacıyla kullanılmıştır. Kodun devamından ise iotHook’un http get
methoduna kullanarak iotHook sunucuna gönderdiğimiz son 10 değeri response.json() kodu ile
alarak resp_arr array tipinde bir local değişkene atandığını görüyoruz. Daha sonra bu değişken
içerisinde iterasyon yapılıp her bir değişken için ilgili keyleri kullanarak son 10 değerleri her
bir değişken için farklı arraylere atılır. Bu işlem sleepy methodu sayesinde
(time.sleep(60)) 60 sn bir yapılmaktadır.

api_key = "77794982845c03ec3d3d14e9"
result_count = 10

response = requests.request('GET','https://iothook.com/api/device/?api_key
={}&results={}'.format(api_key,result_count),
headers= {'Content-Type':'application/json'})
resp_arr = response.json()
body_temperatures = []
blood_pressures = []
pulses = []
for resp in resp_arr:
#print(resp)
body_temperatures.append(float(resp["field_1"]))
blood_pressures.append(float(resp["field_2"]))
pulses.append(float(resp["field_3"]))
anomaly_check(body_temperatures, 38, 35, "Vücut sıcaklığı")
#anomaly_check(blood_pressures, 220, 0, "Kan basıncı")
#anomaly_check(pulses, 140, 60, "Nabız")
error_count = error_count + 1
time.sleep(60)

Nesnelerin İnterneti Dersi Dönem Projesi 2- 19


Burak Cem KARA-3192202

Aşagıdaki anomaly_check methodu ile yazılan kod bölümünde, Sense Hat


emülatörünün iotHook bulut sunucusuna gönderdiği ve burdan alınan son 10 değer içerisinde
daha önce anomali durumunu oluşturacak eşik değerlerini aşacak ya da altında kalacak bir değer
oluştuğunda bu durumu hastaya ileten kod parçasını görmekteyiz. Oluşan anomali durumunu
hastaya bildirme işlevini gerçekleştiren kod ise send_notification metodudur. Burada hastanın
telefonuna bildiri göndermek için OneSignal push servisi platformu kullanılmıştır.
OneSignal’in sunduğu http post metodu kullanılarak OneSignal sistemine kayıt yaptırmış olan
hastaya uyarı gönderilmektedir.

def anomaly_check(values, max_threshold, min_threshold, alias):


for value in values:
if value > max_threshold:
print("{} değeriniz çok yüksek - {}".format(alias, value))
send_notification("{} değeriniz çok yüksek = {}".format(alias, value))
break
elif value < min_threshold:
print("{} değeriniz çok düşük - {}".format(alias, value))
send_notification("{} değeriniz çok düşük = {}".format(alias, value))
break

one_signal_api_key = "ODMzZmMyMjItMzIyNi00NzkzLWFhNTAtYjhlODAxZmU3YmI3"
one_signal_app_id = "30f80ec9-e1b6-4c31-9ffb-5b88971db213"

def send_notification(message):
header = { "Content-Type": "application/json; charset=utf-8",
"Authorization": "Basic {}".format(one_signal_api_key)}

payload = { "app_id": one_signal_app_id,


"included_segments": ["Active Users", "Inactive Users"],
"contents": {"en": message}}

req = requests.post("https://onesignal.com/api/v1/notifications", headers=head


er, data=json.dumps(payload))

print(req.status_code, req.reason, req.text)

Nesnelerin İnterneti Dersi Dönem Projesi 2- 20


Burak Cem KARA-3192202

4.3 Android Studio Bölümü

Android studio ile oluşturduğumuz application sayesinde hastanın OneSignal sistemine


kayıt olması sağlanmaktadır. Bu işlevi gerçekleştiren kod aşağıdadır.

package com.example.iot_project_notification;

import android.app.Application;

import com.onesignal.OneSignal;

public class ApplicationClass extends Application {


private static final String ONESIGNAL_APP_ID = "30f80ec9-e1b6-4c31-9ffb-
5b88971db213";

@Override
public void onCreate() {
super.onCreate();

OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE,
OneSignal.LOG_LEVEL.NONE);

// OneSignal Initialization
OneSignal.initWithContext(this);
OneSignal.setAppId(ONESIGNAL_APP_ID);
}

5. SONUÇ

Nesnelerin interneti dersi proje konusu kapsamında 19. numaralı konu olan kişisel sağlık
verilerinin takip edilmesini sağlayacak bir yapının kurulması istenilmiştir. Ders kapsamında
anlatılan ve IoT projelerinde olması gereken ve beklenen en temel özellikler projede bir
mikroişlemci veya mikrodenetleyicinin olmasıdır. Ayrıca bu mikroişlemci veya
mikrodenetleyiciye bağlı olarak çalışan sensörler ve bu sensörlerin ürettiği verilerin bulut
sunucuna aktarılması, son olarak ise bu mikroişlemci veya mikro denetleyicinin herhangi bir
anomali olması durumunda bu durumu hastaya bir mobil uygulama yardımıyla bildirilmesi
istenilmektedir. Projemde sensörler olarak ise nabız, kandaki oksijen-şeker miktarı, kan basıncı,
ivme-dönü ölçer ile düşme kontrolü vb. algılayıcıların kullanılması beklenmiştir. Projemi
tasarlarken öncelikle bir IoT projesinin olmazsa olmazı olacak bütün gereksinimlerin
karşılanmasına tam olarak itina gösterilmiştir.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 21


Burak Cem KARA-3192202

Projem eğer fiziksel bir ortamda gerçekleşseydi sensörleri denetleyen, verilerin analizini
yapan bir mikroişlemci olarak Raspberry Pi kullanılacaktı. Raspberry Pi’nin üzerinde bir wifi
modülü ve MikroSD kart bulunacaktı ve bu sayede Raspberry Pi’nin diğer cihazlarla veya
bileşenlerle iletişim kurabilmesi sağlanacaktı. Bunun yanında projemiz yine eğer fiziksel olarak
gerçekleştirilseydi anlık olarak kalp atış hızını ve nabzı ölçebilmek için Sparkfun nabız sensörü,
vücut sıcaklığı ölçebilmek için DS18b20 sensörü, kan basıncı sensörü olarak ise MPX5700
kullanılacaktı. Fakat projemi simüle edilerek gerçekleştirdim.

Projemiz simüle edilerek gerçekleştiği için tüm bu sensörler Raspberry Pi iletim sistemi
üzerine kurulan Sense Hat emülatörü üzerinde ayarlanmıştır. Projede bulut sunucusu olarak
iotHook bulut sunucusu kullanılmıştır ve Sense Hat emülatöründen gelen tüm veriler bu bulut
sunucusuna kaydedilmiştir. Sense Hat emülatörü üzerindeki sensörlerden oluşan veriler
Rasperry Pi işletim sistemi üzerindeki Geany IDE platformu üzerinde Python ile kodladığımız
kodlar sayesinde iotHook sunucuna gönderilmektedir. Verilerin iotHook sunucundan çekildiği
ve analizinin yapıldığı işlem ise Visual Studio Code İDE’si üzerinde Python programlama dilini
kullanarak yapılmıştır. Yine anomali durumundaki uyarılarda bu kod sayesinde
gerçekleşmektedir.

Yukarı bahsettiğim gerçekleşen proje aşamalarını ve vize raporunda gerçekleştirmeyi


düşündüğüm proje aşamalarındaki farkılıkları mukayese ettiğim de genel olarak büyük bir fark
gözlemlenmemektedir. İki rapor arasında oluşan tek fark ise vize raporumda, verilerin analizini
ve anomali olması durumunda veriyi bulut sunucusun dan çekip uygulamaya bildirim
(Notification) olarak gönderecek yapının Raspberry Pi işletim sistemi üzerindeki olan IDE’ler
kullanılarak yapılacağından bahsetmiştim. Fakat bu durum Windows 10 işletim sistemi
üzerinde kurduğum Visual Studio Code İDE’si üzerinde yine Python programlama dili
kullanılarak gerçekleştirilmiştir. Bu durumunda projenin genel akışına önemsenecek bir fark
getirmemiştir. Bu durumun dışında projemin diğer bütün aşamaları ara sınav raporumda
anlattığım gibi gerçekleştirilmiştir.

Sonuç olarak, projem kapsamında yukarıda söylediğim tüm bu yapılar sayesinde


Nesnelerin İnterneti dersi kapsamından benden beklenen IoT projesi olabilme şartları simüle
edilerek de olsa tam olarak karşılanmış olacaktır. Bu durumla ilgili daha detaylı açıklama ise 6.
bölümdeki proje çalışması neden bir ıot uygulamasıdır kısmında yapılmıştır.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 22


Burak Cem KARA-3192202

6. PROJE ÇALIŞMASI NEDEN BİR IoT UYGULAMASIDIR

Bu bölümde bir projenin IoT projesi olarak sayılabilmesi açısından sahip olması gereken
5 temel değer oluşturma katmanlarının bizim projemizde sağlanıp sağlanamadığı konusu
irdelenmiştir.

Projemizde, 5. Katman (sayısal servisler) olarak kullanıcıya sunulması gereken bir mobil
uygulama servisi mevcuttur. 4. Katman olarak kullanıcılardan elde edilecek verileri analiz
ederek herhangi bir anomali durumunda kullanıcının uyarılmasını sağlayan bir masaüstü
uygulaması da mevcuttur. Bunun yanında IoT projesinde olması gereken katman 1’de ele alınan
kullanıcıya yarar sağlayacak bir yapının kurulma zorunluluğuda, projemin bireylerin sağlık
aktivitelerini sürekli olarak takip eden bir yapı olması neticesiyle bu katmandaki beklentiler de
tam olarak karşılanmıştır. Katman 2’deki belirtilen ve bir IoT projesinde olması gereken anlık
veri toplayabilen sensörlerin olması zorunluluğu da Sense Hat emülatörü üzerinde oluşturulan
sıcaklık sensörü, nabız sensörü, kan basıncı sensörü ile karşılanmıştır. Son olarak ise katman 3
olarak geçen ve IoT projesindeki tüm cihazların birbiri ile sürekli olarak iletişim halinde kalma
gerekliliği, projem simüle bir ortamda gerçekleşmesi vesilesiyle bilgisayarlara kurulu olan
sanal makine üzerinde çalışan sistemler ve masaüstü uygulamaları bilgisayarın Ethernet kartı
sayesinde, hasta uyarı sisteminin kurulu olduğu telefonlarında yine akıllı telefonlar olması
vesilesiyle 3G, 4G veya wifi teknolojileri sayesinde bu katmandaki tüm beklentilerde
karşılanmıştır.

Sonuç olarak, projemiz IoT projelerinde olması gereken bu 5 katmandaki tüm beklentileri
ve olması gereken IoT bileşenlerini karşılamaktadır. Projemiz farklı ortamlarda bulunan birçok
makinenin birbiri ile iletişim kurabilmesi, verilerin depolandığı bir yapının olması ve
gerektiğinde bu sistemlerin yine bir insanın müdahalesine gerek kalmadan veriler üzerinde
işlem ve analiz yapabilmesi gibi birçok eylemi otonom şekilde gerçekleştirebilmesinden dolayı
tam olarak bir IoT projesi olarak değerlendirilmektedir.

Nesnelerin İnterneti Dersi Dönem Projesi 2- 23


Burak Cem KARA-3192202

7. KAYNAKÇA

[1] Vikipedi, «Raspberry Pi,» [Çevrimiçi]. Available: https://tr.wikipedia.org/wiki/Raspberry_Pi.


[Erişildi: 02 12 2020].

[2] «Python,» [Çevrimiçi]. Available: https://docs.python.org/3/faq/general.html. [Erişildi: 22 11


2020].

[3] «Wiki,» [Çevrimiçi]. Available: wikipedia.org/wiki/Tümleşik_geliştirme_ortamı. [Erişildi: 24 11


2020].

[4] «Visual Studio Code,» [Çevrimiçi]. Available: https://code.visualstudio.com/]. [Erişildi: 01 12


2020].

[5] «iotHook,» [Çevrimiçi]. Available: https://iothook.com/en/docs/why-iothook.html. [Erişildi: 29


11 2020].

[6] D. Honess, «Sense HAT emulator,» 09 08 2016. [Çevrimiçi]. Available:


https://www.raspberrypi.org/blog/sense-hat-emulator/. [Erişildi: 25 11 2020].

Nesnelerin İnterneti Dersi Dönem Projesi 2- 24

You might also like