- Open Access
Mashing up the Internet of Things: a framework for smart environments
© Avilés-López and García-Macías; licensee Springer. 2012
- Received: 3 October 2011
- Accepted: 2 March 2012
- Published: 2 March 2012
Along with the advent of the Web 2.0 came a rich ecosystem of application services allowing developers to use the functionality provided by Web applications into their own customized solutions. This, together with the current developments on the Internet of Things are laying the foundations of new IP-based smart environments in which applications and services are combined to support users in ways not possible before. Recently, most of the research has focused on improving the networking capabilities of the Internet of Things infrastructure and in enabling the access to the following generation of services. However, there are two more issues that need to be attended. First, how data and functionality provided by services on these smart environments would be modeled in order to facilitate abstraction and composition, and second, how users are intended to interact with the environments in order to make applications support their particular needs. In this article, we present a framework and an user-interaction model for Internet of Things applications based on the technologies of the modern Web as a solution proposal for both issues. We start by describing the elements of the framework, and then discuss the user-interaction model by using a case-of-study scenario illustrating the capabilities of our contributions.
- Service Discovery
- Event Notification
- Smart Object
- Execution Engine
- Base Platform
In recent years, the Web has quickly evolved from a read-only source of information into a very dynamic applications platform. In the modern Web, applications no longer provide data and functionality only to human users but also to other systems and applications. Because of this situation, any user with the proper knowledge has now the possibility to build upon existing Web services and data feeds to put together, piece by piece, the needed support for customized application scenarios. This possibility led to the introduction of mashups [1, 2], a concept originated in music that in computer science refers to applications created by mixing and rearranging different sources and service APIs. One of the key technologies involved in mashup systems and into the design of the last generation of Web services are the resource oriented architectures, or more commonly, RESTful Web services [3, 4]. Web services following the architectural principles of REST use HTTP as application protocol, providing a very basic and simple communication platform for applications. A very common example of mashup is a Web application that uses Google Maps to show the location of the most recent pictures or events related to a specific geographic region. The Google Maps API  is used to draw a map and to mark positions on it, other services are queried to retrieve the list of items to show. Mashup systems can be used to combine user-interfaces, data, and functionality.
Another, more important, development is the "Internet of Things" vision [6–8] which seeks to interconnect the physical objects in everyday life through the Internet in effective, practical, and inexpensive ways. The connectivity of the integrated environment of devices of the Internet of Things together with REST-based systems will form the foundation of smart environments in which sensing and computing could be mashed-up in ways not possible before.
Several examples exist today that demonstrate how useful are REST-based platforms for different application domains. The smart grid scenario is one of the most illustrative examples as benefits are clearly identified. A good reference of a smart grid is the Smart Energy 2.0 specification of the ZigBee alliance. Smart Energy 2.0  is a REST-based standard used by devices from different vendors to seamlessly interoperate with the objective to monitor, control, inform, and automate the delivery of energy and water. The IP-based communication of this standard allows devices to work over Wi-Fi, HomePlug, Ethernet, and other communication channels, and, as resources are modeled after a RESTful interface, the only thing that must be standardized are how URIs and data is modeled. Another example of a successful REST-based platform is Pachube . This platform provides a centralized repository of sensorial data for any user interested on sharing readings. Resources on the platform, consisting on the readings, are consumed through a REST interface and data is modeled after an standard to describe sensorial information. Pachube is also an instance of something that will be very common on the Internet of Things. Data will progressively cease to come from direct intervention of the user, through keyboards, touch-enabled surfaces, or other input devices, and will start to come from sensors and context induced by the natural interaction of the user with environments.
There is a large number of issues that must be resolved in the current Internet before it can be used as a proper infrastructure for the next generation of application services. This seems to be one of the reasons why most of the research on the Internet of Things has been focused into improving the current networking infrastructure and into providing the access for physical devices through the Internet. There are two important issues that haven't yet been fully addressed. They are: how the services and data available in the Internet of Things will be modeled to facilitate its composition and abstraction, and, how will users interact with these new smart environment applications composed by pieces of independent functionality.
In the following Section, we discuss some of the issues on the aggregation and composition of REST services and propose an architecture that can be used as a point of reference for platforms that presents the basic mechanisms needed to support mashups for the Internet of Things. In Section 3 we discuss the interaction of users with smart environments and present our interaction-model based on an mashup editor from which the environment functionality is changed or improved. In Section 4, we present a case of study scenario where the architectural elements and the user-interaction is illustrated. Section 5 includes a discussion of the related study and how our contributions differ from other proposals. Finally, in Section 6, we conclude with some final remarks and outline the future study.
The Internet of Things can greatly benefit from mashup technology. The common functionality for a number of scenarios in a particular domain can be identified and isolated into single, language agnostic, and independent Web services that can be later combined into new applications. Mashups not only offer a solution for composition, they can be also used as a mean to delegate processing for data-mining or aggregation, and generate new resources that are more manageable and scalable. There are some studies that are starting to bring services in representation of physical entities into mashups. The terms ubiquitous computing mashups  and physical mashups  are being used to refer to those efforts. In a similar way, there are other works trying to bring the notion of time, place, and other contextual information into traditional Web applications (for instance, the W3C's UWA Group ). Our architecture offers a comprehensive solution for mashups in the Internet of Things as it not only features the access to physical entities, but also provides the means for service discovery, event notification, aggregation of resources, deployment of applications, and importantly it is designed around the an user-interaction model based on ambient-intelligence (AmI) applications, as described in Section 3.
As with any infrastructure that allows the creation of mashup applications, our architecture features the following set of mechanisms:
A way to describe each service in terms of their functionality.
A way to discover the services that are available in the environment the user is in.
A way for the services to communicate with interested peers when an event occurs.
An easy way to combine data and functionality from services.
2.1 Services description
Each element in our architecture consists of a RESTful Web service. One of the reasons why this kind of service has been used in recent services-based platforms is that they are more suitable for ad hoc integration . REST services do not need special proxy objects to handle service calls as they are accessed through simple HTTP requests; a feature available in most modern programming-languages. Interacting with a RESTful Web service is no different than opening a webpage, or sending a form. Services provide resources (e.g., webpage, data file, image, etc.) when receiving HTTP GET requests, and handle changes on the resource by receiving POST, PUT, or DELETE requests.
One of the main issues with RESTful interfaces is that they lack a well-defined standard description language because of their own architectural restrictions. A REST-based API should not define fixed resources names, so the complete interface of a service could not be acknowledged a priori. This architectural constraint states that "hypermedia should be the engine of the application state" . This is, after an initial request, the content of the response must include a relationship of further URIs that can be used to continue requesting resources according to the application flow. For example, if a user is searched on a bank's database, the resource containing the user's information should contain URIs for each of his bank accounts. However, we do need to define what starting URIs the clients could use. In the bank example, we would need to know where to send the request for the user search.
HTML. A Web page designed to be used by a human user. This representation must provide access to all the functionality offered by the service.
XML. A valid representation in an XML schema related to the functionality provided by the service.
JSON. A JSON file containing the same data as the XML representation. Services featuring this data format must also provide a JSONP alternative.
ATOM. An Atom feed whose items are augmented with XML tags of the related XML schema.
2.2 Service discovery
The service discovery mechanism of our base platform should be based on any protocol that can identify networking services on a local network. During prototyping we used Zero configuration networking (Zeroconf) , a protocol originated on a IETF working group. We use the capabilities of Zeroconf to advertise services. To do so, once a service is ready to receive requests it must be registered in the environment by broadcasting its description through the Zeroconf implementation. The description of a service consists of the following attributes: the service name, a human-readable description, the host name and port number of the network resource, a base URI in which the REST endpoints are contained, the URL of the hub service that is used to broadcast event notifications (explained in Section 2.4.4), and the interfaces the service implements (URLs to WADL specifications). The Zeroconf protocol is currently used by many printer vendors, Wi-Fi cameras, and others. Users of the protocol are expected to find a device as soon as it joins the network, much like an USB device connecting to a computer.
2.3 Event notification
While not really part of RESTful architectures, our architecture defines as events the notifications about the update of a resource sent to interested entities. The event notification mechanism allows the interchange of context information and control messages by alerting services running in the platform when a resource containing such data is updated.
The design of the mechanism is based on the PubSubHubbub protocol , or Hubbub for short, which introduces a special entity called hub into the traditional publish/subscribe communication model. In Hubbub, once that a consumer makes its first request for a provider's resource, the response representation contains a link pointing to the hub service used by the provider to advertise resource updates; consumers interested in receiving notifications for that particular resource must send a subscription request to the linked hub. The hub stores a local copy of the representation that will be updated after it receives a ping request from the provider notifying him that new data is available. If this does not happen within a certain time window, the hub requests the resource by itself and updates its local copy; whenever the resource is updated, the hub notifies each of the subscribers which can then request the hub's updated representation.
At the moment, Hubbub only supports resource representations in the Atom and RSS feed formats as they allow the documents to contain links to related resources, in this case, to hub services. However, we extend these capabilities by adding support to other possible representations. References to hub services are expected as links within documents or as an attribute in service's descriptions. In this way, services that cannot include links in the representations because of limitations in data formats, can point to a hub in the service's description. Additionally, if a service declares to implement the Hubbub protocol but does not point to a hub in any ways, an execution engine will search for an available hub service in the environment to use it for event notifications during the application flow.
2.4 Execution language and engine
In mashup systems, an application is actually a composition of services put together to provide the logic needed for an application. In order to build such applications, we need first to describe the service composition using whatever language is available in the platform that will run the mashups. As stated before, the definition of a formal description for REST services has yet to be standardized; general composition languages such as WS-BPEL [17, 18] or EMML  which are highly dependent on the full service descriptions are having difficulties to offer an easy to use solution for unexperienced developers. Being general-purpose composition languages, they are very fine-grained systems so developers must be aware of how requests, representations, and the individual logic will be mixed up together. To confront all these issues, we propose a simple composition language in which the application logic is expressed by describing the dependencies between coarse-grained component services. Each composition step is performed accordingly to the interfaces that the involved services implement, so the full application logic can be expressed as a simple and straightforward pipelining logic graph. Applications in our framework are described by documents called application manifests, which define:
The services involved in the composition (which can be specific or generic) and their description.
The flow between the services.
The mashup outputs where the final data or functionality will be served.
Application control data such as execution schedule, authentication credentials, and other meta-data.
The scenario of use for traditional mashup systems is rather simple: once a composition is defined, it is sent for execution to a server; the server runs the composition and exposes any resources generated throughout the application flow. Systems providing ubiquitous or physical mashups, in the other hand, should integrate additional special characteristics. In our platform:
An application manifest is not only run on publicly available servers, they can run on local closed environments, personal mobile devices, and so on.
The user can be a part of the execution flow (e.g., to select between alternatives).
Composition could include previously unknown services that implement certain generic interfaces.
Notification events from physical devices or context providers are involved in the application flow.
The execution of applications can be scheduled.
Users can share and collaboratively design application manifests using the different available execution engines (with the appropriate permissions).
Services representing objects in the real world are managed through permissions and access control.
The following sections detail how mashup applications are executed.
2.4.1 Deploying manifests
2.4.2 Running applications
Once an application has been deployed, the Scheduler component will start its execution at the time indicated in the manifest. Applications can be started immediately, at a certain time, or just put on hold. Also, for simple application flows, where real time notifications are not involved, the manifest can declare additional starting times or a repetition scheme. Whether the applications are running or not, they can be controlled by the direct interaction with the Scheduler component using the/engine endpoint.
2.4.3 Logical recipes
To actually "run" mashups, the application flow as described in the manifest is first transformed into a logical dependencies tree. Then, the Service Invoker component examines each node and tries to match its current conditions against the requirements of a logical recipe which is used to handle the actual processing required for that step in the mashing process. The conditions of a step refer to: the description of the service represented by the current node, the presence or availability of the same service, and the services used by this node. The requirements of a recipe declare: the interfaces that the target service must implement, the interfaces implemented by the services involved, and how recent a resource from such services must be in order to be used for processing the logic provided by the recipe. We based the concept of recipes on the fact that many of the composition tasks present very similar situations. For instance, in our example application, we could expect that the functionality expressed by the connection of every instance of the KML Generator interface to a Map Builder interface is to generate a map widget highlighting hotspots from the file. If that is not the case, we could easily add more recipes to an execution engine by posting a new recipe resource (which includes requirements and the script to handle the composition step) into the/recipes endpoint.
2.4.4 Handling requests and events
To fulfill the composition step accordingly to the recipe, the service invoker casts all the involved requests for resources. As responses arrive, they are mixed (by the recipe's scripting) into a new resource that will be stored in the current node of the full logical tree. To handle events, the Service Invoker subscribes itself to the resources for which it requires notifications by using an intermediary hub service. Here is where service discovery is used to find a hub in case one of the services declares to implement the push-subscriber interface but does not include a link to one. After subscription, event notifications arrive to the/callback endpoint of the execution engine, where the scheduler identifies the target application manifest and activates the execution of the node where the subscription was made. Whenever a step of the application flow is completed, service invocation is activated on every child node to possibly update any derived resources.
2.4.5 User inputs
It is handled by services whose resources represent user interactions. As other publisher services, they implement the push-publisher interface so they can halt the execution of an application manifest until a response from a user is received.
2.4.6 Output endpoints
The resources generated on each composition step are stored on the services dependency tree. Sometimes, the application's complete functionality is performed by the accumulation of each individual service request, other times, the final objective of a mashup is to provide new resources. To support this, the application manifest includes outputs declarations into the application flow. In the example application (see Figure 5), all connected services end up in an output which generates source code that users can copy and paste into Web pages. To interact with outputs, each execution engine exposes the outputs of the applications in the/outputs endpoint. Output resources are not just plain, simple documents. An application could be kept running and updating those resources. In the example, sensing readings will be constantly notified. Widgets on the platform are supposed to receive PubSubHubbub updates on the client's side, so outputs are always updated, living documents. Additionally, an output resource can be declared to implement interfaces, as a normal service, so the discovery mechanism can identify and include them into compositions.
2.4.7 Sharing applications
Multiple users can simultaneously use execution engines. To collaboratively design applications, they could update the same manifests by interacting with the/apps resources. We have included a special sharing alternative: the ability to export application manifests. Exported manifest contain along with the original document, the definition of all the recipes found suitable by the execution engine at hand. So, if a developer wants to take an application into another execution engine it will be executed on the same way (provided that both engines are implemented with the same scripting technology).
In the following section, we present our user-interaction model based on the framework described above. On section 4, we discuss a sample scenario with the settings of the architectural elements and the interaction following the complete model.
Besides providing a good infrastructure foundation for smart environments, we must address the question of how users are expected to interact with such environments. We think that, in order to illustrate this interactions in smart Web-based environments on the Internet of Things, we can use scenarios depicted on the AmI  and ambient-assisted living (AAL) visions.
The term AmI is used to refer to smart environments that are sensitive and responsive to the presence of users. Hardware devices and software services in smart environments are expected to work together to support users in their everyday activities in easy, natural ways hiding at the same time the network and other low-level details that support the environment. The AmI paradigm is characterized by systems and technologies that are [21, 22]:
Embedded. Many small-networked devices are seamlessly integrated into the environments.
Context-aware. That can recognize users and their situational context.
Personalized. That can be tailored towards the user's needs.
Adaptive. That can change in response to user actions or other events in the environment.
Anticipatory. That can anticipate users' desires without conscious mediation.
The AAL term refers to the application of ambient technology to assist individuals in performing everyday activities. This term is very similar to AmI, but the AAL systems present the following additional characteristics:
Invisibility. They are embedded in clothes, watches, eyeglasses, and other day-to-day items.
Mobile. They can be transported by the user and have the ability to act in different environments.
Spontaneous. They can communicate dynamically with many previously unknown devices.
Heterogeneous. They integrate several different types of hardware and software entities.
Proactive. They can act in behalf of the user after the user activities inferred from his behavior.
Natural. They communicate the user in natural ways such as voice and light.
To further illustrate how the user interacts with smart environments according to the concepts of the AmI and AAL visions consider the following scenario:
Mr. Smith is a senior of advanced age who, due to the physical inabilities that come with age, needs a wheelchair to move around his house. Whenever Mr. Smith is close to a door, he presses a button on his watch and the door opens, the same happens when he is close to a window. When Mr. Smith needs the assistance of another person, he presses the button again, and an email and IM alert is sent to the closest person around the area where he is providing him with Mr. Smith's location and identification details.
In the above scenario, the smart environment is supporting the user but the user by himself does not actively alters the functionality the environment is ready to provide. This scenario requires someone, a "power user", to set up how services in representation of doors and windows should act when the button on Mr. Smith's watch is pressed. In the following section, we present our infrastructural model in which we detail how the interaction of users would be in both cases: the passive, in which users take advantage of services and applications available in environments, and the active, in which power users arrange the services available in an environment to define new applications.
Following the concepts and characteristics introduced above, we can identify two scenarios of interaction between the user and the smart environment. One, in which the environment implicitly supports the users according to the functionality of existing applications, and other, in which the user explicitly creates or modifies an application on the environment. For the first scenario, our framework considers users carrying devices with them that allows the environment to detect and track their presence. For the second scenario, the user interacts with the environment through a mashup editor he can use to create new applications using the available services or even previously created applications.
As discussed above, the interaction model has two different approaches. In one, applications on the execution engines react to changes on the environments initialized by the presence of the user or other related resources. In the other, the user actively makes changes on the applications in execution engines by using the mashup editor. In this scenario there are multiple possible applications. One of them is one that turns out the lamp on the corner, closes the window shade, and dims out the lights in the room whenever the home entertainment center is playing a movie. Other possibility is one application that turns on the lights and closes the shade when the day starts growing dark. These applications are really simple and the user might be able to write the needed recipes by himself. But, there could be situations, for example, when the user purchases a new device, that could require the user to obtain a recipe from a website, or by having the assistance or a technician. Execution engines will use devices and services on application manifests but the user or any other entities can still use them.
Lets discuss the implementation of the scenario in which the entertainment center plays a movie, dims out the lights and closes the window shade. The first thing we need is to identify what is the dependency between devices. In this scenario, the starting point is the entertainment center, whenever the resource that contains the status of the device changes, we need to receive an event notification in order to continue other actions. So, before using the mashup editor to create the application manifest, we must be sure that we count with the proper service implementations. First, the entertainment center must provide a resource containing information about its current status through a REST interface. Second, we need at least one hub service available so we can subscribe to the updates of the entertainment center resource. And third, the light dimmer and the window shade must count each with a service accepting updates of its status resource so if we update it a physical action will occur. Once the services are all running and detected by the service discovery mechanism, they will appear on the mashup editor the user carries with him. Here, he just needs to drag each service representation and to draw a line between the dependencies. Suppose this is the first time the user needs this dependency scenario. The editor will not find any recipes for the needed functionality. So, the user will need to write a recipe for each connection on the dependency tree. The needed recipes for this functionality are:
The event subscription to the entertainment center status resource using any hub service available at the time on the environment.
The request for the lights to dim out accordingly to the updated entertainment center status resource.
The request for the window shade to close accordingly to the updated status resource.
The following studies present some similarities with our proposals but differ in how services are handled towards composition or in how the user-interaction is when creating applications through mashups.
López de Ipiña et al.  present Sentient Graffiti (SG), a platform following the Internet of Things concept where users accompanied by mobile devices or Web browsers can browse, discover, search, annotate, and filter surrounding smart objects in the form of Web resources. In this infrastructure, users carry an SG client which they can use to add annotations to objects on spatial regions, they can also browse (physically or virtually) an environment to consume the available annotations. While this effort considers AmI environments, specifically, the ambient-intelligent systems requirements, it considers the services as passive entities, requiring the users to explicitly initiate the interaction with smart objects.
Vazquez et al.  present the concept of "social device" and talk about their study on implementing a couple of prototypes to evaluate the potential of their framework to support the integration of smart devices into the Web. Their focus differs to ours in the sense that the authors want to make devices interact between each other in the same way people interact through Web 2.0 social services. We are more focused on the interaction on site and in how users would interact with smart environments by easily creating mashups.
Zhang et al.  present the advanced Internet of Things (AIoT) paradigm based on the unified object description language (UODL) proposed by the same authors. UODL allows identifying and interconnecting every object and event with a standard format, making available all the information and events related to the objects, and make the control by management and third party entities easy and flexible. The AIoT paradigm and our framework both take care of identifying objects, handling discovery, and providing a deployment mechanism but the main difference is the way objects are modeled. Our framework is based upon REST and every single framework element is a service that provides resources via simple HTTP requests. Because of this, any existing third party service using HTTP as application protocol can be easily integrated into our framework. In the same way, our framework can directly use the same technologies for security and data privacy as the available on the traditional Web. Finally, AIoT doesn't directly involve the user in the environments where the applications are deployment, our framework is designed to allow users to crate or modify such applications following the mashups concept.
In this article, we have talked about how the Internet is progressing towards the Internet of Things and discussed two important problems, which are, how the resources and functionality of the different next generation services would be composed, and how the user interaction would be in terms of the access to the resources provided by the environment, and in terms of how they would create new applications for their particular support demands. To handle both issues we propose a base platform architecture and an user-interaction model based on the AmI applications and AAL concepts.
In order to corroborate our contributions, we have implemented a working prototype of our platform and used it to build test applications for a variety of scenarios. We also used the implementation to conduct a usability study with a small developers group consisting of engineers both experts and novel in Web programming. The test was based on the cognitive-dimensions framework  and the participants were requested to build an application using the mashup editor. Preliminary results show users have no problems identifying each of the platform elements and what is the role of each one in providing the final support of the requested applications.
The Web-based support for the Internet of Things seems to be the best way to promote interoperability and easiness of access to resources. Certainly, it is not always the best way for applications scenarios where quality of service, latency, and consumption of energy are important issues. Experimentation conducted with our prototype on different scenarios seems to support these thoughts. Fortunately, there is a very active research on protocols upon where the Internet of Things could rely upon. One of such protocols is CoAP  which allows low-end, 8-bit devices to use HTTP-like intercommunications. One of the many benefits of CoAP is that it is easily translatable into the full HTTP protocol enabling the valuable Web-based support.
With the introduction of our mashups-based platform architecture and user-interaction model we intend to provide a base upon where more advanced platforms and applications could be designed and built. We are working into conducting further evaluations to better assess the suitability of our base platform in providing support for smart environments.
aThe implementation is open and can be downloaded from: http://www.ubisoa.net/.
The study presented in this article was funded with grants from CONACyT, the Mexican Council for Science and Technology.
- Hartmann B, Doorley S, Klemmer SR: Hacking, mashing, gluing: understanding opportunistic design. Pervasive Comput 2008, 7(3):46-54.View ArticleGoogle Scholar
- Alibinola M, Baresi L, Carcano M, Guinea S: Mashlight: A Lightweight Mashup Frame-work for Everyone. In Proceedings of the 18th international conference on World Wide Web, WWW'09. Madrid, Spain; 2009.Google Scholar
- Fielding RT: Architectural styles and the design of network-based software architectures. PhD thesis, University of California, Irvine; 2000.Google Scholar
- Richardson L, Ruby S: RESTful Web Services. O'Reilly Media, Inc., Sebastopol, USA; 2007.Google Scholar
- Google Maps API[http://code.google.com/apis/maps]
- Gershenfeld N, Krikorian R, Cohen D: The Internet of Things. Sci Am 2004, 291(4):76-81. 10.1038/scientificamerican1004-76View ArticleGoogle Scholar
- Schoenberger CR: The Internet of Things. Forbes Mag 2002, 169(6):155-160.Google Scholar
- Rellermeyer JS, Duller M, Gilmer K, Maragkos D, Papageorgiou D, Alonso G: The software fabric for the Internet of Things. In Proceedings of the 1st international conference on the Internet of Things, IOT'08. Volume 4952. Springer-Verlag, Berlin, Heidelberg; 2008:87-104.Google Scholar
- ZigBee Alliance: ZigBee Smart Energy 2.0 Specification.2011. [http://www.zigbee.org/]Google Scholar
- Pachube: Real-Time Open Data Web Service for the Internet of Things.2011. [http://pachube.com/]Google Scholar
- Guinard D, Trifa V, Wilde E: A resource oriented architecture for the Web of things. In Proc of IoT 2010 (IEEE International Conference on the Internet of Things). Tokyo, Japan; 2010:1-8.Google Scholar
- W3C Ubiquitous Web Applications Group[http://www.w3.org/2007/uwa/]
- Pautasso C, Zimmermann O, Leymann F: RESTful Web services vs. "big" Web services: making the right architectural decision. In WWW'08: Proceeding of the 17th interna-tional conference on World Wide Web. Beijing, China; 2008:805-814.View ArticleGoogle Scholar
- Handley MJ: Web application description language (WADL).W3c member submission, Sun Microsystems, Inc; 2009. [http://www.w3.org/Submission/wadl/]Google Scholar
- Zero Configuration Networking (Zeroconf)[http://www.zeroconf.org/]
- PubSubHubbub Project[http://code.google.com/p/pubsubhubbub]
- OASIS Web Services Business Process Execution Language (WS-BPEL)[http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsbpel]
- Pautasso C: RESTful Web service composition with BPEL for REST. Data Knowledge Eng 2009, 68(9):851-866. 10.1016/j.datak.2009.02.016View ArticleGoogle Scholar
- OMA EMML Documentation[http://www.openmashup.org/omadocs/v1.0]
- Aarts E, Harwig H, Schuurmans M: The Invisible Future: The Seamless Integration of Technology into Everyday Life. McGraw-Hill, Inc., NY, USA; 2002.Google Scholar
- Weber W, Rabaey JM, Aarts EHL (Eds): Ambient Intelligence. Springer, New York, USA; 2005.Google Scholar
- Nehmer J, Becker M, Karshmer A, Lamm R: Living assistance systems: an ambient intelligence approach. In ICSE'06: Proceedings of the 28th International Conference on Software Engineering. Shanghai, China; 2006:43-50.View ArticleGoogle Scholar
- Restlet: RESTful Web Framework for Java.[http://www.restlet.org/]
- Apple Bonjour[http://developer.apple.com/bonjour]
- Avilés-López E, García-Macías JA, Villanueva-Miranda I: Developing ambient intelligence applications for the assisted living of the elderly. In Intl Conf on Ambient Systems, Networks and Technologies (ANT 2010). Paris, France; 2010.Google Scholar
- López-de-Ipiña D, Vazquez JI, Abaitua J: A Web 2.0 platform to enable context-aware mobile mash-ups. In AmI'07: Proceedings of the 2007 European Conference on Ambient Intelligence. Volume 4794. Springer-Verlag, Berlin, Heidelberg; 2007:266-286.Google Scholar
- Vazquez J, López-de-Ipiña D: Social devices: autonomous artifacts that communicate on the Internet. The Internet of Things 2008, 308-324. [http://dx.doi.org/10.1007/978-3-540-78731-0_20]View ArticleGoogle Scholar
- Guinard D, Trifa V: Towards the Web of things: Web mashups for embedded devices. In WWW'09: Proceedings of the 18th international conference on World Wide Web. Madrid, Spain; 2009:678-683.Google Scholar
- Guinard D: Mashing up Your Web-enabled home. Adjunct Proc of ICWE 2010 (In-ternational Conference on Web Engineering), Vienna 2010, 6385: 442-446.Google Scholar
- Zhang L, Mitton N: Advance Internet of Things. iThings Dalian, China; 2011. [http://hal.inria.fr/inria-00634290]Google Scholar
- Green TRG, Patre M: Usability analysis of visual programming environments: a cognitive dimensions framework. J Visual Lang Comput 1996, 7: 131-174. 10.1006/jvlc.1996.0009View ArticleGoogle Scholar
- Constrained Application Protocol (CoAP)[http://tools.ietf.org/html/draft-ietf-core-coap]
This article is published under license to BioMed Central Ltd. This is an Open Access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by/2.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.