NodeRed – UYGULAMA 9: Sensör Değerlerini Veritabanına Kaydetmek

Uygulama 7’de DHT11 sensörünü okuyarak sıcaklık ve nem grafiği çizdirmiştik. Bu uygulamada ise grafiğini çizdirdiğimiz bu değerleri MariaDB (MySQL) veri tabanında depolayacağız.

Öncelikle kitabın ilgili bölümünde anlatıldığı gibi MariaDB veri tabanı sunucusunu Raspberry Pi’a kurun ve mariadb konsolunu aşağıdaki gibi çalıştırarak bir veri tabanı ve tablo oluşturun. Veritabanımızın adı sensorler, tablomuzun adı dht11 ve tablonun içindeki alanlar sırasıyla zaman, sensor, deger seklinde olacak.

Yukarıdaki SQL komutları ile veri tabanı ve tablo oluşturduk. GRANT komutu ile sensorler veri tabanına erişebilecek pi adında bir MariaDB kullanıcısı yarattık ve parolasını da raspberry olarak belirledik. Daha sonra bu bilgileri ilgili node’u yapılandırmak için kullanacağız. zaman alanı için tanımladığımız kayıt tipi TIMESTAMP’dir ve DEFAULT (varsayılan) değeri olan CURRENT_TIMESTAMP ile kaydın eklenmesi sırasındaki zamanı otomatik olarak kaydedecektir. Burada gerçekleştirilen işlemlerin detaylarını kitabın “Veri tabanı sunucusuna bağlanmak” adlı başlığında bulabilirsiniz.

Aşağıdaki akış şemasını oluşturmadan önce node-red-node-mysql adlı node’u yükleyin. Bu node veri tabanı sunucusuna bağlanmamızı ve SQL sorgu cümleleri (query) göndermemizi sağlayacak. Uygulama 7’de gerçekleştirdiğimiz akışı hiç değiştirmeden çalışma alanına ekleyin. Ardından aşağıda olduğu gibi birer adet function, mysql ve debug node’u seri biçimde bağlayın. Sicaklik-Nem adlı node’un çıkışlarını SQL sorgu cümlelerimizi oluşturacak olan function node’un girişine aşağıdaki gibi bağlayın.

SQL isimli function node’un JavaScript kodu aşağıda yer almaktadır. Bu kodu function node’una yazın.

Function node’u girişine uyglanan her iki mesajın da topic özelliği vardır. Sicaklik-Nem adlı node’un birinci çıkışından gelen msg nesnesinin topic değeri temp ve ikinci çıkışından gelenin ki ise humudity’dir. Bu topic değerleri veri tabanına eklediğimiz kayıttaki değerin hangi sensöre ait olduğunu belirtecek. Yukarıdaki kod sensor isimli tablo alanına topic değerini (temp veya humidity), değer alanına da payload’u yerleştirerek bir SQL sorgu cümlesi üretir. Ürettiği SQL cümlesini de msg.topic özelliği ile mysql node’una girdi olarak gönderir. Yukarıdaki JavaScript kodu ile üretilen SQL cümlesi şuna benzemektedir:

Şimdi de veri tabanına bağlantı kurarak SQL cümlesini gönderecek mysql node’unu yapılandıralım. Bunun için node’un özellikler panelini açarak aşağıdaki resimdeki gibi yeni bir MySQLDatabase tanımlayın.

Yapılandırmayı tanımlamak için kalem işaretine tıklattığınızda aşağıdaki gibi bir yapılandırma ekranı görüntülenir. Bu ekranda sırasıyla şu tanımlamaları yapın:

  1. Host: 127.0.0.1
  2. Port: 3306
  3. User: pi
  4. Password: raspberry
  5. Database: sensorler

Yapacağımız tüm işlemler bu kadar. Ctrl+d tuş bileşimine basarak akışı deploy edelim. Inject node, akışı tetiklediğinde (veya başındaki kutucuğa tıklatarak elle tetiklediğinizde) Raspberry Pi’ın GPIO port’una bağlı sensörden değerler okunarak hem grafikler güncellenecek hem de sensör değerleri veri tabanına kaydedilecektir. Eklediğimiz akış kolunun sonundaki debug node’un çıktısında çalıştırılan SQL sorgusunu ve sunucunun cevabını görebilirsiniz. MariaDB’den dönen cevapta affectedRows sayısının 1 olduğunu yani yeni bir kayıt eklendiğini teyit edebiliriz.

Dilerseniz mariadb istemcisini kullanarak tablodaki tüm kayıtları listeleterek kayıtların gerçekleşip gerçekleşmediğini görelim.

Sensör Verileri için Uygun Veri tabanı ve Görselleştirme

Zamana bağlı sensör değerlerini saklamak ve gerektiğinde yüksek başarımda sorgulamak için zaman serisi veri tabanları (Time Series Databases) tercih edilir. TSD kullanmak özellikle on binlerce satır veri biriktiğinde önem kazanır. Bu veri tabanları timestamp türlü verileri çok hızlı şekilde sorgulayabilir ve üzerinde işlem yapabilir. Yüksek miktarda sensör verisini kaydetmek için daha çok InfluxDB, TimeScaleDB ve Prometheus gibi TSD veri tabanları tercih edilir. Bu veri tabanlarında kayıtlı verileri görselleştirmek için Grafana adlı uygulama çokça tercih edilir.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.