Day-ahead scheduling of generation units and storage devices is essential for the economic and efficient operation of a power system. Conventionally, a control center calculates the dispatch schedule by gathering information from all of the devices. However, this centralized control structure makes the system vulnerable to single point of failure and communication failures, and raises privacy concerns. In this paper, a fully distributed algorithm is proposed to find the optimal dispatch schedule for a smart grid with renewable and energy storage integration. The algorithm considers modified DC power flow constraints, branch energy losses, and energy storage charging and discharging efficiencies. In this algorithm, each bus of the system is modeled as an agent. By solely exchanging information with its neighbors, the optimal dispatch schedule of the conventional generators and energy storage can be achieved in an iterative manner. The effectiveness of the algorithm is demonstrated through several representative case studies.