iotEasy is an open-source, customizable home monitoring platform that enables users to monitor their home according to their specifications without having to worry about the nitty gritty details of wireless communication. The system uses Firefly nodes to monitor homes and communicates data to a central gateway using a multi-hop network that employs Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA). The end user is able to monitor their home using a web page that displays data in text and in a graphical format. The system also provides an easy to use API that allows users to further customize their system.
- Firefly 3.0 Nodes: iotEasy uses Firefly 3.0 nodes to provide sensors and the radio equipment. The nodes are used to sense acceleration, pressure, light, sound, motion, temperature and humidity. The system has two different types of nodes: peers and gateways. The peer is responsible for sending sensor values to the gateway and the gateway receives sensor values and forwards it to an internet-enabled computer. The gateway is also responsible for coordinating the network discovery.
- Local MySQL Database: A MySQL database stores details of sensors of various nodes, their acceptable threshold values, details of alarms set on each sensor and routing details. The database is a data source to the web application and the API.
- Web Application: The iotEasy web application allows the user to view complete details of each node, both as text and graphs. Graphs showing changes in sensor values over time enable a quick summary. The application also displays the topology of the network, showing routes taken by data packets to reach the gateway. The web app also allows users to set thresholds and alarms.
- API: The iotEasy API provides a set of functions, written in Java, to allow developers to design custom applications and systems. The following are the functions offered by the iotEasy API:
public int getValue(int nodeID, String time, String sensor);
Returns the value of a sensor given time and the node ID
public node getNodeStatus(int nodeID, String time);
Returns the values of each of the sensors of a particular node at a given time
public int getThreshold(int nodeID, String sensor);
Returns the threshold for a sensor of a given node for which an alarm is raised
public int getBatteryStatus(int nodeID, String time);
Returns the battery status of the node at a given time
public void setThreshold(int nodeID, String sensor, int new_threshold);
Sets the threshold of a sensor on a node to a desired value
public void setAlarm(int nodeID, String sensor);
Sets an alarm on a sensor on a specified node
public void resetAlarm(int nodeID, String sensor);
Removes any alarms on a sensor on a give node