<?php | <?php |
function view($sensorID) { | |
$data = Array("sensorID" => $sensorID, | |
); | |
$timefrom = 1; | |
$timeto = 1; | |
$years = $this->Sensor_model->getSensorDataYears($sensorID, $timefrom, $timeto); | |
foreach ($years as $year) { | |
$yearsItem[] = Array("title" => $year['year'], "link" => "#", | |
"onclick" => "getData('$sensorID'," . mktime(0, 0, 0, 1, 1, $year['year']) . "," . mktime(0, 0, 0, 12, 31, $year['year']) . ");"); | |
} | |
$months = $this->Sensor_model->getSensorDataMonths($sensorID, $timefrom, $timeto); | |
foreach ($months as $month) { | |
$monthsItem[] = Array("title" => date("F", mktime(0, 0, 0, $month['month'], 10)) . ' ' . $month['year'], "link" => "#", | |
"onclick" => "getData('$sensorID'," . mktime(0, 0, 0, $month['month'], 1, $month['year']) . "," . strtotime("+1 month", mktime(0, 0, 0, $month['month'], 1, $month['year'])) . ");"); | |
} | |
$days = $this->Sensor_model->getSensorDataDays($sensorID, $timefrom, $timeto); | |
foreach ($days as $day) { | |
$daysItem[] = Array("title" => date("jS F", mktime(0, 0, 0, $day['month'], $day['day'])), "link" => "#", | |
"onclick" => "getData('$sensorID'," . mktime(0, 0, 0, $day['month'], $day['day'], $day['year']) . "," . mktime(23, 59, 59, $day['month'], $day['day'], $day['year']) . ");"); | |
} | |
$data['sidebar'] = Array("years" => $yearsItem, "months" => $monthsItem, "days" => $daysItem | |
); | |
$this->javascript = Array("flot/jquery.flot.min.js", "flot/jquery.flot.resize.min.js", "flot/jquery.flot.crosshair.min.js"); | |
$this->content = $this->load->view('pages/sensor/view', $data, true); | |
$this->render_page(); | |
} | |
function json_graph($sensorID, $timefrom, $timeto) { | function json_graph($sensorID, $timefrom, $timeto) { |
$values = $this->Sensor_model->getSensorValuesByHour($sensorID, $timefrom, $timeto); | $values = getSensorValuesByHour($sensorID, $timefrom, $timeto); |
$label = $sensorID; | $label = $sensorID; |
$data = Array(); | $data = Array(); |
$tzoffset = $this->get_timezone_offset("UTC"); | $tzoffset = $this->get_timezone_offset("UTC"); |
foreach ($values as $value) { | foreach ($values as $value) { |
$data[] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['avg'])); | $data[] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['avg'])); |
} | } |
$this->output | $this->output |
->set_content_type('application/json') | ->set_content_type('application/json') |
->set_output(json_encode(Array("label" => $label, "data" => $data, | ->set_output(json_encode(Array("label" => $label, "data" => $data, |
"previous" => Array( | "previous" => Array( |
"from" => $timefrom - (24 * 60 * 60), | "from" => $timefrom - (24 * 60 * 60), |
"to" => $timefrom) | "to" => $timefrom) |
, | , |
"next" => Array( | "next" => Array( |
"to" => $timeto + (24 * 60 * 60), | "to" => $timeto + (24 * 60 * 60), |
"from" => $timeto) | "from" => $timeto) |
) | ) |
)); | )); |
} | } |
function json_data_description($sensorID, $timefrom, $timeto) { | function json_data_description($sensorID, $timefrom, $timeto) { |
$timefrom = strtotime($timefrom); | $timefrom = strtotime($timefrom); |
$timeto = strtotime($timeto); | $timeto = strtotime($timeto); |
$years = $this->Sensor_model->getSensorDataYears($sensorID, $timefrom, $timeto); | $years = getSensorDataYears($sensorID, $timefrom, $timeto); |
$months = $this->Sensor_model->getSensorDataMonths($sensorID, $timefrom, $timeto); | $months = getSensorDataMonths($sensorID, $timefrom, $timeto); |
$days = $this->Sensor_model->getSensorDataDays($sensorID, $timefrom, $timeto); | $days = getSensorDataDays($sensorID, $timefrom, $timeto); |
$this->output | return json_encode(Array("years" => $years, "months" => $months, "days" => $days |
->set_content_type('application/json') | )); |
->set_output(json_encode(Array("years" => $years, "months" => $months, "days" => $days | |
))); | |
} | } |
?> | ?> |
<?php | <?php |
date_default_timezone_set("Australia/Sydney"); | date_default_timezone_set("Australia/Sydney"); |
$basePath = ""; | $basePath = ""; |
$DATA_DIR = "./data"; | |
/** Returns the offset from the origin timezone to the remote timezone, in seconds. | /** Returns the offset from the origin timezone to the remote timezone, in seconds. |
* @param $remote_tz; | * @param $remote_tz; |
* @param $origin_tz; If null the servers current timezone is used as the origin. | * @param $origin_tz; If null the servers current timezone is used as the origin. |
* @return int; | * @return int; |
*/ | */ |
function get_timezone_offset($remote_tz, $origin_tz = null) { | function get_timezone_offset($remote_tz, $origin_tz = null) { |
if ($origin_tz === null) { | if ($origin_tz === null) { |
if (!is_string($origin_tz = date_default_timezone_get())) { | if (!is_string($origin_tz = date_default_timezone_get())) { |
return false; // A UTC timestamp was returned -- bail out! | return false; // A UTC timestamp was returned -- bail out! |
} | } |
} | } |
$origin_dtz = new DateTimeZone($origin_tz); | $origin_dtz = new DateTimeZone($origin_tz); |
$remote_dtz = new DateTimeZone($remote_tz); | $remote_dtz = new DateTimeZone($remote_tz); |
$origin_dt = new DateTime("now", $origin_dtz); | $origin_dt = new DateTime("now", $origin_dtz); |
$remote_dt = new DateTime("now", $remote_dtz); | $remote_dt = new DateTime("now", $remote_dtz); |
$offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt); | $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt); |
return $offset; | return $offset; |
} | } |
function getSensorValuesByHour($sensorID, $timeFrom, $timeTo) { | function getSensorValuesByHour($sensorID, $timeFrom, $timeTo) { |
$sql = 'select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ? | $sql = 'select min(call_timestamp) as time, count(*), min(length), max(length), avg(length), stddev(length) from recordings |
and extract(epoch from time) > ? and extract(epoch from time) < ? | group by tgid, date_trunc(\'hour\', call_timestamp) order by time'; |
group by sensor_id, date_trunc(\'hour\', time) order by time'; | |
$query = $this->db->query($sql, Array($sensorID, $timeFrom, $timeTo)); | $query = $this->db->query($sql, Array($sensorID, $timeFrom, $timeTo)); |
return $query->result_array(); | return $query->result_array(); |
} | } |
function getSensorValuesByDay($sensorID, $dayFrom, $dayTo) { | function getSensorValuesByDay($sensorID, $dayFrom, $dayTo) { |
$sql = 'select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ? | $sql = 'select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ? |
group by sensor_id, date_trunc(\'day\', time) order by time'; | group by sensor_id, date_trunc(\'day\', time) order by time'; |
$query = $this->db->query($sql, Array($sensorID)); | $query = $this->db->query($sql, Array($sensorID)); |
return $query->result_array(); | return $query->result_array(); |
} | } |
function getSensorDataYears($sensorID, $timeFrom, $timeTo) { | function getSensorDataYears($sensorID, $timeFrom, $timeTo) { |
$sql = "select distinct extract('year' from time) as year from sensor_values where sensor_id = ? order by year"; | $sql = "select distinct extract('year' from call_timestamp) as year from recordings where tgid = ? order by year"; |
$query = $this->db->query($sql, Array($sensorID)); | $query = $this->db->query($sql, Array($sensorID)); |
return $query->result_array(); | return $query->result_array(); |
} | } |
function getSensorDataMonths($sensorID, $timeFrom, $timeTo) { | function getSensorDataMonths($sensorID, $timeFrom, $timeTo) { |
$sql = "select distinct extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year, month"; | $sql = "select distinct extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year, month"; |
$query = $this->db->query($sql, Array($sensorID)); | $query = $this->db->query($sql, Array($sensorID)); |
return $query->result_array(); | return $query->result_array(); |
} | } |
function getSensorDataDays($sensorID, $timeFrom, $timeTo) { | function getSensorDataDays($sensorID, $timeFrom, $timeTo) { |
$sql = "select distinct extract('day' from time) as day, extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year,month,day"; | $sql = "select distinct extract('day' from time) as day, extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year,month,day"; |
$query = $this->db->query($sql, Array($sensorID)); | $query = $this->db->query($sql, Array($sensorID)); |
return $query->result_array(); | return $query->result_array(); |
} | } |
function include_header($title) { | function include_header($title) { |
global $basePath; | global $basePath; |
?> | ?> |
<!DOCTYPE html> | <!DOCTYPE html> |
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> | <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> |
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> | <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> |
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> | <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> |
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> | <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> |
<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]--> | <!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]--> |
<head> | <head> |
<meta charset="utf-8" /> | <meta charset="utf-8" /> |
<!-- Set the viewport width to device width for mobile --> | <!-- Set the viewport width to device width for mobile --> |
<meta name="viewport" content="width=device-width" /> | <meta name="viewport" content="width=device-width" /> |
<title><?php echo $title; ?> - Scannr</title> | <title><?php echo $title; ?> - Scannr</title> |
<!-- Included CSS Files --> | <!-- Included CSS Files --> |
<link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/foundation.css"> | <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/foundation.css"> |
<link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/app.css"> | <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/app.css"> |
<!--[if lt IE 9]> | <!--[if lt IE 9]> |
<link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/ie.css"> | <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/ie.css"> |
<![endif]--> | <![endif]--> |
<!-- IE Fix for HTML5 Tags --> | <!-- IE Fix for HTML5 Tags --> |
<!--[if lt IE 9]> | <!--[if lt IE 9]> |
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> | <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
<![endif]--> | <![endif]--> |
</head> | </head> |
<body xmlns:schema="http://schema.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/"> | <body xmlns:schema="http://schema.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/"> |
<!-- navBar --> | <!-- navBar --> |
<div id="navbar" class="container"> | <div id="navbar" class="container"> |
<div class="row"> | <div class="row"> |
<div class="four columns"> | <div class="four columns"> |
<h1><a href="/">Disclosr</a></h1> | <h1><a href="/">Disclosr</a></h1> |
</div> | </div> |
<div class="eight columns hide-on-phones"> | <div class="eight columns hide-on-phones"> |
<strong class="right"> | <strong class="right"> |
<a href="getAgency.php">Agencies</a> | <a href="getAgency.php">Agencies</a> |
<a href="about.php">About/FAQ</a> | <a href="about.php">About/FAQ</a> |
</strong> | </strong> |
</div> | </div> |
</div> | </div> |
</div> | </div> |
<!-- /navBar --> | <!-- /navBar --> |
<!-- container --> | <!-- container --> |
<div class="container"> | <div class="container"> |
<?php | <?php |
} | } |
function include_footer() { | function include_footer() { |
global $basePath; | global $basePath; |
?> | ?> |
</div> | </div> |
<!-- container --> | <!-- container --> |
<!-- Included JS Files --> | <!-- Included JS Files --> |
<script src="<?php echo $basePath; ?>js/foundation.js"></script> | <script src="<?php echo $basePath; ?>js/foundation.js"></script> |
<script src="<?php echo $basePath; ?>js/app.js"></script> | <script src="<?php echo $basePath; ?>js/app.js"></script> |
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> | <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> |
<script>window.jQuery || document.write('<script src="js/jquery-1.8.2.min.js"><\/script>')</script> | <script>window.jQuery || document.write('<script src="js/jquery-1.8.2.min.js"><\/script>')</script> |
<script type="text/javascript" src="<?php echo $basePath ?>js/flotr2/flotr2.js"></script> | <script type="text/javascript" src="<?php echo $basePath ?>js/flotr2/flotr2.js"></script> |
<?php | <?php |
if (strpos($_SERVER['SERVER_NAME'], ".gs")) { | if (strpos($_SERVER['SERVER_NAME'], ".gs")) { |
?> | ?> |
<script type="text/javascript"> | <script type="text/javascript"> |
var _gaq = _gaq || []; | var _gaq = _gaq || []; |
_gaq.push(['_setAccount', 'UA-12341040-2']); | _gaq.push(['_setAccount', 'UA-12341040-2']); |
_gaq.push(['_trackPageview']); | _gaq.push(['_trackPageview']); |
(function() { | (function() { |
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
})(); | })(); |
</script> | </script> |
</body> | </body> |
</html> | </html> |
<?php | <?php |
} | } |
} | } |
import logging | import logging |
logging.basicConfig(level=logging.DEBUG, | logging.basicConfig(level=logging.DEBUG, |
format='%(asctime)s\t%(levelname)s\t%(message)s') | format='%(asctime)s\t%(levelname)s\t%(message)s') |
import snd | import snd |
import time | import time |
from datetime import date | from datetime import date |
import threading | import threading |
from pydispatch import dispatcher | from pydispatch import dispatcher |
import wave | import wave |
import serial | import serial |
#python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr | #python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr |
import psycopg2 | import psycopg2 |
import csv | import csv |
import sys,os | import sys,os |
sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma')) | sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma')) |
import pynma | import pynma |
filename = "demo.wav" | filename = "demo.wav" |
MIN_LENGTH = 90000 | MIN_LENGTH = 90000 |
def worker(filename, length): | def worker(filename, length): |
"""thread worker function | """thread worker function |
http://www.doughellmann.com/PyMOTW/threading/ | http://www.doughellmann.com/PyMOTW/threading/ |
https://github.com/uskr/pynma | https://github.com/uskr/pynma |
ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp | ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp |
http://stackoverflow.com/questions/2559746/getting-error-while-converting-wav-to-amr-using-ffmpeg | http://stackoverflow.com/questions/2559746/getting-error-while-converting-wav-to-amr-using-ffmpeg |
""" | """ |
print 'Worker for '+filename | print 'Worker for '+filename |
ser.write("GLG\r") | ser.write("GLG\r") |
line = ser.readline() # read a '\n' terminated line | line = ser.readline() # read a '\n' terminated line |
print line | print line |
reader = csv.reader([line]) | reader = csv.reader([line]) |
for row in reader: | for row in reader: |
#GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE | #GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE |
if (row[0] != 'GLG'): | if (row[0] != 'GLG'): |
print "uh oh" | print "uh oh" |
if (row[1] != ''): | if (row[1] != ''): |
tgid = row[1] | tgid = row[1] |
#nma.push("scannr", "ping", filename, "http://www.google.com") | #nma.push("scannr", "ping", filename, "http://www.google.com") |
tgname = row[7] | tgname = row[7] |
sitename = row[5] | sitename = row[5] |
"""http://initd.org/psycopg/docs/usage.html""" | """http://initd.org/psycopg/docs/usage.html""" |
cur = conn.cursor() | cur = conn.cursor() |
cur.execute("INSERT INTO recordings (filename,tgid,tgname,sitename,length) VALUES (%s, %s,%s, %s, %s)",(filename,tgid,tgname,sitename, length)) | cur.execute("INSERT INTO recordings (filename,tgid,tgname,sitename,length) VALUES (%s, %s,%s, %s, %s)",(filename,tgid,tgname,sitename, length)) |
conn.commit() | conn.commit() |
cur.close() | cur.close() |
else: | else: |
print filename+" has no TGID" | print filename+" has no TGID" |
return | return |
def filenameMaker(): | def filenameMaker(): |
global filename | global filename |
filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav' | filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav' |
def record_to_async_file(): | def record_to_async_file(): |
"Records from the microphone and outputs the resulting data to `path`" | "Records from the microphone and outputs the resulting data to `path`" |
sample_width, data = snd.record() | sample_width, data = snd.record() |
print str(len(data)) | print str(len(data)) |
if len(data) > MIN_LENGTH: | if len(data) > MIN_LENGTH: |
data = snd.pack('<' + ('h'*len(data)), *data) | data = snd.pack('<' + ('h'*len(data)), *data) |
path = filename | path = "./data/"+filename |
dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename, length=len(data)) | dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename, length=len(data)) |
wf = wave.open(path, 'wb') | wf = wave.open(path, 'wb') |
wf.setnchannels(1) | wf.setnchannels(1) |
wf.setsampwidth(sample_width) | wf.setsampwidth(sample_width) |
wf.setframerate(snd.RATE) | wf.setframerate(snd.RATE) |
wf.writeframes(data) | wf.writeframes(data) |
wf.close() | wf.close() |
del wf | del wf |
print("done - result "+str(len(data))+" frames written to "+path) | print("done - result "+str(len(data))+" frames written to "+path) |
del data | del data |
dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any ) | dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any ) |
dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any ) | dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any ) |
print "Opening serial port..." | print "Opening serial port..." |
ser = serial.Serial('COM20', 112500, timeout=1) | ser = serial.Serial('COM20', 112500, timeout=1) |
print "Loading notifymyandroid..." | print "Loading notifymyandroid..." |
nma = pynma.PyNMA( "a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f") | nma = pynma.PyNMA( "a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f") |
print "Connecting database..." | print "Connecting database..." |
conn = psycopg2.connect("dbname=scannr user=postgres password=snmc") | conn = psycopg2.connect("dbname=scannr user=postgres password=snmc") |
print "Scannr started." | print "Scannr started." |
while True: | while True: |
print "ready to record again" | print "ready to record again" |
record_to_async_file() | record_to_async_file() |
ser.close() | ser.close() |
<?php | |
include('common.inc.php'); | |
$tgid = 1; | |
?> | |
<div class="span12"> | <div class="span12"> |
<table width="100%" height="375px"><tr><td valign="middle"><span class="arrow-w" style="font-size:2em;"></span></td><td width="95%"><div id="placeholder" style="width:100%;height:375px;"></div></td><td valign="middle"><span class="arrow-e" style="font-size:2em;"></span></td></tr></table> | <table width="100%" height="375px"><tr><td valign="middle"><span class="arrow-w" style="font-size:2em;"></span></td><td width="95%"><div id="placeholder" style="width:100%;height:375px;"></div></td><td valign="middle"><span class="arrow-e" style="font-size:2em;"></span></td></tr></table> |
<script> | <script> |
var data = []; | var data = []; |
var plot; | var plot; |
var options = { | var options = { |
lines: { show: true }, | lines: { show: true }, |
points: { show: true }, | points: { show: true }, |
xaxis: { mode: "time" }, | xaxis: { mode: "time" }, |
crosshair: { mode: "x" }, | crosshair: { mode: "x" }, |
series: { | series: { |
lines: { show: true }, | lines: { show: true }, |
points: { show: true } | points: { show: true } |
}, | }, |
grid: { hoverable: true, clickable: true } | grid: { hoverable: true, clickable: true } |
}; | }; |
window.onload = function() { | window.onload = function() { |
// graph | // graph |
var placeholder = $("#placeholder"); | var placeholder = $("#placeholder"); |
var plot = $.plot(placeholder, data, options); | var plot = $.plot(placeholder, data, options); |
$("#placeholder").bind("plothover", function (event, pos, item) { | $("#placeholder").bind("plothover", function (event, pos, item) { |
if (item) { | if (item) { |
if (previousPoint != item.dataIndex) { | if (previousPoint != item.dataIndex) { |
previousPoint = item.dataIndex; | previousPoint = item.dataIndex; |
$("#tooltip").remove(); | $("#tooltip").remove(); |
var x = item.datapoint[0].toFixed(2), | var x = item.datapoint[0].toFixed(2), |
y = item.datapoint[1].toFixed(2); | y = item.datapoint[1].toFixed(2); |
var d = new Date(); | var d = new Date(); |
d.setTime(x); | d.setTime(x); |
var time = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear() | var time = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear() |
+ " " + d.getUTCHours() + ':'+ (d.getUTCMinutes().toString().length == 1 ? '0'+ d.getMinutes(): d.getUTCMinutes()); | + " " + d.getUTCHours() + ':'+ (d.getUTCMinutes().toString().length == 1 ? '0'+ d.getMinutes(): d.getUTCMinutes()); |
showTooltip(item.pageX, item.pageY, | showTooltip(item.pageX, item.pageY, |
item.series.label + " at " + time + " = " + y); | item.series.label + " at " + time + " = " + y); |
} | } |
} | } |
else { | else { |
$("#tooltip").remove(); | $("#tooltip").remove(); |
previousPoint = null; | previousPoint = null; |
} | } |
}); | }); |
getData('<?php echo $sensorID; ?>','<?php echo strtotime("12/1/2010") ?>','<?php echo strtotime("12/2/2010") ?>'); | getData('<?php echo $tgid; ?>','<?php echo strtotime("10/10/2012") ?>','<?php echo strtotime("12/10/2012") ?>'); |
}; | }; |
function onDataReceived(series) { | function onDataReceived(series) { |
data =[] | data =[] |
data[data.length] = series; | data[data.length] = series; |
plot = $.plot($("#placeholder"), data, options); | plot = $.plot($("#placeholder"), data, options); |
} | } |
function getData(sensorID,from,to) { | function getData(sensorID,from,to) { |
$.ajax({ | $.ajax({ |
url: "<?php echo base_url(); ?>/sensor/json_graph/"+sensorID+"/"+from+"/"+to, | url: "<?php echo $basePath; ?>/calls.json.php?"+sensorID+"/"+from+"/"+to, |
method: 'GET', | method: 'GET', |
dataType: 'json', | dataType: 'json', |
success: onDataReceived | success: onDataReceived |
}); | }); |
} | } |
function showTooltip(x, y, contents) { | function showTooltip(x, y, contents) { |
$('<div id="tooltip">' + contents + '</div>').css( { | $('<div id="tooltip">' + contents + '</div>').css( { |
position: 'absolute', | position: 'absolute', |
display: 'none', | display: 'none', |
top: y + 5, | top: y + 5, |
left: x + 5, | left: x + 5, |
border: '1px solid #fdd', | border: '1px solid #fdd', |
padding: '2px', | padding: '2px', |
'background-color': '#fee', | 'background-color': '#fee', |
opacity: 0.80 | opacity: 0.80 |
}).appendTo("body").fadeIn(200); | }).appendTo("body").fadeIn(200); |
} | } |
</script> | </script> |
</div> | </div> |