- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Giriş
Bu bölümde, önceki bölümlerde hazırladığımız ve Node-Red ile SQLite kurduğumuz Raspberry Pi cihazımızı kullanarak temel veri toplanmasını ve kaydedilmesini göstereceğim. Raspberry Pi cihazımızı, bu temel ve az güç isteyen kullanımlar için örnek bir SBC, yani “Single Board Computer” (Tek Kart Bilgisayar) olarak eğitim ve öğrenme amaçlı kullanıyorum. Bu cihazımızın kurulumu, Node-Red ve SQLite yazılımlarının Raspberry Pi üzerinde kurulumlarını anlattığım önceki bölümleri görmenizi tavsiye ediyorum.
Bu yazının aynı zamanda bir videosu da bulunmaktadır:
Önceki bölümlerde de belirttiğim üzere, endüstriyel otomasyon sistemlerinde, sistemin IOT bağlantısı ve ara yüzü olarak SBC’ler kullanılmaya başlandı. Son 2-3 yıldır, büyük otomasyon üreticileri kendi endüstriyel SBC ürünlerini piyasaya sürmeye devam etmektedirler. Bu ürünlerin hepsinin ortak özelliği ise Debian tabanlı Linux işletim sistemi kullanmaları ve Node-Red yazılım kullanımını öne çıkartmalarıdır. İşte bizim de kullandığımız Raspberry Pi cihazımız da bu bahsettiğim SBC’ler gibi Debian tabanlı bir Linux işletim sistemi kullanan ve herkesin kolayca erişebileceği bir fiyatta ve tedarik ağında olan bir SBC olduğu için örneklerimizi bu cihaz üstünde anlatıyoruz. Ancak ileride gelecek bölümlerde, PLC ile haberleşme de göstereceğim.
İnternet üzerinden örnek veri toplama – openweathermap.org
Bu bölümümüzde, gerçek zamanlı veri kullanacağımızdan bahsetmiştik. Bu konuda en kolay kullanımlı ve bazı analizler yapabileceğimiz ve ücretsiz bir veri sağlayıcısı olarak “OpenWeatherMap.org”u seçiyorum. Bu veri toplama işlemini Node-Red üzerinden anlatmadan önce “OpenWeatherMap.org” üzerinden bazı hazırlıklar yapmamız gerekiyor. Bu internet sitesinde yaptığımız kayıt sonrası, bize bu tür uygulamalarda kullanmak üzere bir “api key” verecektir. Bu “api key”i sitede kullanıcı adınızla giriş yaptıktan sonra aşağıdaki adrese girerek görüntüleyebilirsiniz.
https://home.openweathermap.org/api_keys
Bu internet hizmeti, belirli bir sayıda hava durumu verisini ücretsiz olarak vermektedir. Ancak bu örneğimizdeki uygulamamız ile bu limiti aşmamız mümkün olmadığından dolayı ücretsiz olarak yararlanabileceğiz. Yukarıdaki gibi verilen “api key”imizi bir notepad dosyasına kaydedip sayfayı kapatıyoruz.
Önceki bölümlerde hazırladığımız Raspberry Pi cihazımızdaki Node-Red ara yüzüne web tarayıcımız ile erişiyoruz. “OpenWeatherMap.org” sitesinin Node-Red içerisindeki kütüphanesini indirmek için “palette manager” bölümünden “install” tabına tıklayarak arama kutusuna “openweathermap” yazarak kütüphanesini aratıyoruz. Çıkan sonuçlardan “node-red-node-openweathermap”i seçerek yüklüyoruz.
SQLite kullanabilmek için ilgili kütüphanesini yüklemek için Manage Palette kısmından “node-red-node-sqlite” nodunu bulup yüklüyoruz.
İşlemimiz bittiği zaman “manage palette” ekranımızdaki yüklü olan nodlar aşağıdaki gibi olacaktır.
Artık hazırlıklarımızı tamamladığımıza göre veri almaya başlayabiliriz. Sol taraftaki nodlardan “openweathermap-in” nodumuzu alarak flowumuza ekliyoruz. Bu nodumuzun nasıl çalıştığını Node-Red internet sitesindeki açıklamalarında veya Node-Red ara yüzümüzdeki bilgi bölümünde bulabilirsiniz. Nodumuzun çalışmasını kontrol etmek amacıyla bir inject nodu ekliyoruz ve sonuçlarını görüntülemek için bir debug nodu ekliyoruz. Eklediğimiz nodları aşağıdaki gibi bağlıyoruz.
“Debug” nodumuz, varsayılan olarak msg.payload öğesini debug sayfasına yansıtır ama bu sefer bütün msg nesnesini debug ekranına yansıtmasını istiyorum. Bunun için ayarını aşağıdaki gibi yapıp kaydediyoruz.
“openweathermap” nodumuza çift tıklayarak web sayfasından aldığımız “token”i ilgili yere yapıştırıyoruz. Hava durumu bilgisini alacağımız yerin enlem ve boylamını ilgili yerlere yazıyorum. İşlemimiz bittiği zaman aşağıdaki gibi olmalıdır.
Şu anda denemeye hazırız. Yukarıdaki deploy düğmesine basarak, hazırladığımız programın devreye girmesini sağlıyoruz. Programımızın çalışmasını gözlemlemek amacıyla inject nodumuzun yanındaki düğmeye tıklayarak veriyi alıyor ve debug ekranından verimizi inceliyoruz.
Gördüğümüz üzere, oldukça karışık ve bilgilendirici bir veriyi internetten almış bulunmaktayız. Ancak bu örneğimiz için ben aşağıda listelediğim üç adet veriye odaklanacağım. Bu verilerin değerlerini aldığımız değişkenler:
- Santigrad derece cinsinden sıcaklık için: msg.payload.tempc
- Milimetre civa cinsinden hava basıncı için: msg.payload.pressure
- Yüz üzerinden bağıl nem için: msg.payload.humidity
Verilerin dashboard üzerinde görselleştirilmesi
Şimdi bu verilerimizi dashboard üzerinde görselleştirelim. Önceki bölümümüzde anlattığım text nodlarını kullanarak basit bir değer gösterme yapıyorum.
Değişiklikleri deploy ettikten sonra, “inject” nodumuz ile tetiklediğimizde, dashboard ekranımız bu şekilde olacaktır.
Verilerin sqlite veritabanına yazılması
Şimdi bu değerleri SQLite veri tabanımıza kaydetme zamanı. Bu kaydetme işlemi için bir tane sqlite nodu ve bir tane de fonksiyon nodu ekliyoruz.
Önceki bölümüzde hazırladığımız veritabanı dosyası ve tablosunu kullanacağım. Kullanacağım olan veri tabanımıza aşağıdaki adresten erişiyoruz:
/home/pi/db/veri.dbErişeceğimiz bu veri tabanı dosyasını eklediğimiz sqlite nodunun içerisine aşağıdaki gibi yazıyoruz.
Bu veri.db dosyasının içerisinde ise havaDurumu diye bir tablo oluşturmuştuk bu tablomuzun da şema verisi aşağıdaki gibiydi:
CREATE TABLE havaDurumu (
id INTEGER PRIMARY KEY,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
sicaklik REAL,
basinc REAL,
nem REAL);Verileri kaydetmek ve gerekli SQL komutunu yazmak için gelen değerleri SQL komutu içerisine yerleştiren bir fonksiyon nodu kullanıyoruz. Fonksiyon nodunun içerisine aşağıdaki programı yazarak bu işlemi gerçekleştiriyoruz:
var sicaklik = msg.payload.tempc;
var basinc = msg.payload.pressure;
var nem = msg.payload.humidity;
var newMsg = {topic:””, payload:””};
newMsg.topic = ‘INSERT INTO havaDurumu (sicaklik,basinc,nem) ‘;
newMsg.topic += ‘VALUES (‘;
newMsg.topic += sicaklik.toString() + ’,’;
newMsg.topic += pressure.toString() + ’,’;
newMsg.topic += humidity.toString() + ’);’;
return newMsg;Bu koddan da görebileceğimiz üzere, sqlite nodumuz komutları msg.topic üzerinden almaktadır. Bunun kullanımını ilgili web sayfasından veya info sekmesinden görebiliriz. Ayrıca gönderdiğimiz verileri burada yazabilmemiz için, “string” formatına çevirmemiz gerekmektedir. Aslında, örnek veriler ile yazarsak, yazdığımız SQL komutu, aşağıdaki gibidir:
INSERT INTO havaDurumu (sicaklik,basinc,nem) VALUES (24,1011,20);Yaptığımız değişikliklerin işleme alınması için “Deploy” düğmesine basıyoruz. Yüklendikten sonra, “Inject” nodumuzun kenarındaki düğmeye basarak tek bir kayıt işlemini gerçekleştirip hata alınmamasını gözlemliyoruz. Dikkat ettiyseniz SQLite nodumuz da hata vermediğini belirten bir yeşil kare işaretini taşımaktadır.
SSH ile bağlandığımız cihazımızdan, sqlite arayüzümüzü açarak gelen değerler ile kaydedilen değeri karşılaştırıyoruz.
Ancak her zaman kendimiz bu işlemi yapmayacağız. “Inject” nodumuzu görebileceğimiz şekilde ayarlayarak tam olarak XX:00, XX:15, XX:30 ve XX:45 olmak üzere günün her saatinde bu işlemi yapması için ayarlıyoruz.
Burada dikkat ettiyseniz “interval” seçeneğini kullanmadım. Çünkü interval seçeneği, “Deploy” sonrası bu işlemi yapacağından küsüratlı dakikalarda bu işlemi gerçekleştirecekti.
Yaptığımız bu Node-Red programının daha iyi bir şekilde incelemek için 3-4 gün çalıştırıp, size daha sonra analiz için başka bir bölüm ayarlayacağım. Bu bölümü bu sebepten dolayı şimdilik bitiriyorum. Sonraki bölümde, veri tabanımızdaki verileri bir chart nodu üzerinde analiz etmek için nasıl bir “SELECT” komutu yazmamız gerektiğini göstereceğim ve bu sayede son 24 saat içerisindeki verilerin analiz grafiği ve haftalık sıcaklık analizi gibi konuları işleyeceğiz.
dashboard
NodeRed
openweathermap.org
Raspberry Pi
SQL
SQL Komutları
SSH Connection
write to sql database
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Yorumlar
Yorum Gönder