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
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;
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
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.
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;
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;