anchor.diff:  %%%===================================================================
   %%% Internal functions
   %%%===================================================================
  +
  +%% crete mqtt topic, that formatted binary.
  +-spec topic(GroupId, DeviceId, DataType, DataNo) -> binary() when
  +      GroupId :: binary(),
  +      DeviceId :: binary(),
  +      DataType :: binary(),
  +      DataNo :: non_neg_integer().
  +topic(GroupId, DeviceId, DataType, DataNo) when is_binary(GroupId),
  +						is_binary(DeviceId),
  +						is_binary(DataType),
  +						is_integer(DataNo) ->
  +    list_to_binary(["/", GroupId, "/", DeviceId, "/", DataType, "/",
  +		    integer_to_binary(DataNo)]).
  +
  
positive.code:     lager:info("digital sent mqtt broker(port:~w): ~p", [PortNo, Status]),
      Payload = marionet_data:pack([?DIGITAL_CODE, DeviceId, PortNo, Status]),
      GroupId = State#state.group_id,
  
      Topic = <<"/", GroupId/binary, "/", DeviceId/binary,
  	      "/digital/",              (integer_to_binary(PortNo))/binary >>,
  
      lager:debug("Send Topic  : ~p", [Topic]),
      lager:debug("Send Payload: ~p", [Payload]),
      emqttc:publish(emqttc, Topic, Payload, [{qos, 0}, {retain, 1}]),
  
negative.code:     lager:info("analog send mqtt broker(PinNo:~w): ~w", [PinNo, Val]),
      Payload = marionet_data:pack([?ANALOG_CODE, DeviceId, PinNo, Val]),
      GroupId = State#state.group_id,
      Topic = topic(GroupId, DeviceId, <<"analog">>, PinNo),
      lager:debug("Send Topic  : ~p", [Topic]),
      lager:debug("Send Payload: ~p", [Payload]),
      emqttc:publish(emqttc, Topic, Payload),
  