anchor.diff:      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 = <<"/", GroupId/binary, "/", DeviceId/binary,
  -	      "/analog/",               (integer_to_binary(PinNo))/binary >>,
  -
  +    Topic = topic(GroupId, DeviceId, <<"analog">>, PinNo),
       lager:debug("Send Topic  : ~p", [Topic]),
       lager:debug("Send Payload: ~p", [Payload]),
       emqttc:publish(emqttc, Topic, Payload),
  
positive.code: %%%===================================================================
  %%% Internal functions
  %%%===================================================================
  
negative.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 = topic(GroupId, DeviceId, <<"digital">>, PortNo),
      lager:debug("Send Topic  : ~p", [Topic]),
      lager:debug("Send Payload: ~p", [Payload]),
      emqttc:publish(emqttc, Topic, Payload, [{qos, 0}, {retain, 1}]),
  