Thursday, July 29, 2010

Deep Dive: What is a Data Point

In Nimbits, everything revolves around a Data Point. A Point represents a single collection of time series data. A single temperature reading and any single value that changes over time.  

Your personal collection of data points are connected to the account you were logged in with when you created them.

To create a new Data Point, simply log into Nimbits and select Green Plus sign in the data point tree. You'll be prompted to give the point a name. When a point is created, it is initialized with a zero value at the time of it's creation UTC.


From there, you can double click on that point to view it's chart, map, gauges and anything else. Also, a drop down menu is available to configure the point's properties.




Here is an overview of some of the more important properties a point can have:


Compression

As a value is recorded into a Data Point, the Compression value is referenced. Nimbits only records changes in values. So if a Data Point has a current value of Zero (0) and a Zero value is recorded, there will not be two zeros in the database, the new value will be ignored since the value has not changed.

If a Data point has a compression setting of 1 (One) and a current value of 3.14 and a new value is entered of 3.5, the value will be ignored. Only values that are higher or lower than the current value +/- the compression setting will be recorded as new values.

A Compression setting of 5 and a current value of 100 will ignore all recorded values  less than 105 and greater than 95.  A if the value 106 is recorded into the same point, future recordings less than 111 and greater than 101 will be ignored.

Alerts

All data points can be configured to send alerts.  Set a high and/or low value in the alert settings and turn the high or low alert on and any recorded value greater than the high alert or lower than the low alert will trigger an email to the owner of that point.

Calculations

When a data point is written to with a new value, the event of recording a value can trigger a calculation. The formulas basic arithmetic will be executed and the resulting value will be recorded into the target point – all compression, alerts and other functionality will then be executed.

A Data Point can be a trigger, parameter or target for a formula.

If a point is a trigger and a new value is written to it (see the record value diagram – the new recording must be outside compression settings etc) the formula assigned to that data point will be executed. Usually, the trigger data point is also the X parameter in the formula.

After the formula executes successfully, the resulting double value is stored in the target point and all Record Value settings are processed (Such as Alerts, Compression etc)

Example
A Point is created that has a temperature of degrees F being record to it. The point is set to be a trigger and is also the X variable in this formula (X-32)*(5/9) which is the formula for converting F to C.

A New Data point is created for storing the result of this formula and is then set as the target for this formula in the F Point’s settings. Now, each time the F point is written to, this formula will be executed using the new value as the X Parameter and the result will be stored in the new C Point.  


[Date In] Logging Text Data


Throughout the Nimbits System we've added support for logging text and GPS data along with each value you record.  When you record a value to a data point, that value has a time stamp and numeric value. Such as a Temperature reading of 80 degrees at a specific moment in time. Now, each recorded value can also have a text based note and GPS location coordinates recorded with it.

Every day, when I go jogging, I stop at the end to record how far I jogged in Miles using Nimbits for Android. on my phone. With these new features I also can add some text such as where I was Jogging to produce a chart like this one on the Nimbits Portal:



I like to annoy my friends with this information, so I configured my data point to post new values to twitter and Facebook, producing a wall post like this the one below each time I record a value. Coincidently, my data point that tracks a servers backup time was also posted next to my jogging post, so i'm including that here too:



On my Phone, I'm capturing GPS Location coordinates. Those can be recorded to the data point as well, producing a display of point data on a map like this:



Nimbits is now a full featured GPS Data Logger for text and numeric data. Enjoy!

Nimbits For Android 2.0 Released!

Nimbits is a General Purpose Data Logging System for any values that change over time. It allows you to record text or numeric data into "Data Points" so that data can be shared, charted, calculated against and visualized from anywhere in the world.

We're proud to announce a new release of the Nimbits Android App that is now available for download on the Android Marketplace. It's build on Android 2.2 (Google API 8) so if you do not see it listed in the marketplace when you search for "Data Logger" or "Nimbits" perhaps you need to update your phone's OS.

Version 1.0 of Nimbits simply allowed you to view existing points you created on the Nimbits Portal. Besides the cosmetic enhancements to the interface, Version 2 allows you to:   
  • Create New Points and Categories on your phone
  • View your points on Google Earth (if they have GPS coordinates)
  • Record values to data points (both numeric and text) using your phone
  • Use your phone's GPS unit to record the location on earth of your data entry. 
  • Enhanced account authentication uses your phone's credentials to log into Nimbits; you do not need to enter your Google account and password. 
  • Better performance by caching points on your phone's local database.
We're very happy with the way the app can use the Google credentials on your phone to authenticate to the Nimbits cloud instead of requiring you to log in with your credentials.

Nimbits has grown beyond simple numeric data logging into a full featured GPS Data Logger. You can use your phone's GPS to assign coordinates to your readings as well as log textual data with your entries. That data will show up on your Nimbits Portal, Google Earth etc.

An example making use of Nimbits' GPS Logging capabilities can be demonstrated with these data points that are logging Radon levels in the basement of several homes. Each Radon Monitoring device feeds data into a Nimbits Data Point. Each Data Point is configured with an Alarm Setting of 4.0 or higher. Further, each data point has GPS coordinates set to the location on earth where the monitor physically is located.

Using my Nexus One phone I can see the current values of my Data Points. Here, I also pressed the menu button to show what options are available on this screen:



I can select an individual point to manually log a new value and see a thumbnail chart:


The GPS Enabled message means that when I record this value, the current physical location of the phone be recorded with the current value, and the data point itself will be set to that location.  I can now see my changes on the map with the points that are in an alarm state shown in red.


We may want to check on the people living in the house with a radon reading over 6!  (this is of course for demo purposes)

I hope you get some use out of the Android App, and please let me know if you have any questions or comments.





Friday, July 16, 2010

[Data In] Connect Arduino to Nimbits Data Logger

It's very easy to have an Arduino device feed data up into the Nimbits Data Logger cloud. This is a fun and simple example where a push button that is wired to an Arduino board sends the fact that it was pressed to a listening .net program.  In this example, every time the push button (my house's doorbell) is pressed, a Nimbits data point gets updated and the event is broadcast on Twitter and Facebook.


This is a simple example to give a basic understanding of how to send output from an Arduino device to Nimbits Data Points.

Make sure you log into Nimbits and create a data point. In this example, my data point is called "doorbell".

Double click on the data point and edit it's properties from the menu on the top left. Here is where you can set  the point up to broadcast new values to twitter, facebook or to send you an IM. Make sure you use the menu items to enable these features on your account.



The Circuit

The circuit is right out of this tutorial on the Arduino Home Page: http://www.arduino.cc/en/Tutorial/Pushbutton

The Arduino Code:

A small mod to the code on the sample page will wait until the button is pressed and released before sending the "Ding Dong" message up the serial (USB) connection.


int inPin = 7; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
boolean pressed = false;

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inPin, INPUT); // declare pushbutton as input

}

void loop(){

val = digitalRead(inPin); // read input value
if (val == HIGH) { // check if the input is HIGH (button released)
if (pressed)
{
//must have just been release
pressed = false;
Serial.println("Ding Dong");
}
digitalWrite(ledPin, LOW); // turn LED OFF
} else {
pressed = true;
digitalWrite(ledPin, HIGH); // turn LED ON
}
}



The Windows Program.

You can download Visual Studio 2008 Express to write this simple console application. Create your new project and add the NimbitsSDK as a refrence.  [Download the Nimbits SDK] [Source code]

The SDK simplifies logging in securely with your google account.

Now it's just a matter of running this code to monitor our com port. You'll need to add the credentials you used to log into nimbits, the target data point, and the com port your Arduino is on.:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace NimbitsDoorBell
{
class Program
{
static SerialPort ComPort;
private static string PortName = "COM4"; // Check device Manager for Port Number
private static NimbitsSDK.client SDK1 = new NimbitsSDK.client("example@gmail.com", "password");
private static String pointName = "doorbell";
private static int timesPressed = 0;

static void Main(string[] args)
{

ComPort = new SerialPort(PortName, 9600);
ComPort.Parity = Parity.None;
ComPort.StopBits = StopBits.One;
ComPort.DataBits = 8;
ComPort.DataReceived += OnSerialDataReceived;
ComPort.Open();
while (true) { }

}
public static void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
{
string data = ComPort.ReadLine();
Console.WriteLine( data);
timesPressed += 1;
SDK1.RecordValue(pointName, timesPressed, DateTime.Now, "Doorbell Rang");
Console.WriteLine("Ding Dong" + timesPressed);
}
}
}



That's it! Now every time the button is pressed nobody will be out of the loop!