daha önceki örneklerimizde raspberry nin sistem özelliklerini okumayı ve bu verileri rrd veritabanına kaydetmeyi ve izlemesi konusunda örnekler yapmıştık. bu yöntemin uygun olmayacağı veya istenmeyeceği durumlar olabilir. böyle bir durum olduğunu düşünerek okuduğumuz cpu sıcaklık değerini bir veri tabanına (örneğimizde mysql olacak) kaydedelim ve dinamik bir arayüz ile veri tabanına kaydettiğimiz verileri kullanıcılarımız sunacağımız bir uygulama geliştirelim. öncelikle veri tabanımızda hangi verilerin olacağını belirlemeli ve veritabanımızı oluşturmalıyız. raspberry pinin klasik dağıtımları üzerinde mysql, php, apache gibi sunucu yazılımları mevcut değil. bunları kurmanız gerektiğini unutmayınız. internette konu hakkında dokümanlar mevcut. uygun bir zamanda detaylı olarak onuda ekleyebiliriz. bunların olduğunu var sayarak esas konumuza dönelim. bu örneğimizde tarih ve saat verisinin yanında sadece sıcaklık değerini tutmamız yeterli olacaktır.
sudo mysql -u root -p CREATE DATABASE raspberry_sistem; USE raspberry_sistem; CREATE TABLE cpu_temp ( id INT NOT NULL AUTO_INCREMENT, tarih DATE NOT NULL, saat TIME NOT NULL, sicaklik varchar(50), PRIMARY KEY ( id )); GRANT INSERT,SELECT ON raspberry_sistem.* TO 'raspberry'@'localhost' IDENTIFIED BY 'pi'; FLUSH PRIVILEGES; |
artık veritabanımız hazır. sıra sıcaklık değeri okuyarak veri tabanına işlemeye sıra geldi. ben örneğimi python üzerinden yapacağım. benim kullandığım kütüphaneler raspberry üzerinde olmayabilir. kodun çalışması için eksik kütüphaneleri yüklemeniz gerekmektedir.
import time import os import fnmatch import MySQLdb as mdb import logging import time import datetime #cpu sicaklik degerinin okunmasi def cpu_sicaklik_oku(): res = os.popen('vcgencmd measure_temp').readline() return(res.replace("temp=","").replace("'C\n","")) #mysql veritabanina veri eklenmesi def insertDB(cpu_sicaklik): sql = "INSERT INTO cpu_temp (tarih, saat, sicaklik) VALUES ('%s', '%s', '%s' )" % (time.strftime("%Y-%m-%d"), time.strftime("%H:%M"), cpu_sicaklik) try: con = mdb.connect('localhost', 'raspberry', 'pi', 'raspberry_sistem'); cursor = con.cursor() cursor.execute(sql) con.commit() con.close() except mdb.Error, e: logger.error(e) #sicaklik okuma ve veritabanina yazma fonksiyonlarini calistiralim cpu_sicaklik = float(cpu_sicaklik_oku()) print cpu_sicaklik insertDB(cpu_sicaklik) |
kodun oldukça sadece ve anlaşılır olduğunuz düşüyorum. temel olarak sıcaklık verisinin okunmasını ve bu verinin veritabanına eklenmesini sağlayarak iki ayrı fonksiyon oluşturduk. ve bu fonksiyonları sırası ile çağırıyoruz. komut satırından kodumuzu test edelim.
pi@cicek /var/www/raspberry $ sudo python sicaklik_cpu.py 54.1 |
sıcaklık değeri okundu ve ekrana yazıldı ve herhangi bir hata vermedi. kontrol için eklediğimiz kodu “print cpu_sicaklik” her şey tamam olduktan sonra kaldıracağız. veri tabanına gerekli veri girişi doğru şekilde yapıldığının kontrolünü de yapalım.
mysql> SELECT * FROM cpu_temp; Empty SET (0.01 sec) mysql> SELECT * FROM cpu_temp; +----+------------+----------+----------+ | id | tarih | saat | sicaklik | +----+------------+----------+----------+ | 1 | 2015-07-19 | 22:35:00 | 54.1 | +----+------------+----------+----------+ 1 ROW IN SET (0.00 sec) |
kodumuz sağlıklı olarak çalışıyor. şimdi bu işlemi otomatikleştirmek için crontab içine yerleştirelim.
pi@cicek /etc $ cat /etc/crontab */5 * * * * root sudo python /var/www/raspberry/sicaklik_cpu.py |
5 dakika bir çalışacak şekilde gerekli ilavemizi de yaptıktan sonra sıra kullanıcı arayüzüne geldi. grafik çizimi için google chart servisini line chart kullanacağım. detaylı bilgiyi https://developers.google.com/chart/interactive/docs/gallery/linechart adresinden alınabilir. bu servis sayesinde grafik kütüphaneleri ile fazla uğraşmayacağım ve işimi kolayca halledeceğim.
<script src="https://www.google.com/jsapi" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script><script type="text/javascript">// <![CDATA[ google.load('visualization', '1', {'packages':['corechart']}); google.setOnLoadCallback(drawChart); function drawChart() { var json = $.ajax({ url: 'get_json.php', dataType: 'json', async: false }).responseText; var data = new google.visualization.DataTable(json); var options = { title: 'Raspberry CPU SSicaklik', width: 600, height: 400 }; var chart = new google.visualization.LineChart(document.getElementById('chart_div')); chart.draw(data, options); setInterval(drawChart, 500 ); } // ]]></script> |
ve esas işi yapacak get_json.php php dosyamızı da oluşturalım
<!--?php $con = mysql_connect('localhost', 'raspberry', 'pi') or die('veri tabani baglanti hatasi'); mysql_select_db('raspberry_system', $con); $query = mysql_query('SELECT * FROM cpu_temp'); $table = array(); $table['cols'] = array( array('label' =&gt; 'saat', 'type' =&gt; 'string'), array('label' =&gt; 'sicaklik', 'type' =&gt; 'number') ); $rows = array(); while($r = mysql_fetch_assoc($query)) { $tempa = array(); $tempa[] = array('v' =&gt; $r['saat']); $tempa[] = array('v' =&gt; (int) $r['sicaklik']); $rows[] = array('c' =&gt; $tempa); } $table['rows'] = $rows; $jsonTable = json_encode($table); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo $jsonTable; ?-->; |
adres satırı raspberry adresini yazdığımızda göreceğimiz grafik aşağıdaki gibi olacaktır.