anchor.diff:  
   from_mqtt(["zwave", "get", "devices", Device, "instances", Instance,
              "commandClasses", Class, "data" | Rest], Message,
  -        #state{root = Root} = State) ->
  +        #state{cache = Root} = State) ->
       Path = to_path(Device, Instance, Class, Rest),
       case ehome_vtree:set_value(Path, Message, Root) of
           {NewRoot, true} ->
               lager:debug("~p = ~p", [Path, Message]),
               ehome_dispatcher:publish([mqtt, get | Path], Message),
  -            State#state{root = NewRoot};
  +            State#state{cache = NewRoot};
           {_, false} ->
               State
       end;
  
positive.code: 
  -record(state, {
      mqtt :: pid(),
      root
  }).
  
  %%%===================================================================
  
negative.code:         fun([mqtt, control | Topic], Value) ->
              gen_server:cast(Self, {control_mqtt, Topic, Value})
          end),
      {ok, #state{mqtt = Mqtt, cache = ehome_vtree:new()}}.
  
  %%--------------------------------------------------------------------
  %% @private
  