I like it Rob! Ive been messing around with data visualization for an open 
source tank monitoring project a friend and myself are working on. I seemed to 
have settled on google's visualization API, however since its a cloud model it 
really requires the user to have a persistent internet connection. You can take 
a look at http://home.mkzimms.com:8008/tankplay/ for a quick mock up of a 
temperature view i did, we will be doing the interface in extJS later on. 
You'll have to excuse the lapse in data, i was making some changes to my 
monitoring script so it has been shut off for a few days. 

I do however find your solution more appleaing considering the use of a canvas 
on an image which allows for way more customization. I will definitely spend 
tonight playing with it. 

Mike 

----- Original Message ----- 
From: "Rob Conway" <[email protected]> 
To: [email protected] 
Sent: Friday, May 1, 2009 9:45:34 AM GMT -05:00 US/Canada Eastern 
Subject: [Owfs-developers] Ever wanted a SCADA interface for owfs 




As everyone on this list know’s we have the answer to low cost data 
collection,OWFS However there is a missing link which I believe has not been 
explored, creating some standardized display of data that people can use on 
their web servers. The owfs http interface is fantastic from a maintenance 
point of view however does little for someone wanting to publish the 
information via the web. Well after 2 years I think I have found the third 
piece to this puzzle. I have tried all sorts of techniques to get the data onto 
my web site however this is GREAT!. 



Welcome Raphael.js 



This small 100k javascript library enables you to create dynamic graphics (same 
as Scalable Vector Graphics) with no programming at all. 



An example 

<!--Create Gauge Divs--> < div id = "g1" class = "gauge1" ></ div > <!--Create 
Raphael papers and assign to Div ID's--> < script language = "javascript" type 
= "text/javascript" > paper1 = Raphael("g1", 155, 155); 



Now once a canvas (paper) has been assigned you can draw directly onto it 



This creates a circle at x, y, 6 px diameter etc etc Paper1.circle(81, 98, 
6).attr("fill", "silver").attr("stroke", "black"); 



This creates a line and I can rotate the line i.e. gauge pointer! 
Paper1.path({stroke: "red", "stroke-width": 2, "stroke-linecap": 
"round"}).moveTo(80, 100).lineTo(45, 110).rotate( rotation ,81,100); 





If you have not visited my site for a while and are interested in creating 
dials and gauges bar graphs etc take a look www.rjconway.homeip.net 



The gauge background is just an image however the scale graduation, pointer, 
LCD display provides a reusable widget that can display any data. I have 
documented the code so you should be able to see whats going on very easily. 



I get a text file from server (Uses Ajax), Split the txt file into an array and 
then split again so you end up with an array of variables from the simple txt 
file. 



You can see the txt file (better cut and paste the whole line) 
www.rjconway.homeip.net /aqua_tag.txt 



Extract from code Tag(x) array explodes the array[1] into the following: 
[0]Description [1]Engineering units [2]Value [3]Setpoint -NOT USED [4]HighScale 
[5]LowScale [6]HighAlarmValue [7]LowAlarmValue [8]Alarm Status, 0= Normal 
1=High 2=Low  -NOT USED [9]Alarm Acknowledgement 0=Ack 1=UnAck  -NOT USED 
[10]Alarm Time   Epoch -NOT USED [11]Auto/manual, 0=Man 1=Auto -NOT USED 
[12]Scan status, 0=Bad 1=Good [13]Show alarm bands, 0=no bands, 1= Normal 
range, 2=Low alarm, 3=High alarm, 4=Both Low & High Alarm Bands [14] Max value 
last 24hrs (Will be used to show history) -NOT USED [15] Min value last 24hrs 
(Will be used to show History) -NOT USED 



So I simply use the array data to drive the gauges. i.e. to get the value its 
just “Tag1[2]” . The gauge I created has a pointer movement of 212degree’s thus 
there is some calcs based upon the high and low range of the gauge to calculate 
the rotation required, I also calculate the numbers displayed on the 
graduations. The txt file is simply created with a bash script running every 90 
seconds. You can simply change the low / high range in the txt file and the 
gauges will adjust, thus with a simple loop you can animate all the gauges. My 
text file contains 5 different tags. 



I am happy to share any code, the gauges have simply been built in powerpoint 
and I have 4 different coloured gauges. I am working on a set of bar graph 
displays. I know the code looks simple now but it has taken me a lot of time to 
get it to the point of easily refreshing the data, being able to dynamically 
build trends on the fly. I can push on solo with this development or owfs group 
could look at how we could maybe create a more standard interface to get the 
data from the server to the client. Most of the data in the array is fixed or 
calculated via a bash script however a lot of it could also come from the 1wire 
device parameters. 



Can you see the power of owfs, rrdtool and Raphael combined, nobody else has 
this solution for $0.00 ? checkout the Raphael.js web site for other demo 
types. We (owfs group) have a complete solution from data gathering, trending 
and now a rich graphic environment potential all without any real programming. 
If we standardized on a data array set (similar to above) “collectively” we 
could build graphic elements to be simply used within any web site. These 
graphic elements could be part of the owfs web site to be used by everybody. 
You could build a great weather station and not be locked into the interface 
someone else wants you to see. 



I still have some work to do on the gauges, just gotta get the alarm bands auto 
drawn on the scale however thought I would share this as it stands now. You can 
now dynamically change the trend data in real time and redraw the data, this 
bit is really cool. I still have to link the gauges so when clicked they will 
call their respective history for the trend. The web site trend just shows the 
weather at the moment. If you wait 90 seconds and press refresh you can see the 
gauges update, I will eventually put the refresh on a timer. However no time 
this weekend so will finalise it next weekend however wanted to share progress 
with the group to see if I can get any interest in further development or 
potentially some standardization in data transfer. 



rob 
























------------------------------------------------------------------------------ 
Register Now & Save for Velocity, the Web Performance & Operations Conference 
from O'Reilly Media. Velocity features a full day of expert-led, hands-on 
workshops and two days of sessions from industry leaders in dedicated 
Performance & Operations tracks. Use code vel09scf and Save an extra 15% before 
5/3. http://p.sf.net/sfu/velocityconf 
_______________________________________________ Owfs-developers mailing list 
[email protected] 
https://lists.sourceforge.net/lists/listinfo/owfs-developers
------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
Owfs-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to