Hands on with Home Together


Pierre Salaün
Jan 21, 2016 Use CaseIoT

Hands on with Home Together

A couple of weeks ago, we were showcasing our latest smart home demo at CES, as you may have read in a [previous blog post]({% post_url 2016-01-06-home-together-a-ces-demo %}). The demo is now playable online!!

Try Home Together now!

As promised, we also made its sources publicly available so that you can play around with the behavior trees, just fork the project on github then add to the workbench! But some explanations might come in handy, so here it goes!


First off, a quick reminder of the scenario that we are playing with: a house (floor plan below) augmented with connected devices (indoor positioning system, light bulbs, TV, blinds, shower head) in which two occupants are living. One of these occupants, Gisele, wanders around the house randomly. The other one is controlled by you! You can place the player character in any room and control the corresponding light. Moreover, clicking on the TV will turn it on and place the player inside the living room.

Floor plan

0. living room 1. dining room 2. corridor 3. bathroom 4. WC 5. bedroom

Behavior trees

Let’s take a look at the craft ai behavior trees that are behind the mechanisms ruling this house. Each room is ruled by an agent running a common behavior tree, cleverly labeled Room.bt, described bellow

The common Room behavior tree

What it does, under the parallel node, is

  1. managing light bulb (leftmost branch),
  2. checking the light intensity value (second branch from the left),
  3. handling decision undoing (rightmost branch).

The parallel node is set to “propagate to all” so that it will reactivate any child once it has been terminated. The termination condition “fails if any fails”, combined with the “Stall” action as a child, will allow to keep the parallel node from terminating (its other children being designed so that they never fail).

If we take a deeper look at the first branch, we have an embedded behavior tree RoomPresence.bt that is basically a switch case to take the different combination of presence and light intensity into account. In any case, another embedded behavior tree RoomPreferences.bt will then be called with specific parameters.

The Room Preferences behavior tree

In a first step, this behavior tree:

  • does nothing if it is called after an AI decision is undone by one of the inhabitants,
  • stores the current light settings then apply the new ones it received as parameters from its parent BT.

In a second step, the BT will keep checking on the light settings to update the preferences with new ones whenever they are manually changed.

This logic here is the basics of each room, but some rooms are equipped with other devices that will impact the rules described above. Thus, each room is specialized, ie: they are not calling directly Room.bt but a dedicated behavior tree that embeds Room.bt.

Let’s take the bathroom for instance. It is equipped with a Hydrao shower head which notifies whenever water consumption is excessive, and we want to turn this notification into a visual alert through the light bulbs.

To do so, the agent for the bathroom actually instantiates the Bathroom.bt behavior tree, that reads as follows:

The Bathroom behavior tree

First, it checks if there is someone inside (for the purpose of the demo, it only checks if the player is inside) to execute a specific branch; otherwise it will simply run Room.bt.

If someone is inside, it will run Room.bt for 15 seconds, then flashes the bathroom light from red to blue until your exit.


This demo sets an example of what an intelligent home could be with craft ai federating the automation and learning of users’ habits, but it would be possible to extend the use case and account for all of the possible connected devices that could come up in such a place. Imagine: security systems, speakers, thermostats, virtually every electrical device plugged into a connected outlet... and even companion robots.

All of those pieces of technology could be interacting within this unified ecosystem by using the craft ai platform.

Now you can try this at home! We're eager to hear what you think, do not hesitate to send us feedback on potential ideas or issues you may encounter.