Real Time Iot Project

Real Time Iot Project

Akıllı şehirler, akıllı evler, akıllı tarım ve daha birçok alana duyduğumuz Nesnelerin İnterneti(Internet Of Things(IOT)) hayatlarımıza girdi. Dünyada akıllı tarım uygulamalarını takip etmemiz ve bunları ülkemizdeki her çiftinin kullanabileceği ücretsiz uygulamalarla tarımı daha verimli hale getirmemiz gerekiyor. Fazladan 1 damla su bile israf etmememiz gereken günlerdeyiz. Akıllı tarım yöntemi ile çiftçiler, tarlalarını tablet ya da telefondan kolay bir şekilde kontrol edebilecek ve sulamaya kadar birçok işlemi uzaktan halledebilecektir.
Peki bunun için neler yapabiliriz? Elimizi taşın altına koyabiliriz diyerek bu projeye başladım. Bu projede ortam sıcaklığını ve nemini anlık ölçüp mosquitto, kafka, spark, postgressql ve grafana kullanarak bu verileri kullanılabilir hale getirmeye çalıştım.

Hadi başlayalım!!!

Data Pipeline

Malzemeler:
-DHT11 (ısı ve nem ölçer)
-ESP8266
-Dişi-dişi jumper kablo
-Usb kablo

DHT11 projede kullandığım ısı ve nem ölçer sensör. Herhangi bir elektronik mağazasından temin edebilirsiniz. 15 TL ye satın aldım.

ESP8266 modülü internete bağlanıp veri yükleme ve veri çekmeye, projelerinizi internet üzerinden kontrol edebilmenize imkan tanıyan ufak boyutlara sahip, Espressif System tarafından SoC (System on Chip) olarak geliştirilen çipi üzerinde barındıran modüldür. Daha ayrıntılı bilgi için bu kaynağı inceleyebilirsiniz.

https://medium.com/@zaferaltun/esp8266-wifi-modul-nedir-nasil-kullanilir-neler-yapabiliriz-9216886ef604
Jumper Kablo DHT11 ve ESP8266 arasında iletişim için gerekli kablo dişi-dişi olanını kullandım.Fiyatı 7-10 TL arasında değişiyor.

USB kablo ESP8266 ile bilgisayar arasında iletişim kurmak için kullandım.

Malzemeler tamamlandı şimdi projemizin akış diyagramında hangi teknolojileri kullandığımıza bakalım.

Mosquitto

Mosquitto (open source) açık kaynak MQTT Broker yazılımıdır. Diğer haberleşme yapılarına göre basit oluşu ve minimum kaynak tüketmesi sebebiyle“machine-to-machine” (M2M) makineden makineye veri iletiminde ve (IOT) “Internet of Things” İnternete bağlı nesnelerin mesajlaşmasında tercih edilmektedir. Mosquitto kurulumu için bu kaynakları kullanabilirsiniz.
https://medium.com/@iotmqtt/mqtt-mosquitto-kurulumu-e9ac57e42e59
https://mosquitto.org/download/

Apache Kafka

Linkedln tarafından geliştirilen bu framework yapısı şuan Apache bünyesinde yer almaktadır. Büyük verileri anlık olarak kaydeden, depolayan ve analiz eden bu açık kaynak kodlu framework büyük verilerin hızlı biçimde analiz edilmesi ve depolanması için kullanılmaktadır. Apache Kafkanın ürünleri arasında Apache ZooKeeper yer almaktadır. Apache yazılım vakfı tarafından geliştirilen bir yazılım projesi olan Apache Zookeeper, büyük dağıtık sistemler için kullanılan dağıtık bir yapılandırma hizmetidir. Üst düzey bir Apache projesi olan ZooKeeper, adlandırma katkı ve senkronizasyon hizmeti yapmak adına kullanılan bir hiyerarşik anahtar değer deposudur. Genellikle dağıtık sistemler için kullanılmaktadır. Kurulumu için bu kaynağı kullanabilirsiniz.
https://medium.com/teknopar-akademi/kafka-installation-3ac651169d0b
https://svn.apache.org/repos/asf/kafka/site/082/quickstart.html

Apache Spark

Apache Spark, büyük veri kümelerindeki görevleri hızlı bir şekilde gerçekleştirebilen, aynı zamanda veri işleme görevlerini birden çok bilgisayara tek başına dağıtabilen veya diğer dağıtılmış bilgi işlem araçlarıyla birlikte dağıtabilen bir veri işleme motorudur. Bu iki nitelik, Büyük Veri depoları arasında hızla ilerlemek için gerekli olan bilgi işlem gücünün düzenlenmesini sağlayan büyük veri ve makine öğrenimi dünyalarının anahtarıdır. Kaynakları inceleyebilirsiniz.
https://medium.com/@sinemhasircioglu/apache-spark-kurulumu-windows-4d411a5c9b43
https://teknoloji.org/apache-spark-nedir-nasil-calisir/
https://medium.com/5bayt/apache-spark-nedir-ne-i%C5%9F-yapar-5797c28eb95

Postgres SQL

PostgreSQL, güçlü özellikler ve avantajlara sahip, açık kaynaklı ve tamamen ücretsiz nesne ilişkisel veri tabanı sistemidir. SQL dilinin güvenlik, depolanabilirlik ve ölçeklendirilebilme özelliklerinden faydalanan PostgreSQL, birçok alanda veri tabanı yöneticisi olarak da kullanılmaktadır.
https://kerteriz.net/postgresql-veritabani-windows-kurulumu/

Apache Grafana

Grafana, çok platformlu bir açık kaynak analitiği ve etkileşimli görselleştirme web uygulamasıdır. Desteklenen veri kaynaklarına bağlandığında web için çizelgeler, grafikler ve uyarılar sağlar. Kurulumu yaptıktan sonra kullandığınız tarayıcıdan localhost:3000 ile erişebilirsiniz.
https://grafana.com/docs/grafana/latest/installation/

Kullandığım teknolojiler açık kaynak kodlu ve ücretsizdir. Windows üzerine kurulumları kullandım şimdilik ama Vmware, Docker, Oracle VirtualBox üzerine kurup programları kullanabilirsiniz.

Programları kurduk ve ortamımızı hazırladık.O zaman May the force be with you young padawan!

Mosquitto servisini çalıştıralım.
1.Powershell’i yönetici olarak çalıştıralım. Dosya yolunu mosquittoya götürelim.Enter’a basalım.

cd '..\..\Program Files\mosquitto\'

2.Ardından aşağıdaki kodu yazıp Enter’a basalım.

sc start mosquitto 

Mosquittoyu çalıştırdık Powershell’i kapatabiliriz.

Zookeeper Server’ı çalıştıralım.
Kafka dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca ZooKeeper Server çalışacaktır. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

Windows üzerine kurduğum için:

bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

Linux’a kurduysanız:

bin/zookeeper-server-start.sh ./config/zookeeper.properties

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

Kafka Server’ı çalıştıralım.
Yine Kafka dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca Kafka Server çalışacaktır. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.
Windows üzerine kurulum için:

bin\windows\kafka-server-start.bat .\config\server.properties

Linux’a kurduysanız:

bin/kafka-server-start.sh config/server.properties

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

DHT11’den Mosquitto’ya
Python kodlarını indirdiğimiz dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca DHT11 ile Mosquitto konuşmaya başlayacak ve aşağıdaki görselde olduğu mesaj gönderdiğini göreceğiz. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

python iot.py

Kafka Producer Topic oluşturalım.
Yine Kafka dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca Kafka producer grogu isimli topiğini oluşturmuş olacağız. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic grogu

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

Kafka Consumer Topic oluşturalım.
Yine Kafka dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca Kafka consumer topiğini oluşturmuş olacağız. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic grogu

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

Mosquitto ‘dan Kafka’ya
Mosquitto’dan Kafka’ya iletişimi sağlayacak dosya olan python kodlarını indirdiğimiz dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca Mosquitto Kafka ile konuşmaya başlayacak ve aşağıdaki görselde olduğu mesaj gönderdiğini göreceğiz. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

python mqttToKafka.py

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

İndirdiğimiz PostgresSQL pgadmin4 açıp “iot_database” adında bir database oluşturalım. Ardından “iot_data” adlı bir tablo oluşturalım

create table iot_data(
starttime        timestamp without time zone,
endtime            timestamp without time zone,
device_name        varchar(10),
avg_temperature    integer,
avg_humiditiy    integer
);

Database ve tablomuzu oluşturduğumuza göre bir sonraki aşamaya geçebiliriz.

Kafka’dan Spark’a Submit
Kafka’ya gelen mesajları Spark’a submit edelim. İletişimi sağlayacak dosya olan python kodlarını indirdiğimiz dosya dizinine gidip kırmızı okla işaretlediğim yere cmd yazıp Enter’a basalım. Bize yeni bir komut istemci açacaktır burada aşağıdaki kodu yazıp Enter’a basınca Kafka ile Spark konuşmaya başlayacak ve aşağıdaki görselde olduğu mesaj gönderdiğini göreceğiz. Bu istemcileri kapatmıyoruz açık kalması gerekiyor.

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.0 spark_postgres.py

Çıktımız aşağıdaki görseldeki gibi olmalıdır.

Tekrar PostgresSQL pgAdmine gelip
iot_database içine girip aşağıdaki komutu çalıştıralım.

select * from iot_data;


Verileri eklendiğini göreceksiniz.

PostgresSQL’den Grafana’ya
Projenin son aşaması olan verileri görselleştirme kısmına geldik. Bunun için Apache Grafana kullandım.
Örnek dashboard yapmak için birçok kaynak mevcut bunlardan istediğiniz şekilde verileri görselleştirebilirsiniz.
https://www.youtube.com/watch?v=oPumWaoNw5s&t=1397s
https://www.youtube.com/watch?v=4qpI4T6_bUw&t=254s
Dashboardu bu şekilde düzenledim.

İlerleyen zamanda anlık verileri işlenebilir hale getirdiğim bu projenin üzerinde real time anomaly detection yapmayı planlıyorum.