OpenHAB 2 veri kalıcılığı

Akıllı ev sistemi makale serisinde ilerlerken OpenHAB 2’nin temel kurulumlarını tamamlayarak ilk sensör verilerini toplamaya başladık. Önümüzdeki makalelerde, topladığımız bu verilerle aksiyon almaya başlayacağız; fakat daha fazla ilerlemeden önce yapmamız gereken başka yapılandırmalar da var. Şu anki duruma baktığımızda sensörlerden verilerimizi toplamaya başladık; fakat bunları bir yerde biriktirmediğimiz için geriye dönük veriye ulaşamıyoruz. Örneğin; oturma odamızın son 1 haftalık ısı verisini sorgulayamıyorum. Bunun nedeni henüz verimizi saklayacağımız bir veri deposu yapılandırmamış olmamız. Bu makelemde daha önceden yapılandırmalarını yaparak sensörlerimizi eklediğimiz OpenHAB 2 sistemimizin bir kısım verisini MySQL veritabanına saklamayı sizlerle paylaşacağım.

Üzerinde çalıştığım sistemi hatırlatmak gerekirse; Raspberry Pi 3 donanım üzerinde koşan Raspbian işletim sistemi üzerinde OpenHAB 2 kurulu.

Her zaman olduğu gibi ilk işimiz depo güncellemeleri;

sudo apt-get update

OpenHAB veri kalıcılığı için aralarında InfluxDB, Apache Derby, H2, PostgreSQL ve MySQL gibi çeşitli persitance depolarını desteklemekte. Ben bu depolar arasından tercihimi MySQL’den yana kullandım. Sistemimize MySQL kurulumunu yapalım;

sudo apt-get install mysql-client  mysql-server

Kurulum sırasında verdiğimiz şifre ile MySQL’e giriş yapalım;

mysql -u root -p

MySQL komut satırında aşağıdaki komutlar yardımıyla OpenHAB adıyla bir veritabanı ve yine aynı isimle bir kullanıcı oluşturalım. Son olarak da kullanıcımıza oluşturduğumuz veritabanı için izin vererek MySQL komut satırından çıkalım;

 
CREATE DATABASE OpenHAB;
CREATE USER 'openhab'@'localhost' IDENTIFIED BY '<Sizin_belirleyeceğiniz_bir_şifre>';
GRANT ALL PRIVILEGES ON OpenHAB.* TO 'openhab'@'localhost';
Quit

MySQL komut satırından kullanıcı ve veritabanımızı oluşturalım

Veritabanı yapılandırması ardından Paper UI arayüzüne geçerek Extensions –> PERSISTENCE bölümünde yer alan MySQL Persistence eklentisini kuralım;

PaperUI-Persistance

OpenHAB 2 Paper UI henüz arayüz üzerinden MySQL yapılandırmasını desteklemediği için geri kalan ayarları komut satırı üzerinden gerçekleştirmemiz gerekiyor.

OpenHAB 2’ye hangi veritabanına ve ne şekilde bağlanacağını belirtmek için /opt/openhab2/conf/services klasörü altına (burada OpenHAB 2’nin /opt/openhab2 klasöründe kurulu olduğunu varsayıyorum) yer alan mysql.cfg  dosyasının içeriğini aşağıdaki şekilde doldurmalıyız;

url=jdbc:mysql://localhost:3306/OpenHAB
user=openhab
password=<belirlediğiniz_şifre>
reconnectCnt=1    

mysql.cfg dosyasına MySQL bağlantı bilgilerini yazıyoruz

Password değeri olarak sizin belirttiğiniz değeri yazmayı unutmayın…

MySQL bağlantı bilgilerini yapılandırdıktan sonra sırada veri kalıcılığı stratejimizi belirtmekte. Veri kalıcığı stratejisi OpenHAB’a hangi nesne verisinin ne zaman saklanması gerektiğini söyleyecektir. Bu amaçla /opt/openhab2/conf/persistence klasörü altına (burada OpenHAB 2’nin /opt/openhab2 klasöründe kurulu olduğunu varsayıyorum) yeni bir mysql.persist dosyası oluşturmalıyız. Bu dosya iki temel bölümden oluşacaktır; stratejiler ve nesneler. Stratejiler verinin saklanma sıklığını belirten cron ifadelidir. Geliştirmeye yardımcı olmak adına OpenHAB 2 aşağıdaki stratejileri ön tanımlı olarak sunmaktadır;

  • everyChange: Nesnenin durumu her değiştiğinde yeni durum bilgisini saklar
  • everyUpdate: Nesnenin durumu her güncellendiğinde durum bilgisini saklar. everyChange stratejisinden farklı olarak durum bilgisinin değişip değişmediği kontol edilmez.
  • restoreOnStartup: Uygulama açılışında nesnenin durumu tanımsız ise bilinen son değerinin geri yüklenmesi sağlanır.

Nesneler ise hangi nesneye hangi stratejinin uygulaması gerektiğinin belirtildiği ifadelerdir.

mysql.persist dosya içeriği

Strategies {
    herGun  : "0 0 0 * * ?"
    herDakika : "0 * * * * ?"
}

Items {
    * : strategy = everyChange, herGun, restoreOnStartup
    Isi_*,Hava_durumu_* : strategy = herDakika, restoreOnStartup
}

Yukarıdaki örnek persist dosyasında Isi_ ve Hava_durumu_ ile başlayan tüm nesnelerimiz için herDakika ve restoreOnStartup stratejilerinin uygulanacağını belirttik. Bu ifadeki *’a dikkatinizi çekerim.  herDakika stratejisi dakikada bir değişikliklerin saklanacağını belirten bir cron ifadesine sahip. Dolayısıyla ısı ve hava durumu nesnelerimizin durumları dakikada bir saklanacak, sistem yeniden başladığında son değerleri geri yüklenecek. Items bölümünün ilk satırında yer alan ifade ile varsayılan olarak tüm nesneler için bir tanımlama yapmaktayız.

Aynı dosyayı daha önce detaylarını paylaştığım Eclipse SmartHome Designer ile düzenlenemeniz de münkün;

Eclipse SmartHome Designer ile mysql.persist dosyasını düzenleyebilirsiniz

Değişiklikleri devreye almak için OpenHAB 2 hizmetini yeniden başlatabilirsiniz;

sudo systemctl restart openhab

Bu işlemler ardından OpenHAB 2 belirlediğiniz kriterler doğrultusunda sistem verilerini MySQL veritabanına kaydedecektir.

İsterseniz kaydedilen bu verileri sitemap üzerinde gösterebilmeniz mümkün. Bunun için chart bileşenini kullanabilirsiniz;

Chart label="Isı Değişimi" item=zwave_device_controller_node2_sensor_temperature period=1d refresh=10000

Yukarıdaki örnekte, daha önce kurulumunu yaptığımız MultiSensor 6’dan gelen ısı verisini 1 günlük bir grafik olarak sitemap’te gösterilmesi sağlanmakta. Örneğimizdeki item grafiği gösterilecek nesneyi, refresh verinin tazelenme sıklığını belirtmekte. period ise gösterilecek veri için zaman aralığını ifade etmektedir. period alanı için aşağıdaki değerler kullanılabilir;

İfade Açıklama
h son bir saat
4h son dört saat
8h son sekiz saat
12 son oniki saat
D son bir gün
3D son üç gün
W son bir hafta
2W son iki hafta
M son bir ay
2M son iki ay
4M son dört ay
Y son bir yıl

Bir başka örnek kullanım;

Frame label="Salon - Sensör Grafikleri" {            
    Chart label="Isı Değişimi" item=zwave_device_controller_node2_sensor_temperature period=1d refresh=10000
    Chart label="Aydınlık" item=zwave_device_controller_node2_sensor_luminance period=1d refresh=10000                    
}

Site haritamızdaki bu ifade aşağıdaki şekilde grafikler oluşturacaktır;

Sensör grafiği

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir