Publish and Subscribe using SignalR in Home Automation – Part 3

using signalR aspnetmvc knockoutjs javascript jquerymobile x10

Part 1 – Synchronizing webpages across devices with SignalR
Part 2 – Architecture for a SignalR Synchronized Webpage Application
Part 3 – Publish Subscribe using SignalR
Part 4 – Front End Code Review

I previously covered the overview and architecture for a home automation application using signalR, knockoutJS, and asp.net mvc in previous posts. In this post I will dive into the sequence diagram of how a ui interaction, to turn on a light bulb sends messages through the application.

I will walk through the technical portion of a simple user story.

As the home owner, I want to turn on my light from my phone before I get home and walk in the door, so that I don’t trip over the dog.

image

This is what the storyboard looks like in for the application.

image

This is the user interface interaction which starts this event in the application.

 

Above, I have outlined the story board in which, the user navigates to the application from their phone, and they then click on a button in the application. When they walk in the door, they are delighted by how far technology has come.

image

Sequence diagram of the startup, page load, and light on interaction.

The figure above shows a few interesting system interactions.

  • The Agent startups and immediately subscribes to the webserver to start receiving events to turn lights on and off.
  • A browser connects to the website, loads a page, then subscribes to state change events. This allows a device like a tablet to stay in sync as a light is turned on from a mobile phone.
  • A browser then turns on a light by changing the toggle button on the screen. From there the webserver broadcasts the UI change to all the connected web browsers, then it sends a message to the agent to turn on the light. The agent then calls into the x10 command line and issues the on command.  Depending on the outcome of that command, the success or failure is then messaged back to the webserver.  When the updated state of the light is received it is sent to the browsers. This last step is really used for the case where the Agent not being able to change the state of the light. This is called a compensating action.  The browsers should already show the correct state, because the webserver already broadcasted the state change, assuming the agent could correctly execute the command.

The use of the publish/subscribe and messaging patterns helps the application present a more cohesive and responsive feeling to users who may change the state from a phone, but also have a tablet running in their kitchen.

The nature of using signalR as a message bus to publish events and allow various components of the application subscribe to those events allows the application to decouple each component in a healthy way. Making some assumptive events in addition to making corrective events in the case of a failure of a particular command, like turn on the light, are really easy and clean in terms of the implementation using SignalR.

In the next post, I will walk through the code in this scenario in details.

Follow me on RSS and Twitter

Related Articles:

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

About Eric Hexter

I am the CTO for QuarterSpot. I (co)Founded MvcContrib, Should, Solution Factory, and Pstrami open source projects. I have co-authored MVC 2 in Action, MVC3 in Action, and MVC 4 in Action. I co-founded online events like mvcConf, aspConf, and Community for MVC. I am also a Microsoft MVP in ASP.Net.
This entry was posted in .Net, Asp.Net, Asp.Net MVC, c#, jQuery, jquery mobile, knockoutJs, Open Source Software, OSS, signalR. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Lorenzo Maiorfi

    Hi. Maybe you would like to take a look to our remote monitoring/control of industrial plants demo project using SignalR (+.NET Micro Framework) : http://www.tinyclr.it/demo-%e2%80%9csupervisione-remota-impianti%e2%80%9d-live.aspx
    At this time it isn’t live anymore…

    • Eric Hexter

      I will check it out.. I really dig the .net Microframework. I have a netduino sitting on my desk.

  • Nouman Uz Zama

    A quick question in my mind. Hope you will give me a answer the tips that you given are they same for any automation device?