Nesnelerin İnterneti (IoT) projelerinizdeki sensör verilerini anlamlandırmakta zorlanıyor musunuz? The Things Network (TTN) üzerinden gelen ham verileri gerçek zamanlı ve etkili bir şekilde görselleştirmek, projelerinizin başarısı için kritik öneme sahiptir. Bu makalede, TTN verilerini Grafana ile nasıl kolayca ve gerçek zamanlı olarak görselleştirebileceğinizi adım adım keşfedeceğiz.
Günümüz dünyasında, çevremizdeki cihazlardan gelen veri akışı her geçen gün artıyor. Özellikle Nesnelerin İnterneti (IoT) teknolojileri sayesinde, akıllı şehirlerden tarıma, endüstriyel otomasyondan kişisel sağlık takibine kadar pek çok alanda sensörler aracılığıyla büyük miktarda veri toplanmaktadır. Ancak bu ham veriler, tek başlarına bir anlam ifade etmeyebilir. Örneğin, bir tarladaki toprağın nem oranı, bir fabrikanın üretim hattındaki sıcaklık veya bir şehirdeki hava kalitesi sensöründen gelen sayısal değerler, bir listeye döküldüğünde yorumlanması oldukça zordur. İşte bu noktada veri görselleştirme devreye giriyor.
Veri görselleştirme, karmaşık veri kümelerini grafikler, tablolar ve gösterge panelleri (dashboardlar) aracılığıyla anlaşılır ve yorumlanabilir hale getirme sürecidir. IoT projelerinde veri görselleştirmenin kritik olmasının başlıca nedenleri şunlardır:
- Anlamlandırma ve İçgörü Kazanımı: Görselleştirmeler, veri içindeki kalıpları, eğilimleri ve anormallikleri hızla tespit etmenizi sağlar. Böylece, ham verilerden anlamlı bilgiler ve içgörüler elde edebilirsiniz. Örneğin, bir sıcaklık sensörünün verilerini bir zaman grafiği üzerinde görmek, sıcaklık dalgalanmalarını veya ani yükselişleri kolayca fark etmenizi sağlar.
- Gerçek Zamanlı İzleme: Birçok IoT uygulaması, gerçek zamanlı izleme gerektirir. Örneğin, bir soğuk zincir taşımasında ürünlerin sıcaklığının belirli bir aralıkta kalıp kalmadığını anında bilmek hayati önem taşır. Grafana gibi araçlar, canlı veri akışını gösterge panellerinde anlık olarak sunarak, durumu kontrol altında tutmanıza yardımcı olur.
- Problem Tespiti ve Hızlı Müdahale: Görselleştirmeler sayesinde, sistemdeki olası arızalar veya istenmeyen durumlar hızla tespit edilebilir. Örneğin, bir makinenin titreşim seviyesinde ani bir artışın grafik üzerinde belirginleşmesi, potansiyel bir arızanın habercisi olabilir ve erken müdahaleyi mümkün kılar.
- Karar Alma Süreçlerini Destekleme: Net ve anlaşılır görseller, yöneticilerin veya operatörlerin verilere dayalı daha bilinçli ve hızlı kararlar almasını sağlar. Performans eğilimlerini, kaynak kullanımını veya çevresel koşulları görselleştirmek, operasyonel verimliliği artırmak için önemli bilgiler sunar.
- Paylaşım ve İletişim Kolaylığı: Görselleştirilmiş veriler, teknik olmayan kişilerle bile kolayca paylaşılabilir ve açıklanabilir. Bir gösterge paneli, projenin veya sistemin genel durumunu tek bir bakışta özetleyebilir, bu da ekip içi iletişimi ve paydaşlarla olan bilgi alışverişini basitleştirir.
The Things Network (TTN), LoRaWAN tabanlı IoT cihazlarınızdan veri toplamak için harika bir platform sunar. Ancak TTN konsolu, gelişmiş görselleştirme yetenekleri açısından sınırlıdır. İşte bu noktada Grafana devreye girer. Grafana, çeşitli veri kaynaklarından gelen verileri bir araya getirerek güçlü ve etkileşimli gösterge panelleri oluşturmanızı sağlayan açık kaynaklı bir platformdur. TTN ile entegre edildiğinde, LoRaWAN cihazlarınızdan gelen sensör verilerini gerçek zamanlı grafikler, ölçerler, tablolar ve uyarılarla zenginleştirebilir, böylece projelerinizin tam potansiyelini ortaya çıkarabilirsiniz. Bu entegrasyon, yalnızca veri izleme değil, aynı zamanda veri analizi ve operasyonel verimlilik açısından da size büyük avantajlar sağlayacaktır.
The Things Network (TTN) Veri Akışı Nasıl Çalışır?
The Things Network (TTN), küresel ve topluluk odaklı bir LoRaWAN ağıdır. Milyonlarca cihazın düşük güç tüketimiyle uzun mesafeler üzerinden veri göndermesine olanak tanır. TTN’in temel amacı, IoT cihazlarının internete bağlantısını kolaylaştırmak ve veri toplama sürecini basitleştirmektir. Peki, bir sensörden TTN’e ve oradan da görselleştirme aracınıza veri akışı nasıl gerçekleşir?
TTN veri akışını anlamak, görselleştirme sürecinizin temelini oluşturur. Bu süreç genellikle aşağıdaki adımları içerir:
- IoT Cihazı (End Device): Sürecin başlangıç noktasıdır. Bu cihazlar genellikle sıcaklık, nem, konum, basınç gibi fiziksel ortam verilerini toplayan sensörler içerir. Bu cihazlar, LoRaWAN protokolünü kullanarak verileri radyo dalgaları aracılığıyla kablosuz olarak gönderir. Düşük güç tüketimi ve uzun menzil, LoRaWAN’ın temel avantajlarıdır.
- LoRaWAN Gateway: IoT cihazından gelen LoRa sinyallerini alır. Gateway, bu radyo frekansı sinyallerini internet üzerinden TTN’in ağına iletilmek üzere IP paketlerine dönüştürür. Bir gateway, genellikle birden fazla cihazdan gelen verileri aynı anda dinleyebilir ve iletebilir. TTN ağı, topluluk gateway’leri ve ticari gateway’lerin bir kombinasyonundan oluşur.
- The Things Network (TTN) Ağı:
- Network Server: Gateway’lerden gelen verileri alır, çoğaltılmış paketleri filtreler ve LoRaWAN protokolüne uygunluğunu kontrol eder. Cihazın kimliğini doğrular ve paketi doğru uygulama sunucusuna yönlendirir. Aynı zamanda, downlink mesajlarının (TTN’den cihaza giden mesajlar) yönetilmesinden de sorumludur.
- Application Server: Network Server’dan gelen cihaz verilerini işler. Bu aşamada, cihazdan gelen ham bayt verileri okunabilir bir formata (örneğin, JSON) dönüştürülür. Bu dönüşüm, genellikle TTN’deki “Payload Formatters” (Yük Biçimlendiriciler) aracılığıyla yapılır. Bu formatörler, sensörden gelen ikili verileri sıcaklık veya nem gibi anlamlı değerlere çeviren JavaScript kodlarıdır.
- Veri Entegrasyonları (Integrations): TTN Application Server, işlenmiş ve anlamlı hale getirilmiş verileri harici hizmetlere aktarmak için çeşitli entegrasyon seçenekleri sunar. Bu entegrasyonlar, TTN verilerini depolamanız, analiz etmeniz veya görselleştirmeniz için köprü görevi görür. En popüler entegrasyon türleri şunlardır:
- MQTT (Message Queuing Telemetry Transport): Hafif, publish/subscribe tabanlı bir mesajlaşma protokolüdür. TTN, uygulamanız için bir MQTT Broker görevi görür. Cihazlarınızdan gelen her yeni veri, belirli bir MQTT konusuna (topic) yayınlanır. Harici bir uygulama veya sunucu, bu konuyu dinleyerek gerçek zamanlı olarak verileri çekebilir. Bu, genellikle bir veritabanına veri yazmak veya anlık bildirimler göndermek için kullanılır.
- Webhooks: Belirli bir olay (örneğin, yeni bir uplink mesajı) meydana geldiğinde TTN’in belirlediğiniz bir HTTP/HTTPS uç noktasına (URL) otomatik olarak bir HTTP POST isteği göndermesidir. Bu, sunucusuz işlevleri (AWS Lambda, Azure Functions) tetiklemek veya doğrudan bir API’ye veri göndermek için idealdir. Webhook’lar, verileri doğrudan bir veritabanına yazmak için özel bir sunucu tarafı mantığı gerektirir.
- Veritabanı Entegrasyonları: Bazı entegrasyonlar, doğrudan belirli veritabanı türleriyle (örneğin, InfluxDB, Google Cloud Pub/Sub) çalışmak üzere tasarlanmıştır. Bu, verileri depolama sürecini daha da kolaylaştırabilir.
- Veri Depolama Çözümü (Database): TTN’den entegrasyonlar aracılığıyla gelen verilerin kalıcı olarak saklandığı yerdir. Zaman serisi veritabanları (InfluxDB gibi) IoT verileri için oldukça uygundur, çünkü zaman damgalı verileri verimli bir şekilde depolayabilir ve sorgulayabilirler. PostgreSQL, MySQL gibi ilişkisel veritabanları veya MongoDB gibi NoSQL veritabanları da kullanılabilir, ancak zaman serisi verileri için özel optimizasyonlara sahip değildirler.
- Görselleştirme Aracı (Grafana): Son adımda, Grafana gibi bir görselleştirme aracı, veri depolama çözümünüzden verileri çeker ve anlaşılır gösterge panelleri oluşturur. Grafana, çeşitli veri kaynaklarıyla entegre olabilir ve güçlü sorgulama yetenekleri sayesinde istediğiniz grafik ve tabloları kolayca tasarlamanızı sağlar.
Bu akışı anladığınızda, TTN’den Grafana’ya veri aktarımı ve görselleştirme sürecinde hangi aşamalarda hangi araçlara ihtiyaç duyacağınızı ve olası sorun giderme noktalarını daha iyi kavrayacaksınız. Özellikle MQTT ve Webhook entegrasyonları, TTN verilerini Grafana’ya taşımak için en yaygın ve esnek yöntemlerdir.
Grafana Nedir ve Neden TTN Verileri İçin İdealdir?
IoT projelerinde ham verileri toplamak önemli bir ilk adımdır, ancak asıl değer, bu verilerden anlamlı içgörüler elde etmek ve durumu gerçek zamanlı olarak takip edebilmektir. İşte tam da bu noktada Grafana devreye girer. Grafana, açık kaynaklı, çok platformlu bir analitik ve görselleştirme web uygulamasıdır. Kullanıcıların verileri çeşitli veri kaynaklarından çekmesine, görselleştirmesine ve uyarılar ayarlamasına olanak tanır.
Peki Grafana’yı bu kadar özel ve TTN verilerini görselleştirmek için neden bu kadar ideal kılan nedir?
- Evrensel Veri Kaynağı Desteği: Grafana’nın en büyük avantajlarından biri, çok çeşitli veri kaynaklarını (data sources) desteklemesidir. PostgreSQL, MySQL, InfluxDB, Prometheus, Elasticsearch, Graphite, Microsoft SQL Server ve hatta AWS CloudWatch, Google Cloud Monitoring gibi bulut hizmetleri gibi onlarca farklı veritabanı ve hizmetle doğrudan entegre olabilir. Bu esneklik, TTN verilerinizi depoladığınız veritabanı ne olursa olsun, Grafana’ya kolayca bağlayabileceğiniz anlamına gelir. Zaman serisi verileri için özel olarak optimize edilmiş InfluxDB gibi veritabanlarıyla mükemmel uyum sağlar.
- Güçlü ve Esnek Gösterge Paneli Oluşturma: Grafana, sürükle-bırak arayüzü ile son derece özelleştirilebilir gösterge panelleri (dashboards) oluşturmanıza olanak tanır. Çizgi grafikler, çubuk grafikler, pasta grafikler, ölçerler (gauge), metin panelleri, ısı haritaları ve çok daha fazlasını içeren zengin bir görselleştirme paneli kütüphanesine sahiptir. TTN’den gelen sıcaklık, nem, pil seviyesi gibi farklı sensör verilerini aynı panoda farklı görselleştirme türleriyle birleştirerek kapsamlı bir görünüm elde edebilirsiniz.
- Gerçek Zamanlı Veri İzleme: IoT projeleri için gerçek zamanlı izleme hayati önem taşır. Grafana, panelleri belirli aralıklarla (saniyeler, dakikalar) otomatik olarak yenileyerek canlı veri akışını gösterir. Bu sayede, cihazlarınızın durumunu anlık olarak takip edebilir, herhangi bir anormalliği veya kritik durumu hemen fark edebilirsiniz. Örneğin, bir tarladaki toprağın nem oranının düşüşünü anında görerek sulama sistemini devreye sokma kararı alabilirsiniz.
- Gelişmiş Uyarı Sistemi: Sadece verileri izlemek yeterli değildir; belirli koşullar oluştuğunda bilgilendirilmek de gerekir. Grafana, entegre uyarı sistemi sayesinde belirlediğiniz eşik değerler aşıldığında veya belirli bir durum meydana geldiğinde e-posta, Slack, PagerDuty, webhook gibi çeşitli kanallar aracılığıyla bildirim gönderebilir. Bu, proaktif olarak sorunlara müdahale etmenizi ve sisteminizin güvenilirliğini artırmanızı sağlar. Bir sensörün pil seviyesi kritik seviyenin altına düştüğünde anında bir bildirim almak, pil bitmeden müdahale etmenizi sağlar.
- Açık Kaynak ve Büyük Topluluk Desteği: Açık kaynak bir proje olması, Grafana’nın sürekli olarak geliştirilmesini ve geniş bir topluluk tarafından desteklenmesini sağlar. Bu, bol miktarda dokümantasyon, örnekler ve sorun giderme kaynaklarına erişebileceğiniz anlamına gelir. Ayrıca, birçok eklenti (plugins) ve entegrasyon mevcut olup, ihtiyaçlarınıza göre Grafana’yı genişletme imkanı sunar.
- Kullanıcı Yönetimi ve Erişim Kontrolü: Grafana, birden fazla kullanıcı ve organizasyon için destek sunar. Kullanıcı rollerini (viewer, editor, admin) tanımlayabilir ve her kullanıcının hangi panellere veya veri kaynaklarına erişebileceğini kontrol edebilirsiniz. Bu, büyük ekiplerde veya farklı paydaşlarla çalışırken veri güvenliğini ve düzenini sağlamak için önemlidir.
- Değişkenler ve Dinamik Paneller: Grafana’nın değişkenler (variables) özelliği, gösterge panellerinizi daha dinamik ve etkileşimli hale getirir. Örneğin, bir açılır menüden cihaz kimliğini seçerek, yalnızca o cihaza ait verilerin gösterilmesini sağlayabilirsiniz. Bu, özellikle çok sayıda IoT cihazına sahip projelerde panelleri daha kullanışlı hale getirir.
Özetle, Grafana’nın geniş veri kaynağı desteği, esnek görselleştirme seçenekleri, gerçek zamanlı yetenekleri ve güçlü uyarı sistemi, TTN gibi IoT platformlarından gelen verileri anlamlı, eyleme dönüştürülebilir bilgilere dönüştürmek için onu ideal bir araç haline getirir. TTN verilerinizi Grafana ile birleştirmek, IoT projelerinizin izlenmesi, yönetimi ve geliştirilmesi açısından size önemli avantajlar sağlayacaktır.
TTN Verilerini Grafana’ya Aktarmak İçin Hangi Yöntemler Kullanılabilir?
The Things Network’ten (TTN) gelen sensör verilerini Grafana’ya taşımak için öncelikle bu verilerin bir veritabanında saklanması gerekir. TTN, verileri doğrudan bir veritabanına yazmaz; bunun yerine, çeşitli entegrasyonlar aracılığıyla harici hizmetlere aktarır. Bu bölümde, TTN verilerini Grafana’ya aktarmak için en yaygın yöntemleri ve bu yöntemler için uygun veri depolama çözümlerini inceleyeceğiz.
Veri Depolama Çözümü Seçimi: Hangi Veritabanı Sizin İçin Doğru?
TTN’den gelen IoT verileri genellikle zaman serisi verileridir; yani her veri noktası belirli bir zaman damgasıyla ilişkilidir. Bu tür veriler için bazı veritabanları diğerlerinden daha uygun olabilir:
- InfluxDB: Zaman serisi veritabanları arasında en popülerlerden biridir ve IoT verileri için mükemmel bir seçimdir. Zaman damgalı verileri verimli bir şekilde depolar, sorgular ve analiz eder. Grafana ile doğrudan entegrasyonu çok kolaydır ve performansı yüksektir. Düşük gecikme süresi ile gerçek zamanlı görselleştirmeler için idealdir.
- PostgreSQL (TimescaleDB eklentisi ile): PostgreSQL, sağlam ve genel amaçlı bir ilişkisel veritabanıdır. TimescaleDB eklentisi ile zaman serisi verileri için optimize edilebilir. Bu, zaten PostgreSQL kullanıyorsanız veya SQL sorgulama yeteneklerini tercih ediyorsanız iyi bir seçenek olabilir.
- MongoDB: NoSQL bir veritabanıdır ve esnek bir şemaya sahiptir, bu da farklı sensör türlerinden gelen heterojen verileri depolamak için uygun olabilir. Ancak zaman serisi sorguları için özel optimizasyonlar gerektirebilir veya InfluxDB kadar verimli olmayabilir.
- MySQL: İlişkisel bir veritabanıdır ve daha az hacimli IoT verileri için kullanılabilir. Ancak zaman serisi verileri için InfluxDB veya TimescaleDB kadar optimize değildir. Büyük veri hacimleri ve gerçek zamanlı sorgular için performans sorunları yaşanabilir.
Bu makalede, IoT verileri için en yaygın ve performansı yüksek çözüm olan InfluxDB‘yi kullanarak ilerleyeceğiz. Grafana’nın InfluxDB ile entegrasyonu oldukça sorunsuz ve verimlidir.
Adım Adım Kurulum: TTN Verilerini InfluxDB’ye Nasıl Aktarılır?
TTN’den InfluxDB’ye veri aktarmanın birkaç yolu vardır, ancak en esnek ve gerçek zamanlı olanlardan biri MQTT entegrasyonunu kullanmaktır. Bu yöntem, bir aracı yazılımın TTN MQTT broker’ına abone olmasını ve gelen verileri InfluxDB’ye yazmasını içerir. Bir başka popüler yöntem ise Webhook’lar aracılığıyla sunucusuz fonksiyonlar (örneğin AWS Lambda, Azure Functions) kullanarak verileri InfluxDB’ye göndermektir.
Burada basit bir Python betiği kullanarak MQTT aboneliği ve InfluxDB’ye yazma adımlarını göstereceğiz. Bu senaryo için ihtiyacınız olanlar:
- The Things Stack (TTN v3) hesabınızda bir uygulama ve kayıtlı bir cihaz.
- InfluxDB kurulumu (yerel veya bulut tabanlı).
- Python 3 ve gerekli kütüphaneler.
1. InfluxDB Kurulumu ve Yapılandırması
InfluxDB’yi yerel makinenize kurabilir veya InfluxDB Cloud hizmetini kullanabilirsiniz. Kurulum adımları işletim sisteminize göre değişiklik gösterir. Kurulum tamamlandıktan sonra:
- Bir organizasyon ve bir bucket (veritabanı) oluşturun. Örneğin, ‘ttn-org’ ve ‘ttn-data’ isimlerini kullanabiliriz.
- Bir API Token oluşturun. Bu token, verileri InfluxDB’ye yazmak için kullanılacaktır. Yazma (write) izinlerine sahip olduğundan emin olun.
2. TTN MQTT Entegrasyonu Bilgilerini Alma
TTN konsolunuzda, uygulamanızın Integrations -> MQTT bölümüne gidin. Burada bağlantı bilgilerinizi (MQTT sunucu adresi, portu, kullanıcı adı ve API anahtarı olarak uygulama anahtarı) bulacaksınız. Unutmayın, API anahtarı sizin uygulama anahtarınızdır ve Application API Keys bölümünden oluşturulur.
3. Python Betiği ile MQTT Aboneliği ve InfluxDB’ye Veri Yazma
Aşağıdaki Python betiği, TTN MQTT broker’ına abone olur, gelen mesajları ayrıştırır ve InfluxDB’ye yazar. Bu betik için paho-mqtt ve influxdb-client kütüphanelerini kurmanız gerekmektedir:
pip install paho-mqtt influxdb-client
Şimdi betiği oluşturalım. Bu betik, TTN'den gelen JSON yükünü alıp belirli alanları (örneğin, sıcaklık, nem) InfluxDB'ye "measurement" olarak yazacaktır. Payload formatter'ınızın verileri düzgün bir JSON objesi olarak biçimlendirdiğinden emin olun.
import paho.mqtt.client as mqtt
import json
import os
from influxdb_client import InfluxDBClient, Point, WriteOptions
from influxdb_client.client.write_api import SYNCHRONOUS
# --- TTN MQTT Ayarları ---
TTN_MQTT_BROKER = "eu1.cloud.thethings.network" # Bölgenize göre değişebilir (eu1, us-west-1 vb.)
TTN_MQTT_PORT = 1883
TTN_MQTT_USERNAME = "your-ttn-application-id@ttn" # Örneğin: "my-smart-farm-app@ttn"
TTN_MQTT_PASSWORD = "NNSEN.XXXXX.YYYYY" # Uygulama API anahtarınız, tüm uplink haklarına sahip olmalı
# TTN MQTT Konusu (Topic) - Tüm cihazlar için uplink mesajlarını dinlemek
# v3 için "v3/+/devices/+/up" yerine uygulama ID'nizi kullanın:
# v3/your-application-id/devices/+/up
TTN_MQTT_TOPIC = "v3/your-ttn-application-id/devices/+/up"
# --- InfluxDB Ayarları ---
INFLUXDB_URL = "http://localhost:8086" # Kendi InfluxDB adresinize göre ayarlayın (Cloud için URL farklıdır)
INFLUXDB_TOKEN = "your-influxdb-api-token" # InfluxDB'de oluşturduğunuz API token
INFLUXDB_ORG = "ttn-org" # InfluxDB organizasyon adınız
INFLUXDB_BUCKET = "ttn-data" # InfluxDB bucket adınız
# InfluxDB Client'ı başlatma
influx_client = InfluxDBClient(url=INFLUXDB_URL, token=INFLUXDB_TOKEN, org=INFLUXDB_ORG)
influx_write_api = influx_client.write_api(write_options=WriteOptions(batch_size=1000, flush_interval=1000, jitter_interval=1000))
def on_connect(client, userdata, flags, rc):
print(f"MQTT Bağlandı, Kod: {rc}")
client.subscribe(TTN_MQTT_TOPIC)
print(f"MQTT Konusuna Abone Olundu: {TTN_MQTT_TOPIC}")
def on_message(client, userdata, msg):
try:
payload = json.loads(msg.payload.decode('utf-8'))
# Cihaz ID'si ve zaman damgası
device_id = payload['end_device_ids']['device_id']
received_at = payload['received_at'] # Veya payload['uplink_message']['received_at']
# Uygulama verilerini ayrıştırma (Payload Formatter tarafından işlenmiş kısım)
# Bu kısım, TTN'deki payload formatter'ınıza göre değişecektir.
# Örneğin, aşağıdaki gibi "decoded_payload" alanı olabilir:
if 'uplink_message' in payload and 'decoded_payload' in payload['uplink_message']:
decoded_payload = payload['uplink_message']['decoded_payload']
# InfluxDB'ye yazılacak Point (veri noktası) oluşturma
point = Point("ttn_sensor_data").tag("device_id", device_id).time(received_at)
# decoded_payload içindeki her bir anahtar/değer çiftini alan olarak ekle
for key, value in decoded_payload.items():
# Sadece sayısal değerleri veya istediğiniz belirli tipleri ekleyin
if isinstance(value, (int, float)):
point.field(key, value)
elif isinstance(value, bool):
point.field(key, value)
# İsterseniz diğer veri tiplerini de işleyebilirsiniz (örn: string, array)
if point.has_fields(): # En az bir alan varsa yaz
influx_write_api.write(bucket=INFLUXDB_BUCKET, record=point)
print(f"Veri InfluxDB'ye Yazıldı: Cihaz '{device_id}', Payload: {decoded_payload}")
else:
print(f"Yazılacak geçerli alan bulunamadı: Cihaz '{device_id}'")
else:
print(f"Uplink mesajında 'decoded_payload' bulunamadı: Cihaz '{device_id}'")
except json.JSONDecodeError:
print("Geçersiz JSON payload:", msg.payload)
except Exception as e:
print(f"Mesaj işlenirken hata oluştu: {e}")
# MQTT Client'ı başlatma
mqtt_client = mqtt.Client()
mqtt_client.username_pw_set(TTN_MQTT_USERNAME, TTN_MQTT_PASSWORD)
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.connect(TTN_MQTT_BROKER, TTN_MQTT_PORT, 60)
# Non-blocking döngüyü başlat
mqtt_client.loop_forever()
Bu betiği çalıştırdığınızda, TTN'deki cihazlarınızdan gelen her uplink mesajı InfluxDB'ye yazılacaktır. Şimdi sıra Grafana'da bu verileri görselleştirmeye geldi.
Grafana'da TTN Verileri İçin İlk Gösterge Paneli Nasıl Oluşturulur?
TTN verilerini InfluxDB'ye başarıyla aktardıktan sonra, sıra bu verileri Grafana'da görselleştirmeye gelir. Grafana, güçlü ve esnek bir platform olduğu için, verilerinizi çeşitli şekillerde sunarak anlamlı içgörüler elde etmenizi sağlar. Bu bölümde, Grafana'yı InfluxDB'ye bağlamayı ve ilk gösterge panelinizi (dashboard) oluşturmayı adım adım inceleyeceğiz.
1. Grafana Kurulumu ve Başlatılması
Eğer Grafana'yı henüz kurmadıysanız, işletim sisteminize uygun kurulum talimatlarını takip edebilirsiniz (Docker, Debian/Ubuntu, CentOS/RHEL, Windows vb.). Kurulumdan sonra Grafana genellikle http://localhost:3000 adresinde çalışmaya başlar. Varsayılan kullanıcı adı admin ve parola admin'dir. İlk girişte parolanızı değiştirmeniz istenecektir.
2. Grafana Veritabanı Bağlantısı Nasıl Yapılır? (InfluxDB Örneği)
Grafana'nın TTN verilerinize erişebilmesi için InfluxDB'yi bir veri kaynağı (Data Source) olarak eklemeniz gerekir:
- Grafana ana ekranında sol menüden
Connections->Data sources(veya dişli simgesiConfiguration->Data sources) seçeneğine tıklayın. Add new data sourcebutonuna tıklayın.- Arama çubuğuna
InfluxDByazın ve seçin. - InfluxDB veri kaynağı ayarları sayfasında aşağıdaki bilgileri girin:
- Name: Veri kaynağınıza anlamlı bir isim verin, örneğin
TTN-InfluxDB. - Query Language: Eğer InfluxDB v2 kullanıyorsanız
Flux, InfluxDB v1 kullanıyorsanızInfluxQLseçin. Bu makaledeki Python betiği v2 uyumlu olduğu içinFlux'u seçmeliyiz. - URL: InfluxDB sunucunuzun URL'sini girin (örneğin,
http://localhost:8086veya InfluxDB Cloud için sağlanan URL). - Auth: Genellikle kimlik doğrulama gereklidir.
Tokenseçeneğini işaretleyin. - Token: InfluxDB'de oluşturduğunuz API Token'ı buraya yapıştırın.
- Organization: InfluxDB organizasyon adınızı girin (örneğin,
ttn-org). - Default Bucket: Verilerinizi yazdığınız InfluxDB bucket adını girin (örneğin,
ttn-data).
- Name: Veri kaynağınıza anlamlı bir isim verin, örneğin
- Ayarları girdikten sonra
Save & testbutonuna tıklayın. "Data source is working" veya benzeri bir başarı mesajı görmelisiniz. Bu, Grafana'nın InfluxDB'ye başarıyla bağlandığı anlamına gelir.
3. Gerçek Zamanlı Paneller ve Uyarılar Nasıl Yapılandırılır?
Veri kaynağı bağlantısı tamamlandıktan sonra, ilk gösterge panelinizi oluşturmaya hazırsınız:
- Sol menüden
Dashboards->New dashboard(veyaDashboards->+ New dashboard) seçeneğine tıklayın. Add new panelseçeneğine tıklayın.- Veri Sorgulama:
Data sourceaçılır menüsünden az önce eklediğinizTTN-InfluxDBveri kaynağını seçin.- Eğer Flux kullanıyorsanız, bir Flux sorgusu yazmanız gerekecektir. Örneğin, belirli bir cihazın sıcaklık verilerini almak için aşağıdaki gibi bir sorgu kullanabilirsiniz:
from(bucket: "ttn-data") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "ttn_sensor_data") |> filter(fn: (r) => r.device_id == "your-device-id") // Cihaz ID'nizi buraya yazın |> filter(fn: (r) => r._field == "temperature") // Sıcaklık alanını seçin |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")your-device-idvetemperatureyerine kendi cihaz ID'nizi ve sensör verinizin alan adını yazmalısınız.v.timeRangeStart,v.timeRangeStopvev.windowPeriodGrafana'nın otomatik olarak zaman aralığını yönetmesini sağlayan dahili değişkenlerdir. - Sorgunuzu çalıştırdıktan sonra, aşağıda bir grafik önizlemesi görmelisiniz.
- Panel Türü ve Ayarları:
- Sağdaki
Panel optionsbölümünden görselleştirme türünü seçin. Sıcaklık gibi zaman serisi verileri içinGraph(Çizgi Grafik) veya anlık değerler içinGauge(Ölçer) panelini seçebilirsiniz. - Seçtiğiniz panel türüne göre ek ayarları yapılandırın (renkler, eksenler, birimler, başlık vb.). Örneğin, sıcaklık için birim olarak
Celsius (°C)seçebilirsiniz. - Panel başlığını girin (örneğin, "Cihaz A Sıcaklık Değeri").
- Sağdaki
- Kaydetme: Panelinizi kaydetmek için sağ üstteki
Savebutonuna tıklayın ve panonuza bir isim verin (örneğin, "TTN Akıllı Tarım Panosu").
Vaka Analizi: Akıllı Tarım Sensör Verileri
Bir akıllı tarım projeniz olduğunu varsayalım. Tarlanıza yerleştirilmiş LoRaWAN sensörleri, toprağın nemini, hava sıcaklığını ve ortam nemini ölçüyor. Bu veriler TTN üzerinden InfluxDB'ye akıyor. Grafana'da bu verileri şu şekilde görselleştirebiliriz:
- Sıcaklık Grafiği: Bir
Graphpaneli ekleyerek belirli bir cihazın son 24 saatteki sıcaklık değişimini çizen bir çizgi grafik oluşturabilirsiniz. Sorgunuzda_field == "temperature"filtresini kullanın. - Toprak Nemi Ölçeri: Bir
Gauge(Ölçer) paneli ekleyerek anlık toprak nemi değerini gösterin. Bu panelde renk aralıkları belirleyerek (örn: 0-30% kırmızı, 30-70% sarı, 70-100% yeşil) toprağın kuru, orta veya yeterince nemli olup olmadığını anında görebilirsiniz. Sorgunuzda_field == "soil_moisture"filtresini kullanın velast()fonksiyonu ile son değeri alın. - Pil Seviyesi Tablosu: Birden fazla cihazınız varsa, bir
Tablepaneli ekleyerek tüm cihazların anlık pil seviyelerini ve son veri gönderim zamanlarını listeleyebilirsiniz. Bu, hangi cihazın pilinin değişmesi gerektiğini kolayca tespit etmenizi sağlar.
Bu panelleri oluşturduktan sonra, gösterge paneliniz tarla koşullarına ilişkin kapsamlı ve gerçek zamanlı bir görünüm sunacaktır.
Uyarı Sistemi Yapılandırması
Grafana'nın uyarı sistemi, belirli koşullar karşılandığında sizi bilgilendirmesi açısından çok değerlidir:
- Mevcut bir paneli düzenleyin veya yeni bir panel ekleyin.
- Panel ayarlarında, sol tarafta
Alertsekmesine tıklayın. Create alertbutonuna tıklayın.- Alert rules:
- Bir uyarı kuralı ismi verin (örn: "Yüksek Sıcaklık Uyarısı").
Conditionbölümünde, hangi sorgunun hangi eşik değerini tetikleyeceğini belirtin. Örneğin, "A sorgusundan gelen değer 30°C'nin üzerine çıkarsa" şeklinde bir kural belirleyebilirsiniz.No data / Error handlingkısmında, veri gelmediğinde veya hata oluştuğunda nasıl davranılacağını seçin (örn: "No Data", "Alerting").
- Notification channels:
- Uyarıların gönderileceği bildirim kanallarını (e-posta, Slack, webhook vb.) Grafana'nın
Alerting->Notification channelsbölümünden yapılandırın. - Kuralınızda bu kanalı seçerek uyarıları istediğiniz yere gönderin.
- Uyarıların gönderileceği bildirim kanallarını (e-posta, Slack, webhook vb.) Grafana'nın
- Uyarıyı kaydedin. Artık sıcaklık belirlenen eşiği aştığında bilgilendirileceksiniz.
Bu adımlarla, TTN'den gelen sensör verilerini Grafana'da canlı olarak izleyebilir, anlamlı görseller oluşturabilir ve kritik durumlar için otomatik uyarılar ayarlayabilirsiniz. Bu, IoT projelerinizin yönetimini büyük ölçüde kolaylaştıracak ve veri odaklı karar almanızı sağlayacaktır.
TTN ve Grafana Entegrasyonunda İleri Düzey İpuçları ve En İyi Uygulamalar
TTN ve Grafana entegrasyonunun temel adımlarını anladık. Şimdi, bu kurulumu daha verimli, güvenli ve ölçeklenebilir hale getirmek için bazı ileri düzey ipuçları ve en iyi uygulamalara göz atalım. Bu öneriler, özellikle daha büyük veya kritik IoT projeleri üzerinde çalışan deneyimli kullanıcılar için faydalı olacaktır.
1. Veri Modelleme ve Optimalliği
InfluxDB'ye veri yazarken, veri modellemenizin sorgu performansını doğrudan etkilediğini unutmayın. Her sensör verisi için ayrı bir "measurement" (ölçüm) yerine, aynı cihazdan gelen benzer verileri tek bir ölçüm altında "field" (alan) olarak gruplamak daha iyidir (örneğin, ttn_sensor_data ölçümü altında temperature, humidity gibi alanlar). Cihaz ID'si gibi filtreleme için kullanacağınız bilgileri "tag" (etiket) olarak eklemek, sorguları hızlandırır.
// Yüksek kardinaliteli tag'lerden kaçınmak ve sadece gerekli tag'leri kullanmak performansı artırır.
from(bucket: "ttn-data")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "ttn_sensor_data")
|> filter(fn: (r) => r.device_id == "sensor_001")
|> group(columns: ["_field", "device_id"])
|> mean()
2. Sorgu Optimizasyonu ve Veri Resampling
Grafana panelleri, her yenilendiğinde veritabanından veri çeker. Yüksek frekanslı verilerle çalışırken veya uzun zaman aralıklarını görüntülerken performans sorunları yaşayabilirsiniz. Bu durumda:
- Veri Resampling (Örnekleme): InfluxDB veya diğer zaman serisi veritabanları, büyük veri setlerini daha küçük zaman aralıklarında ortalama, toplam gibi fonksiyonlarla örnekleme yeteneğine sahiptir. Grafana sorgularınızda
aggregateWindow()gibi fonksiyonları kullanarak daha az veri noktası çekerek performansı artırın. Örneğin, 1 dakikalık aralıklarla gelen verileri 15 dakikalık ortalamalara indirgeyebilirsiniz. - Zaman Aralığı Seçimi: Gösterge panellerinizdeki varsayılan zaman aralığını (örneğin, "Last 6 hours" yerine "Last 1 hour") daha kısa tutmak, panellerin daha hızlı yüklenmesini sağlar.
3. Güvenlik En İyi Uygulamaları
Verilerinizi ve altyapınızı güvende tutmak esastır:
- API Anahtarları ve Token'lar: TTN uygulama anahtarınızı, InfluxDB token'ınızı ve Grafana API anahtarlarınızı doğrudan koda gömmeyin. Ortam değişkenleri, sır yönetimi araçları (örneğin, HashiCorp Vault, Kubernetes Secrets) veya güvenli yapılandırma dosyaları kullanın.
- Ağ Güvenliği: InfluxDB ve Grafana sunucularınıza yalnızca güvenli ağlardan (VPN, özel IP adresleri) erişimi kısıtlayın. Gerekirse güvenlik duvarı (firewall) kuralları uygulayın.
- Kullanıcı Yetkilendirmesi: Grafana'da kullanıcıları rol tabanlı yetkilendirme (RBAC) ile yönetin. Herkese yönetici yetkisi vermek yerine, yalnızca ihtiyaç duydukları erişimi sağlayın (örneğin, sadece görüntüleyici rolleri).
- HTTPS Kullanımı: Grafana web arayüzünüze HTTPS üzerinden erişimi zorunlu kılın. TTN entegrasyonlarınızda da HTTPS webhook URL'leri kullanın.
4. Ölçeklenebilirlik İçin Mimariler
Tek bir Python betiği başlangıç için yeterli olsa da, binlerce cihazdan veri alan büyük ölçekli IoT projelerinde daha robust çözümler gerekebilir:
- Mesaj Kuyrukları: TTN'den gelen MQTT mesajlarını doğrudan InfluxDB'ye yazmak yerine, bir mesaj kuyruğuna (örneğin, Kafka, RabbitMQ, AWS SQS) iletmeyi düşünebilirsiniz. Bu, veri alımını ve depolamayı birbirinden ayırarak sisteminizin daha esnek ve hata toleranslı olmasını sağlar. Mesaj kuyruğundan verileri okuyup InfluxDB'ye yazan birden fazla işleyici (consumer) servisi çalıştırabilirsiniz.
- Sunucusuz Mimariler (Serverless): TTN Webhook'larını doğrudan AWS Lambda, Azure Functions veya Google Cloud Functions gibi sunucusuz işlevlere bağlayarak verileri işleyebilirsiniz. Bu işlevler, gelen verileri ayrıştırıp InfluxDB'ye yazabilir. Bu yaklaşım, altyapı yönetimi yükünü azaltır ve otomatik ölçeklenme sağlar.
- Yüksek Erişilebilirlik: Kritik uygulamalar için Grafana ve InfluxDB'yi yüksek erişilebilirlikli (High Availability - HA) kümeler halinde dağıtmayı düşünün. Bu, bir sunucu arızası durumunda bile veri akışının ve görselleştirmenin kesintisiz devam etmesini sağlar.
5. Gelişmiş Grafana Özellikleri
- Değişkenler (Variables): Gösterge panellerinizi daha dinamik hale getirmek için değişkenleri kullanın. Örneğin, bir açılır menüden cihaz ID'si seçerek tüm panellerin sadece o cihaza ait verileri göstermesini sağlayabilirsiniz. Bu, karmaşık panoları daha kullanışlı hale getirir.
- Paneller Arası Etkileşim: Paneller arasında bağlantılar oluşturarak (örneğin, bir cihaz listesi panelinden tıklanan bir cihazın detay paneline gitmek) kullanıcı deneyimini zenginleştirebilirsiniz.
- API ve Entegrasyonlar: Grafana'nın güçlü API'sini kullanarak gösterge panelleri oluşturma, yönetme ve otomatikleştirebilirsiniz. Ayrıca, diğer izleme ve yönetim araçlarıyla entegre edebilirsiniz.
Bu ileri düzey ipuçlarını uygulayarak TTN ve Grafana entegrasyonunuzu daha sağlam, verimli ve güvenli hale getirebilir, IoT projelerinizden elde ettiğiniz değeri maksimuma çıkarabilirsiniz. Sürekli öğrenmeye ve yeni teknolojileri keşfetmeye açık olmak, bu alandaki başarınızın anahtarıdır.
Sonuç: IoT Verilerinden Anlamlı Bilgiler Çıkarmak
Nesnelerin İnterneti (IoT) teknolojilerinin hayatımızın her alanına nüfuz ettiği bu dönemde, sensörlerden toplanan büyük veri yığınlarını anlamlı ve eyleme dönüştürülebilir bilgilere dönüştürmek, projelerin başarısı için vazgeçilmez bir gereklilik haline gelmiştir. Bu makale boyunca, The Things Network (TTN) gibi güçlü bir LoRaWAN platformundan gelen ham verileri, Grafana'nın eşsiz görselleştirme yetenekleriyle nasıl birleştirebileceğimizi ayrıntılı bir şekilde inceledik. TTN'in veri akış mekanizmasından başlayarak, MQTT entegrasyonu ve InfluxDB veri tabanı kullanımıyla gerçek zamanlı veri aktarımını, ardından Grafana'da gösterge panelleri oluşturma ve uyarı sistemlerini yapılandırma adımlarını adım adım ele aldık.
Görselleştirmelerin gücü, karmaşık sayısal değerleri okunabilir grafiklere ve ölçerlere dönüştürerek, mevcut durumu anında anlamamızı ve potansiyel sorunları proaktif bir şekilde tespit etmemizi sağlar. Bir akıllı tarım senaryosu üzerinden de gördüğümüz gibi, sıcaklık değişimlerini, toprak nemini veya cihaz pil seviyelerini canlı olarak izlemek, operasyonel verimliliği artırmanın ve kaynakları daha etkin yönetmenin kapılarını aralar. Grafana'nın geniş veri kaynağı desteği, esnek panel seçenekleri ve güçlü uyarı sistemi, TTN ile birleştiğinde, IoT projelerinize yeni bir boyut kazandırır.
İleri düzey ipuçları ve en iyi uygulamalar bölümünde, veri modelleme, sorgu optimizasyonu, güvenlik önlemleri ve ölçeklenebilir mimariler gibi konulara değinerek, projenizi daha sağlam ve geleceğe hazır hale getirme yollarını gösterdik. Unutmayın ki, her ne kadar teknik detaylar önemli olsa da, asıl amaç, teknoloji aracılığıyla gerçek dünya problemlerine çözüm bulmak ve verilerden gerçek anlamda değer yaratmaktır. TTN ve Grafana ikilisi, bu hedefe ulaşmak için size güçlü bir araç seti sunmaktadır. Şimdi sıra sizde; kendi IoT verilerinizi görselleştirmeye başlayın ve projelerinizin potansiyelini keşfedin!
Sıkça Sorulan Sorular (SSS)
1. TTN verilerini InfluxDB dışında başka bir veritabanına aktarabilir miyim?
Evet, kesinlikle. TTN'den gelen verileri MQTT veya Webhook entegrasyonları aracılığıyla herhangi bir veritabanına aktarabilirsiniz (örneğin PostgreSQL, MySQL, MongoDB, Elasticsearch). Önemli olan, veritabanının yapısına uygun bir aracı yazılım veya sunucusuz fonksiyon kullanarak verileri doğru formatta yazmaktır. Grafana da bu veritabanlarının çoğuyla doğrudan entegre olabilir.
2. Grafana'yı kendi sunucumda çalıştırmak zorunda mıyım, yoksa bulut tabanlı bir seçenek var mı?
Hem yerel sunucunuzda (on-premise) hem de bulut tabanlı olarak Grafana'yı çalıştırabilirsiniz. Kendi sunucunuzda kurmak, tam kontrol sağlarken, Grafana Cloud gibi bulut tabanlı hizmetler, altyapı yönetimi yükünü üzerinizden alır, otomatik güncellemeler ve ölçeklenebilirlik sunar. Seçim, projenizin ihtiyaçlarına, bütçesine ve teknik yeteneklerinize bağlıdır.
3. TTN Payload Formatters'ın görselleştirme üzerindeki etkisi nedir?
TTN Payload Formatters (Yük Biçimlendiriciler), sensörden gelen ham ikili verileri (örneğin bayt dizileri) insan tarafından okunabilir ve anlamlı JSON formatına dönüştürmek için kullanılır. Bu dönüşüm, verilerin doğru bir şekilde ayrıştırılması ve InfluxDB gibi veritabanlarına yazılması için kritik öneme sahiptir. Eğer payload formatter doğru yapılandırılmazsa, Grafana'da görselleştirebileceğiniz anlamlı alanlar (sıcaklık, nem gibi) mevcut olmaz. Bu nedenle, doğru ve iyi tanımlanmış bir payload formatter kullanmak, görselleştirme sürecinin temelidir.
4. Gerçek zamanlı görselleştirme ne kadar "gerçek zamanlı" olabilir?
Gerçek zamanlı görselleştirme, cihazınızın veri gönderme sıklığına, TTN ağının gecikmesine, veri aktarım betiğinizin (örneğin MQTT istemcisinin) hızına ve Grafana panelinizin yenilenme aralığına bağlıdır. Genellikle, saniyeler veya dakikalar içinde güncellenen paneller "gerçek zamanlı" kabul edilir. LoRaWAN'ın doğası gereği, veri gönderim sıklığı genellikle dakikalık veya daha uzun aralıklarla sınırlıdır, bu da gecikmeyi etkileyebilir.
5. Grafana'da oluşturduğum panelleri başkalarıyla nasıl paylaşabilirim?
Grafana, oluşturduğunuz gösterge panellerini paylaşmak için çeşitli yöntemler sunar:
- Anlık Görüntüler (Snapshots): Panelin belirli bir anlık görüntüsünü oluşturarak, herkese açık veya özel bir URL üzerinden paylaşabilirsiniz. Bu görüntüler etkileşimli değildir ve genellikle statik raporlama için kullanılır.
- Paylaşım Linkleri: Canlı paneli görüntülemek için bir URL oluşturabilirsiniz. Bu linki paylaşırken, görüntüleyicinin Grafana'da bir hesabı olması ve panoya erişim izni olması gerekebilir. Anonim erişime izin veren paneller de yapılandırılabilir.
- Gömme (Embed): Panelleri veya tüm panoları web sitenize veya diğer uygulamalarınıza iframe ile gömebilirsiniz. Bu, genellikle bir uygulamanın içine izleme yetenekleri eklemek için kullanılır.
- Dışa Aktarma/İçe Aktarma: Panelleri JSON olarak dışa aktarabilir ve başka bir Grafana örneğine aktarabilirsiniz.