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:     {noreply, NewState :: #state{}, timeout() | hibernate} |
      {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} |
      {stop, Reason :: term(), NewState :: #state{}}).
  handle_call({iterate, Iterator, Acc}, _From, #state{root = Root} = State) ->
      {reply, ehome_vtree:iterate_subs(Iterator, Acc, Root), State};
  handle_call({get_value, Path}, _From, #state{root = Root} = State) ->
      {reply, ehome_vtree:get_value(Path, Root), State};
  handle_call(stop, _From, State) ->
      {stop, normal, ok, State};
  
negative.code: 
  -record(state, {
      mqtt :: pid(),
      cache
  }).
  
  %%%===================================================================
  